You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by le...@apache.org on 2024/06/17 18:23:24 UTC
svn commit: r1918392 - in /pdfbox/trunk/pdfbox/src: main/java/org/apache/pdfbox/multipdf/Splitter.java test/java/org/apache/pdfbox/multipdf/PDFMergerUtilityTest.java
Author: lehmi
Date: Mon Jun 17 18:23:24 2024
New Revision: 1918392
URL: http://svn.apache.org/viewvc?rev=1918392&view=rev
Log:
PDFBOX-5841: copy COSObject instead of PDMetadata to avoid a malformed result
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/multipdf/Splitter.java
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/multipdf/PDFMergerUtilityTest.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/multipdf/Splitter.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/multipdf/Splitter.java?rev=1918392&r1=1918391&r2=1918392&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/multipdf/Splitter.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/multipdf/Splitter.java Mon Jun 17 18:23:24 2024
@@ -35,6 +35,7 @@ import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.cos.COSObject;
import org.apache.pdfbox.io.RandomAccessStreamCache.StreamCacheCreateFunction;
import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.pdmodel.PDDocumentCatalog;
import org.apache.pdfbox.pdmodel.PDDocumentInformation;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageTree;
@@ -679,14 +680,17 @@ public class Splitter
}
document.setDocumentInformation(new PDDocumentInformation(destDocumentInformationDictionary));
}
- document.getDocumentCatalog().setViewerPreferences(
- getSourceDocument().getDocumentCatalog().getViewerPreferences());
- document.getDocumentCatalog().setLanguage(
- getSourceDocument().getDocumentCatalog().getLanguage());
- document.getDocumentCatalog().setMarkInfo(
- getSourceDocument().getDocumentCatalog().getMarkInfo());
- document.getDocumentCatalog().setMetadata(
- getSourceDocument().getDocumentCatalog().getMetadata());
+ PDDocumentCatalog destCatalog = document.getDocumentCatalog();
+ PDDocumentCatalog sourceCatalog = getSourceDocument().getDocumentCatalog();
+ destCatalog.setViewerPreferences(sourceCatalog.getViewerPreferences());
+ destCatalog.setLanguage(sourceCatalog.getLanguage());
+ destCatalog.setMarkInfo(sourceCatalog.getMarkInfo());
+ // copy the COS-object itself instead of the PD-object to avoid a malformed result
+ COSObject metaData = sourceCatalog.getCOSObject().getCOSObject(COSName.METADATA);
+ if (metaData != null)
+ {
+ destCatalog.getCOSObject().setItem(COSName.METADATA, metaData);
+ }
return document;
}
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=1918392&r1=1918391&r2=1918392&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 Mon Jun 17 18:23:24 2024
@@ -16,6 +16,7 @@
package org.apache.pdfbox.multipdf;
import java.awt.image.BufferedImage;
+import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
@@ -59,6 +60,7 @@ import org.apache.pdfbox.rendering.PDFRe
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -1242,6 +1244,14 @@ class PDFMergerUtilityTest
assertEquals(3, pageTree.indexOf(pd3.getPage()));
assertEquals(3, pageTree.indexOf(pd4.getPage()));
assertEquals(5, pageTree.indexOf(pd5.getPage()));
+
+ assertNotNull(dstDoc.getDocumentCatalog().getMetadata());
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ dstDoc.save(baos);
+ PDDocument reloadedDoc = Loader.loadPDF(baos.toByteArray());
+ assertNotNull(reloadedDoc.getDocumentCatalog().getMetadata());
+ reloadedDoc.close();
}
// Check that source document is unchanged
annotations = doc.getPage(0).getAnnotations();