Author: tilman
Date: Wed Apr  2 12:30:42 2025
New Revision: 1924745

URL: http://svn.apache.org/viewvc?rev=1924745&view=rev
Log:
PDFBOX-5980: fix BDC processor handling of properties, adjust test and rendering

Modified:
    
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/markedcontent/BeginMarkedContentSequenceWithProperties.java
    
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
    
pdfbox/branches/3.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/optionalcontent/TestOptionalContentGroups.java

Modified: 
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/markedcontent/BeginMarkedContentSequenceWithProperties.java
URL: 
http://svn.apache.org/viewvc/pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/markedcontent/BeginMarkedContentSequenceWithProperties.java?rev=1924745&r1=1924744&r2=1924745&view=diff
==============================================================================
--- 
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/markedcontent/BeginMarkedContentSequenceWithProperties.java
 (original)
+++ 
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/markedcontent/BeginMarkedContentSequenceWithProperties.java
 Wed Apr  2 12:30:42 2025
@@ -19,13 +19,15 @@ 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.PDFStreamEngine;
+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.
@@ -40,22 +42,39 @@ public class BeginMarkedContentSequenceW
     }
 
     @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;
+        }
+        PDFStreamEngine context = getContext();
+        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();
             }
         }
-        getContext().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/3.0/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
URL: 
http://svn.apache.org/viewvc/pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java?rev=1924745&r1=1924744&r2=1924745&view=diff
==============================================================================
--- 
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
 (original)
+++ 
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
 Wed Apr  2 12:30:42 2025
@@ -2094,11 +2094,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/3.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/optionalcontent/TestOptionalContentGroups.java
URL: 
http://svn.apache.org/viewvc/pdfbox/branches/3.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/optionalcontent/TestOptionalContentGroups.java?rev=1924745&r1=1924744&r2=1924745&view=diff
==============================================================================
--- 
pdfbox/branches/3.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/optionalcontent/TestOptionalContentGroups.java
 (original)
+++ 
pdfbox/branches/3.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/optionalcontent/TestOptionalContentGroups.java
 Wed Apr  2 12:30:42 2025
@@ -47,6 +47,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.font.Standard14Fonts.FontName;
@@ -215,14 +216,23 @@ class TestOptionalContentGroups
             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()));
         }


Reply via email to