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: dev-unsubscr...@pdfbox.apache.org For additional commands, e-mail: dev-h...@pdfbox.apache.org