Author: tilman
Date: Wed Apr 2 12:30:48 2025
New Revision: 1924746
URL: http://svn.apache.org/viewvc?rev=1924746&view=rev
Log:
PDFBOX-5980: fix BDC processor handling of properties, adjust test and rendering
Modified:
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/markedcontent/BeginMarkedContentSequenceWithProperties.java
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/optionalcontent/TestOptionalContentGroups.java
Modified:
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/markedcontent/BeginMarkedContentSequenceWithProperties.java
URL:
http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/markedcontent/BeginMarkedContentSequenceWithProperties.java?rev=1924746&r1=1924745&r2=1924746&view=diff
==============================================================================
---
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/markedcontent/BeginMarkedContentSequenceWithProperties.java
(original)
+++
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/markedcontent/BeginMarkedContentSequenceWithProperties.java
Wed Apr 2 12:30:48 2025
@@ -19,12 +19,14 @@ package org.apache.pdfbox.contentstream.
import java.io.IOException;
import java.util.List;
-import org.apache.pdfbox.cos.COSBase;
-import org.apache.pdfbox.cos.COSDictionary;
-import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.contentstream.operator.MissingOperandException;
import org.apache.pdfbox.contentstream.operator.Operator;
import org.apache.pdfbox.contentstream.operator.OperatorName;
import org.apache.pdfbox.contentstream.operator.OperatorProcessor;
+import org.apache.pdfbox.cos.COSBase;
+import org.apache.pdfbox.cos.COSDictionary;
+import org.apache.pdfbox.cos.COSName;
+import
org.apache.pdfbox.pdmodel.documentinterchange.markedcontent.PDPropertyList;
/**
* BDC : Begins a marked-content sequence with property list.
@@ -34,22 +36,38 @@ import org.apache.pdfbox.contentstream.o
public class BeginMarkedContentSequenceWithProperties extends OperatorProcessor
{
@Override
- public void process(Operator operator, List<COSBase> arguments) throws
IOException
+ public void process(Operator operator, List<COSBase> operands) throws
IOException
{
- COSName tag = null;
- COSDictionary properties = null;
- for (COSBase argument : arguments)
+ if (operands.size() < 2)
{
- if (argument instanceof COSName)
- {
- tag = (COSName) argument;
- }
- else if (argument instanceof COSDictionary)
+ throw new MissingOperandException(operator, operands);
+ }
+ if (!(operands.get(0) instanceof COSName))
+ {
+ return;
+ }
+ COSName tag = (COSName) operands.get(0);
+ COSBase op1 = operands.get(1);
+ COSDictionary propDict = null;
+ if (op1 instanceof COSName)
+ {
+ // PDFBOX-5980 and SO79549651
+ PDPropertyList prop =
context.getResources().getProperties((COSName) op1);
+ if (prop != null)
{
- properties = (COSDictionary) argument;
+ propDict = prop.getCOSObject();
}
}
- context.beginMarkedContentSequence(tag, properties);
+ else if (op1 instanceof COSDictionary)
+ {
+ propDict = (COSDictionary) op1;
+ }
+ if (propDict == null)
+ {
+ // wrong type or property not found
+ return;
+ }
+ context.beginMarkedContentSequence(tag, propDict);
}
@Override
Modified:
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
URL:
http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java?rev=1924746&r1=1924745&r2=1924746&view=diff
==============================================================================
---
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
(original)
+++
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
Wed Apr 2 12:30:48 2025
@@ -2174,11 +2174,11 @@ public class PageDrawer extends PDFGraph
nestedHiddenOCGCount++;
return;
}
- if (tag == null || getResources() == null)
+ if (properties == null)
{
return;
}
- if (isHiddenOCG(getResources().getProperties(tag)))
+ if (isHiddenOCG(PDPropertyList.create(properties)))
{
nestedHiddenOCGCount = 1;
}
Modified:
pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/optionalcontent/TestOptionalContentGroups.java
URL:
http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/optionalcontent/TestOptionalContentGroups.java?rev=1924746&r1=1924745&r2=1924746&view=diff
==============================================================================
---
pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/optionalcontent/TestOptionalContentGroups.java
(original)
+++
pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/optionalcontent/TestOptionalContentGroups.java
Wed Apr 2 12:30:48 2025
@@ -41,6 +41,7 @@ import org.apache.pdfbox.pdmodel.PDPageC
import org.apache.pdfbox.pdmodel.PDPageContentStream.AppendMode;
import org.apache.pdfbox.pdmodel.PageMode;
import
org.apache.pdfbox.pdmodel.documentinterchange.markedcontent.PDMarkedContent;
+import
org.apache.pdfbox.pdmodel.documentinterchange.markedcontent.PDPropertyList;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import
org.apache.pdfbox.pdmodel.graphics.optionalcontent.PDOptionalContentProperties.BaseState;
@@ -215,14 +216,23 @@ public class TestOptionalContentGroups e
PDFMarkedContentExtractor extractor = new
PDFMarkedContentExtractor();
extractor.processPage(page);
List<PDMarkedContent> markedContents =
extractor.getMarkedContents();
- assertEquals("oc1", markedContents.get(0).getTag());
+ assertEquals("OC", markedContents.get(0).getTag());
+ PDOptionalContentGroup ocg1 =
+ (PDOptionalContentGroup)
PDPropertyList.create(markedContents.get(0).getProperties());
+ assertEquals("background", ocg1.getName());
assertEquals("PDF 1.5: Optional Content Groups"
+ "You should see a green textline, but no red text line.",
textPositionListToString(markedContents.get(0).getContents()));
- assertEquals("oc2", markedContents.get(1).getTag());
+ assertEquals("OC", markedContents.get(1).getTag());
+ PDOptionalContentGroup ocg2 =
+ (PDOptionalContentGroup)
PDPropertyList.create(markedContents.get(1).getProperties());
+ assertEquals("enabled", ocg2.getName());
assertEquals("This is from an enabled layer. If you see this,
that's good.",
textPositionListToString(markedContents.get(1).getContents()));
- assertEquals("oc3", markedContents.get(2).getTag());
+ assertEquals("OC", markedContents.get(2).getTag());
+ PDOptionalContentGroup ocg3 =
+ (PDOptionalContentGroup)
PDPropertyList.create(markedContents.get(2).getProperties());
+ assertEquals("disabled", ocg3.getName());
assertEquals("This is from a disabled layer. If you see this,
that's NOT good!",
textPositionListToString(markedContents.get(2).getContents()));
}