Hi

I have pdf file with a lot of links. They generally look like this in Foxit.
[cid:image001.png@01D9056E.E7AC9910]

In notepad the links look something like this:
/Subtype /Link
/A 140 0 R
/Type /Annot
/Rect [561.26 196.299 572.598 234.567]
>>
endobj
140 0 obj
<<
/D [5 0 R /Fit]
/Next 307 0 R
/Type /Action
/S /GoTo
>>
endobj

When attempting to split the pdf using the following code:
final PDDocument p1PD = PDDocument.load(p1.toFile());
final Splitter splitter = new Splitter();
final List<PDDocument> listPDFPages1 = splitter.split(p1PD);

I get the following exception:
java.io.IOException: Error: can't convert to Destination 
COSArray{[COSName{Fit}]}
                             at 
org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDDestination.create(PDDestination.java:98)
                             at 
org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationLink.getDestination(PDAnnotationLink.java:148)


It is thrown from PDDestination.create(COSBase base):98.
It happens because base is an COSArray with only one item [COSName{fit}]
[cid:image003.png@01D90570.0D8EF910]

If I change the code in Splitter to catch the exception and ignore it:
[cid:image002.png@01D9056E.E7AC9910]
It will process all the annotations and annotation links and simply ignore the 
error.
The splitted pages now contain links that look like this:
91 0 obj
<<
/D [null /Fit]
/Next 178 0 R
/Type /Action
/S /GoTo
>>
endobj


Now instead of /D [5 0 R /Fit] it is /D [null /Fit]
If I now try to process the annotations of the page 
PDAnnotationLink.getDestination will not throw an Exception anymore because the 
argument base will contain an COSArray the contains two items 
[COSNull{},COSName{fit}]

I don't know how to interpret this. My solution for right now is to use my own 
customized copy of the Splitter class that simply absorb the exception.
I feel like that for some reason PDFBox is ignoring the 5 0 R part of /D [5 0 R 
/Fit] when building the annotations. I don't know enough about the PDF Spec to 
tell what it does.

I am using PDFBox 2.0.27


BR
Thomas

Reply via email to