[poppler] PDF compliance, regarding Annot /Rect

Leonard Rosenthol lrosenth at adobe.com
Tue Mar 20 22:31:02 UTC 2018


To be clear - AP's are optional in ISO 32000-1 (PDF 1.x) but are required by ISO 32000-2 (PDF 2.x)

However, you are completely correct that drawing an AP (either pre-generated or dynamically created) outside of the Rect is a bug. The Rect is considered a clipping rect for the AP - this is defined in 32K somewhere...

Leonard

On 3/20/18, 6:22 PM, "poppler on behalf of Tobias Deiminger" <poppler-bounces at lists.freedesktop.org on behalf of haxtibal at posteo.de> wrote:

    I've stumbled upon the following issue several times, and it affects a 
    patch series I'm currently doing. Please let me ask about it here.
    
    Suppose we've got an annotation object like
    <<
    /Type /Annot
    /Rect [0.00 0.00 10.00 10.00]
    % ... other required stuff, omitted for readability ... %
    % Important: There's no /AP %
    >> 
    
    An annotation at position 0,0 with dimension 10x10 pts... There's no AP 
    entry, i.e. no embedded appearance. That's fine, AP is optional in ISO 
    32000. Poppler conforms and does its best to generate the missing 
    appearance at runtime.
    
    But then poppler does something that seems buggy. In some cases it 
    ignores /Rect and draws the generated appearance with a new size chosen 
    by poppler. The new size is not written back to /Rect, nor is it 
    reflected in public APIs (this puzzles Okular [0]). As an example you'll 
    always get 24x24 pts icons for popup notes, even if /Rect says 10x10 
    pts.
    
    My first question: Is ignoring /Rect for dynamically generated 
    appearances compliant with ISO 32000?
    If not, then it's a poppler bug, and I'd prefer to fix the bug instead 
    of building workarounds into my patch.
    
    If I got it right, "Algorithm: Appearance streams" from ISO 32000 
    describes how to do it right. We shall transform AP BBox to match with 
    Annot Rect. And we're almost there: Gfx::drawAnnot [1] sets up a matrix 
    to transform AP BBox into a rectangle given by xMin, yMin, xMax, yMax 
    arguments. It already works. We just have to use the original Rect 
    coordinates when calling Gfx::drawAnnot, instead of new ones. We might 
    loose aspect ratio for popplers own appearances, but that's imho better 
    than lying about the drawn size.
    
    So my second question: Is calling Gfx::drawAnnot with original /Rect 
    coordinates a valid approach for a fix?
    
    [0] https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbugs.kde.org%2Fshow_bug.cgi%3Fid%3D388458&data=02%7C01%7Clrosenth%40adobe.com%7Cdf368ef231de4d30f88908d58e8f86bf%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636571669467648347&sdata=fHXn5irYuLI51s5pCKEY1EvOpyMZLl69szEzK%2B4M4Fk%3D&reserved=0
    [1] 
    https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fcgit.freedesktop.org%2Fpoppler%2Fpoppler%2Ftree%2Fpoppler%2FGfx.cc%3Fh%3Dpoppler-0.63.0%23n5125&data=02%7C01%7Clrosenth%40adobe.com%7Cdf368ef231de4d30f88908d58e8f86bf%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636571669467648347&sdata=3Hsg66glB7AADAz4L5wtLpP%2FG910kYLxqg0qIDE7Zpo%3D&reserved=0
    _______________________________________________
    poppler mailing list
    poppler at lists.freedesktop.org
    https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.freedesktop.org%2Fmailman%2Flistinfo%2Fpoppler&data=02%7C01%7Clrosenth%40adobe.com%7Cdf368ef231de4d30f88908d58e8f86bf%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636571669467648347&sdata=VS4fgL2LNavg1ueN4k8Oht43emYjPsX8mvA2tjF63is%3D&reserved=0
    



More information about the poppler mailing list