Author: tilman Date: Tue Feb 11 13:10:58 2025 New Revision: 1923732 URL: http://svn.apache.org/viewvc?rev=1923732&view=rev Log: PDFBOX-5950: add test with 2 files from issue 515
Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/multipdf/PDFMergerUtilityTest.java Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/multipdf/PDFMergerUtilityTest.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/multipdf/PDFMergerUtilityTest.java?rev=1923732&r1=1923731&r2=1923732&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/multipdf/PDFMergerUtilityTest.java (original) +++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/multipdf/PDFMergerUtilityTest.java Tue Feb 11 13:10:58 2025 @@ -40,12 +40,14 @@ import org.apache.pdfbox.pdmodel.PDDocum import org.apache.pdfbox.pdmodel.PDDocumentCatalog; import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.PDPageTree; +import org.apache.pdfbox.pdmodel.PDResources; import org.apache.pdfbox.pdmodel.common.COSObjectable; import org.apache.pdfbox.pdmodel.common.PDNameTreeNode; import org.apache.pdfbox.pdmodel.common.PDNumberTreeNode; import org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure.PDStructureElement; import org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure.PDStructureNode; import org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure.PDStructureTreeRoot; +import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; import org.apache.pdfbox.pdmodel.interactive.action.PDAction; import org.apache.pdfbox.pdmodel.interactive.action.PDActionGoTo; import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; @@ -1352,4 +1354,33 @@ class PDFMergerUtilityTest assertEquals(2, mergedDoc.getNumberOfPages()); } } -} + + /** + * PDFBOX-515 / PDFBOX-5950: test merging of two files where one file has a stream deep down in + * the info dictionary (Info/ImPDF/Images/Kids/[0]). This test will pass only if the source file + * isn't closed prematurely, or if deep cloning is applied. + * + * @throws IOException + */ + @Test + void testPDFBox515() throws IOException + { + PDFMergerUtility pdfMergerUtility = new PDFMergerUtility(); + pdfMergerUtility.addSource(new File(TARGETPDFDIR, "ComSquare1.pdf")); + pdfMergerUtility.addSource(new File(TARGETPDFDIR, "Ghostscript1.pdf")); + pdfMergerUtility.setDestinationFileName(TARGETTESTDIR + "PDFBOX-515-result.pdf"); + pdfMergerUtility.mergeDocuments(IOUtils.createMemoryOnlyStreamCache()); + + try (PDDocument mergedDoc = Loader.loadPDF(new File(TARGETTESTDIR, "PDFBOX-515-result.pdf"))) + { + assertEquals(2, mergedDoc.getNumberOfPages()); + COSDictionary imageDict = (COSDictionary) mergedDoc.getDocumentInformation().getCOSObject(). + getCOSDictionary(COSName.getPDFName("ImPDF")). + getCOSDictionary(COSName.getPDFName("Images")). + getCOSArray(COSName.KIDS).getObject(0); + PDImageXObject imageXObject = (PDImageXObject) PDImageXObject.createXObject(imageDict, new PDResources()); + assertEquals(909, imageXObject.getWidth()); + assertEquals(233, imageXObject.getHeight()); + } + } +} \ No newline at end of file