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 2019/04/25 10:03:18 UTC
svn commit: r1858105 -
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
Author: tilman
Date: Thu Apr 25 10:03:18 2019
New Revision: 1858105
URL: http://svn.apache.org/viewvc?rev=1858105&view=rev
Log:
PDFBOX-4526: support optional content membership dictionary when rendering
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java?rev=1858105&r1=1858104&r2=1858105&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java Thu Apr 25 10:03:18 2019
@@ -79,6 +79,7 @@ import org.apache.pdfbox.pdmodel.graphic
import org.apache.pdfbox.pdmodel.graphics.image.PDImage;
import org.apache.pdfbox.pdmodel.graphics.optionalcontent.PDOptionalContentGroup;
import org.apache.pdfbox.pdmodel.graphics.optionalcontent.PDOptionalContentGroup.RenderState;
+import org.apache.pdfbox.pdmodel.graphics.optionalcontent.PDOptionalContentMembershipDictionary;
import org.apache.pdfbox.pdmodel.graphics.pattern.PDAbstractPattern;
import org.apache.pdfbox.pdmodel.graphics.pattern.PDShadingPattern;
import org.apache.pdfbox.pdmodel.graphics.pattern.PDTilingPattern;
@@ -1744,9 +1745,70 @@ public class PageDrawer extends PDFGraph
return true;
}
}
+ else if (propertyList instanceof PDOptionalContentMembershipDictionary)
+ {
+ return isHiddenOCMD((PDOptionalContentMembershipDictionary) propertyList);
+ }
return false;
}
+ private boolean isHiddenOCMD(PDOptionalContentMembershipDictionary ocmd)
+ {
+ if (ocmd.getCOSObject().getCOSArray(COSName.VE) != null)
+ {
+ // support seems to be optional, and is approximated by /P and /OCGS
+ LOG.info("/VE entry ignored in Optional Content Membership Dictionary");
+ }
+ List<Boolean> visibles = new ArrayList<>();
+ for (PDPropertyList prop : ocmd.getOCGs())
+ {
+ visibles.add(!isHiddenOCG(prop));
+ }
+ COSName visibilityPolicy = ocmd.getVisibilityPolicy();
+ if (COSName.ANY_OFF.equals(visibilityPolicy))
+ {
+ for (boolean visible : visibles)
+ {
+ if (!visible)
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+ if (COSName.ALL_ON.equals(visibilityPolicy))
+ {
+ for (boolean visible : visibles)
+ {
+ if (!visible)
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+ if (COSName.ALL_OFF.equals(visibilityPolicy))
+ {
+ for (boolean visible : visibles)
+ {
+ if (visible)
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+ // AnyOn is default
+ for (boolean visible : visibles)
+ {
+ if (visible)
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
private static int getJavaVersion()
{
// strategy from lucene-solr/lucene/core/src/java/org/apache/lucene/util/Constants.java