Hi,

I’ve created an issue, https://issues.apache.org/jira/browse/PDFBOX-2786
Attached to the issue is a test case.

Kind regards,

Johanneke Lamberink




Op 4/5/15 14:24 schreef Johanneke Lamberink
<[email protected]>:

>Hi,
>
>Thank you for the quick reply. As I stated in my original email, I ask
>PDFBox for the pagenumber of a bookmark, and I use that exact number to
>set the pagenumber of a bookmark. No switching between user/development
>environment.
>
>The bookmark was added in Adobe Acrobat Pro, on the second page. When
>inspecting the bookmark, it states that the page destination is page 2.
>When programmatically setting the bookmark to the same page as returned by
>PDFBox for the original PDF, the bookmark in the resulting PDF is on the
>third page.
>
>The code I use for reading the bookmark and then creating the bookmark is
>pasted below.
>
>Reading a PDF to extract the bookmarks to XML:
>// item instanceof PDOutlineItem
>if ( item != null ) {
>   PDDestination destination = item.getDestination();
>   PDAction action = item.getAction();
>   if ( action instanceof PDActionGoTo && destination == null ) {
>      PDActionGoTo gotoAction = (PDActionGoTo) action;
>      destination = gotoAction.getDestination();
>   }
>   if ( destination != null ) {
>      Map<String, String> properties = new HashMap<String, String>();
>      properties.put( Bookmark.ACTION, "GoTo" );
>      if ( destination instanceof PDNamedDestination ) {
>         PDNamedDestination namedDest = (PDNamedDestination) destination;
>         properties.put( Bookmark.NAMED, namedDest.getNamedDestination()
>);
>      } else if ( destination instanceof PDPageDestination ) {
>         PDPageDestination pageDest = (PDPageDestination) destination;
>         int pagenumber = pageDest.findPageNumber(); // this results in
>Œ2¹ for the original PDF, with a bookmark created on the second page in
>Adobe Acrobat Pro
>         LOGGER.debug( "Page in PDF = " + pagenumber );
>         properties.put( Bookmark.PAGE, String.valueOf( pagenumber ) );
>      }
>   }
>                               }
>
>
>
>Creating bookmarks programmatically in the PDF:
>int pagenumber = Integer.parseInt( xml );
>COSArray destinationArray = new COSArray();
>                               destinationArray.add( 0, COSNumber.get( "" + 
> pagenumber ) );
>                               destinationArray.add( 1, COSName.getPDFName( 
> "Fit" ) );
>                               actionDict.setItem( "D", destinationArray );
>                               pdAction = new PDActionGoTo( actionDict );
>// I added this to check the correct setting of the destination
>                               PDActionGoTo gotoAction = (PDActionGoTo) 
> pdAction;
>                               PDPageDestination dest = (PDPageDestination)
>gotoAction.getDestination();
>                               LOGGER.debug( "New page in PDF = " + 
> dest.findPageNumber() );
>// results in page Œ2¹, same as the original PDF.
>
>
>
>
>I¹ve tried correcting the pagenumber myself by adding/subtracting 1, but
>this only works once. Setting the pagenumber to 1 (for example), will
>result in a correct PDF with a working bookmark. When extracting the
>bookmarks a second time however (as is needed for my application), I get
>pagenumber = 1. This means that I never know when to correct for the
>0-index.
>
>
>
>
>
>Op 4/5/15 14:09 schreef Gilad Denneboom <[email protected]>:
>
>>PDF pages (like almost anything else in arrays or lists) are 0-based.
>>That
>>means that 0 refers to the first item, 1 to the second one, etc. So PDF
>>page #2 refers to the third physical page in the document.
>>Acrobat is a user-facing application so it uses the more conventional
>>1-based way of referring to the these items, so the first page in a
>>document is #1, the second page is #2, etc.
>>This is something you always have to keep in mind when switching between
>>a
>>development environment and a user environment.
>>
>>On Mon, May 4, 2015 at 1:26 PM, Johanneke Lamberink <
>>[email protected]> wrote:
>>
>>> Hi,
>>>
>>> In my project I am exporting bookmarks from a PDF to an XML file, and
>>>at
>>> another stage importing the bookmarks from the XML file into the PDF.
>>>In
>>> doing this I've noticed an issue with the index of the page returned by
>>>the
>>> PDPageDestination methods.
>>>
>>> My situation is as follows:
>>> I have a PDF with a bookmark on the second page. That bookmark is
>>> represented by a PDOutlineItem with a PDActionGoTo and a
>>>PDPageDestination.
>>> Calling PDPageDestination.findPageNumber() on the bookmark's
>>>destination
>>> results in the integer 2. So far so good. I write to my XML file that
>>>the
>>> bookmark is on page 2.
>>> When reading the XML, I create a new PDGoTo action with a
>>> PDPageDestination. This PDPageDestination receives an array with the
>>> integer 2 as the first element.
>>> When I ask this new PDPageDestination for its pagenumber, using
>>> PDPageDestination.findPageNumber(), I receive 2. Since this is the same
>>> code I used to determine the bookmarked page in the first place, I
>>>would
>>> expect the bookmark to be made for the correct page at this point.
>>>
>>> However, when I open the PDF in Adobe Acrobat Pro and inspect the
>>> bookmark, it says the page destination is 3! When going to the bookmark
>>> destination, I end up on the third page of the PDF.
>>>
>>> Is this a bug in PDFBox? And does anyone have a solution on how to fix
>>> this?
>>>
>>> Kind regards,
>>>
>>>
>>> Johanneke Lamberink
>>>
>
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: [email protected]
>For additional commands, e-mail: [email protected]
>


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to