You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2017/08/30 16:25:54 UTC
svn commit: r1806711 -
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/multipdf/LayerUtility.java
Author: tilman
Date: Wed Aug 30 16:25:54 2017
New Revision: 1806711
URL: http://svn.apache.org/viewvc?rev=1806711&view=rev
Log:
PDFBOX-3914: no longer ignore OCProperties on import, as suggested by Ivan Khaldeev
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/multipdf/LayerUtility.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/multipdf/LayerUtility.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/multipdf/LayerUtility.java?rev=1806711&r1=1806710&r2=1806711&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/multipdf/LayerUtility.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/multipdf/LayerUtility.java Wed Aug 30 16:25:54 2017
@@ -149,6 +149,8 @@ public class LayerUtility
*/
public PDFormXObject importPageAsForm(PDDocument sourceDoc, PDPage page) throws IOException
{
+ importOcProperties(sourceDoc);
+
PDStream newStream = new PDStream(targetDoc, page.getContents(), COSName.FLATE_DECODE);
PDFormXObject form = new PDFormXObject(newStream);
@@ -273,4 +275,34 @@ public class LayerUtility
cloner.cloneForNewDocument(entry.getValue()));
}
}
+
+ /**
+ * Imports OCProperties from source document to target document so hidden layers can still be
+ * hidden after import.
+ *
+ * @param sourceDoc The source PDF document that contains the /OCProperties to be copied.
+ * @throws IOException If an I/O error occurs.
+ */
+ private void importOcProperties(PDDocument srcDoc) throws IOException
+ {
+ PDDocumentCatalog srcCatalog = srcDoc.getDocumentCatalog();
+ PDOptionalContentProperties srcOCProperties = srcCatalog.getOCProperties();
+ if (srcOCProperties == null)
+ {
+ return;
+ }
+
+ PDDocumentCatalog dstCatalog = targetDoc.getDocumentCatalog();
+ PDOptionalContentProperties dstOCProperties = dstCatalog.getOCProperties();
+
+ if (dstOCProperties == null)
+ {
+ dstCatalog.setOCProperties(new PDOptionalContentProperties(
+ (COSDictionary) cloner.cloneForNewDocument(srcOCProperties)));
+ }
+ else
+ {
+ cloner.cloneMerge(srcOCProperties, dstOCProperties);
+ }
+ }
}