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 2022/02/27 14:38:18 UTC
svn commit: r1898455 - in /pdfbox/trunk: examples/src/test/java/org/apache/pdfbox/examples/pdfa/CreatePDFATest.java pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java
Author: lehmi
Date: Sun Feb 27 14:38:18 2022
New Revision: 1898455
URL: http://svn.apache.org/viewvc?rev=1898455&view=rev
Log:
PDFBOX-5381: avoid writing the catalog object twice using a part of a patch povided by the blue mountain in PDFBOX-5369
Modified:
pdfbox/trunk/examples/src/test/java/org/apache/pdfbox/examples/pdfa/CreatePDFATest.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java
Modified: pdfbox/trunk/examples/src/test/java/org/apache/pdfbox/examples/pdfa/CreatePDFATest.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/examples/src/test/java/org/apache/pdfbox/examples/pdfa/CreatePDFATest.java?rev=1898455&r1=1898454&r2=1898455&view=diff
==============================================================================
--- pdfbox/trunk/examples/src/test/java/org/apache/pdfbox/examples/pdfa/CreatePDFATest.java (original)
+++ pdfbox/trunk/examples/src/test/java/org/apache/pdfbox/examples/pdfa/CreatePDFATest.java Sun Feb 27 14:38:18 2022
@@ -16,11 +16,16 @@
package org.apache.pdfbox.examples.pdfa;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
+import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
+import java.io.InputStreamReader;
import java.security.KeyStore;
+import java.util.HashSet;
+import java.util.Set;
import org.apache.pdfbox.Loader;
import org.apache.pdfbox.examples.pdmodel.CreatePDFA;
@@ -90,5 +95,36 @@ class CreatePDFATest
DublinCoreSchema dc = metadata.getDublinCoreSchema();
assertEquals(pdfaFilename, dc.getTitle());
}
+
+ File signedFile = new File(signedPdfaFilename);
+ BufferedReader br = new BufferedReader(
+ new InputStreamReader(new FileInputStream(signedFile)));
+ String line;
+ boolean isIncrementalArea = false;
+ Set<String> set = new HashSet<>();
+ int linePos = 0;
+ while ((line = br.readLine()) != null)
+ {
+ ++linePos;
+ if (line.equals("%%EOF"))
+ {
+ isIncrementalArea = true;
+ }
+ if (line.equals("%%EOF"))
+ {
+ isIncrementalArea = true;
+ set.clear(); // for cases with several revisions
+ }
+ if (line.matches("^\\d+ 0 obj$"))
+ {
+ int pos = line.indexOf(" 0 obj");
+ line = line.substring(0, pos);
+ assertFalse(set.contains(line), "object '" + line
+ + " 0 obj' twice in incremental part of PDF at line " + linePos);
+ set.add(line);
+ }
+ }
+ br.close();
+
}
}
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java?rev=1898455&r1=1898454&r2=1898455&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java Sun Feb 27 14:38:18 2022
@@ -1461,8 +1461,19 @@ public class COSWriter implements ICOSVi
pdDocument = doc;
COSDocument cosDoc = pdDocument.getDocument();
COSDictionary trailer = cosDoc.getTrailer();
- if(incrementalUpdate){
- trailer.toIncrement().exclude(trailer).forEach(objectsToWrite::add);
+ if (incrementalUpdate)
+ {
+ trailer.toIncrement().exclude(trailer).forEach(base -> {
+ objectsToWrite.add(base);
+ if (base instanceof COSObject)
+ {
+ actualsAdded.add(((COSObject) base).getObject());
+ }
+ else
+ {
+ actualsAdded.add(base);
+ }
+ });
}
signatureInterface = signInterface;
number = pdDocument.getDocument().getHighestXRefObjectNumber();