Derek Wickern created PDFBOX-5894:
-------------------------------------
Summary: Problem loading FDF
Key: PDFBOX-5894
URL: https://issues.apache.org/jira/browse/PDFBOX-5894
Project: PDFBox
Issue Type: Bug
Affects Versions: 3.0.3 PDFBox
Reporter: Derek Wickern
Attachments: sticky-notes.fdf
Loading the attached {{sticky-notes.fdf}} produces incorrect results. PDFBox
logs a bunch of errors like this:
{noformat}
15:59:55.131 [main] ERROR org.apache.pdfbox.cos.COSObject -- Can't dereference
COSObject{6 0 R}
java.io.IOException: org.apache.pdfbox.io.RandomAccessReadBufferedFile already
closed
at
org.apache.pdfbox.io.RandomAccessReadBufferedFile.checkClosed(RandomAccessReadBufferedFile.java:266)
at
org.apache.pdfbox.io.RandomAccessReadBufferedFile.getPosition(RandomAccessReadBufferedFile.java:118)
at
org.apache.pdfbox.pdfparser.COSParser.dereferenceCOSObject(COSParser.java:623)
at org.apache.pdfbox.cos.COSObject.getObject(COSObject.java:117)
at org.apache.pdfbox.cos.COSDocument.getObjectsByType(COSDocument.java:273)
at org.apache.pdfbox.cos.COSDocument.getObjectsByType(COSDocument.java:255)
at org.apache.pdfbox.cos.COSDocument.getObjectsByType(COSDocument.java:241)
at
PdfboxLoadFDFRegressionTest.main(PdfboxLoadFDFRegressionTest.java:16){noformat}
The issue seems to be that {{Loader.loadFDF}} closes the
{{RandomAccessReadBuffer}} immediately after parsing, but the read buffer is
still being used. A workaround is to make sure the read buffer is kept open
until you're done with the {{{}FDFDocument{}}}.
Reproduction code:
{code:java}
import org.apache.pdfbox.Loader;
import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.io.RandomAccessReadBuffer;
import org.apache.pdfbox.pdfparser.FDFParser;
import java.nio.file.Files;
import java.nio.file.Path;
public class PdfboxLoadFDFRegressionTest {
public static void main(String[] args) throws Exception {
var filename = "sticky-notes.fdf";
// broken:
try (var fdf = Loader.loadFDF(filename)) {
var annots = fdf.getDocument().getObjectsByType(COSName.ANNOT);
System.out.println(annots); // []
}
// workaround:
try (var readBuffer = new
RandomAccessReadBuffer(Files.readAllBytes(Path.of(filename)));
var fdf = new FDFParser(readBuffer).parse()) {
var annots = fdf.getDocument().getObjectsByType(COSName.ANNOT);
System.out.println(annots); // [COSObject{3 0 R}, COSObject{4 0 R},
COSObject{5 0 R}, COSObject{6 0 R}]
}
}
}{code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]