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 2025/01/03 11:07:58 UTC
svn commit: r1922855 - in /pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream: ./ operator/color/
Author: tilman
Date: Fri Jan 3 11:07:57 2025
New Revision: 1922855
URL: http://svn.apache.org/viewvc?rev=1922855&view=rev
Log:
PDFBOX-4627, PDFBOX-5054: ignore color operators in type3 charprocs with d1 or uncolored tiling patterns
Modified:
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDFStreamEngine.java
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingColorSpace.java
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingDeviceCMYKColor.java
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingDeviceGrayColor.java
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingDeviceRGBColor.java
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingColorSpace.java
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingDeviceCMYKColor.java
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingDeviceGrayColor.java
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingDeviceRGBColor.java
Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDFStreamEngine.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDFStreamEngine.java?rev=1922855&r1=1922854&r2=1922855&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDFStreamEngine.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDFStreamEngine.java Fri Jan 3 11:07:57 2025
@@ -63,6 +63,7 @@ import org.apache.pdfbox.pdmodel.interac
import org.apache.pdfbox.util.Matrix;
import org.apache.pdfbox.util.Vector;
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.pdmodel.graphics.blend.BlendMode;
@@ -88,6 +89,9 @@ public abstract class PDFStreamEngine
// used to monitor potentially recursive operations.
private int level = 0;
+ // false in certain cases, e.g. type3 charprocs with d1 or uncolored tiling patterns
+ private boolean shouldProcessColorOperators;
+
/**
* Creates a new PDFStreamEngine.
*/
@@ -525,18 +529,40 @@ public abstract class PDFStreamEngine
List<COSBase> arguments = new ArrayList<COSBase>();
PDFStreamParser parser = new PDFStreamParser(contentStream);
Object token = parser.parseNextToken();
- while (token != null)
+
+ boolean isFirstOperator = true;
+ boolean oldShouldProcessColorOperators = shouldProcessColorOperators;
+ shouldProcessColorOperators = true;
+ if (contentStream instanceof PDTilingPattern &&
+ ((PDTilingPattern) contentStream).getPaintType() == PDTilingPattern.PAINT_UNCOLORED)
{
- if (token instanceof Operator)
- {
- processOperator((Operator) token, arguments);
- arguments.clear();
- }
- else
+ shouldProcessColorOperators = false;
+ }
+ try
+ {
+ while (token != null)
{
- arguments.add((COSBase) token);
+ if (token instanceof Operator)
+ {
+ if (isFirstOperator && contentStream instanceof PDType3CharProc &&
+ OperatorName.TYPE3_D1.equals(((Operator) token).getName()))
+ {
+ shouldProcessColorOperators = false;
+ }
+ isFirstOperator = false;
+ processOperator((Operator) token, arguments);
+ arguments.clear();
+ }
+ else
+ {
+ arguments.add((COSBase) token);
+ }
+ token = parser.parseNextToken();
}
- token = parser.parseNextToken();
+ }
+ finally
+ {
+ shouldProcessColorOperators = oldShouldProcessColorOperators;
}
}
@@ -1207,4 +1233,9 @@ public abstract class PDFStreamEngine
LOG.error("level is " + level);
}
}
+
+ public boolean isShouldProcessColorOperators()
+ {
+ return shouldProcessColorOperators;
+ }
}
Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingColorSpace.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingColorSpace.java?rev=1922855&r1=1922854&r2=1922855&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingColorSpace.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingColorSpace.java Fri Jan 3 11:07:57 2025
@@ -37,6 +37,10 @@ public class SetNonStrokingColorSpace ex
@Override
public void process(Operator operator, List<COSBase> arguments) throws IOException
{
+ if (!context.isShouldProcessColorOperators())
+ {
+ return;
+ }
if (arguments.isEmpty())
{
return;
Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingDeviceCMYKColor.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingDeviceCMYKColor.java?rev=1922855&r1=1922854&r2=1922855&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingDeviceCMYKColor.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingDeviceCMYKColor.java Fri Jan 3 11:07:57 2025
@@ -36,6 +36,10 @@ public class SetNonStrokingDeviceCMYKCol
@Override
public void process(Operator operator, List<COSBase> arguments) throws IOException
{
+ if (!context.isShouldProcessColorOperators())
+ {
+ return;
+ }
PDColorSpace cs = context.getResources().getColorSpace(COSName.DEVICECMYK);
context.getGraphicsState().setNonStrokingColorSpace(cs);
super.process(operator, arguments);
Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingDeviceGrayColor.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingDeviceGrayColor.java?rev=1922855&r1=1922854&r2=1922855&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingDeviceGrayColor.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingDeviceGrayColor.java Fri Jan 3 11:07:57 2025
@@ -36,6 +36,10 @@ public class SetNonStrokingDeviceGrayCol
@Override
public void process(Operator operator, List<COSBase> arguments) throws IOException
{
+ if (!context.isShouldProcessColorOperators())
+ {
+ return;
+ }
PDColorSpace cs = context.getResources().getColorSpace(COSName.DEVICEGRAY);
context.getGraphicsState().setNonStrokingColorSpace(cs);
super.process(operator, arguments);
Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingDeviceRGBColor.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingDeviceRGBColor.java?rev=1922855&r1=1922854&r2=1922855&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingDeviceRGBColor.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingDeviceRGBColor.java Fri Jan 3 11:07:57 2025
@@ -36,6 +36,10 @@ public class SetNonStrokingDeviceRGBColo
@Override
public void process(Operator operator, List<COSBase> arguments) throws IOException
{
+ if (!context.isShouldProcessColorOperators())
+ {
+ return;
+ }
PDColorSpace cs = context.getResources().getColorSpace(COSName.DEVICERGB);
context.getGraphicsState().setNonStrokingColorSpace(cs);
super.process(operator, arguments);
Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingColorSpace.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingColorSpace.java?rev=1922855&r1=1922854&r2=1922855&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingColorSpace.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingColorSpace.java Fri Jan 3 11:07:57 2025
@@ -37,6 +37,10 @@ public class SetStrokingColorSpace exten
@Override
public void process(Operator operator, List<COSBase> arguments) throws IOException
{
+ if (!context.isShouldProcessColorOperators())
+ {
+ return;
+ }
if (arguments.isEmpty())
{
return;
Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingDeviceCMYKColor.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingDeviceCMYKColor.java?rev=1922855&r1=1922854&r2=1922855&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingDeviceCMYKColor.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingDeviceCMYKColor.java Fri Jan 3 11:07:57 2025
@@ -35,6 +35,10 @@ public class SetStrokingDeviceCMYKColor
@Override
public void process(Operator operator, List<COSBase> arguments) throws IOException
{
+ if (!context.isShouldProcessColorOperators())
+ {
+ return;
+ }
PDColorSpace cs = context.getResources().getColorSpace(COSName.DEVICECMYK);
context.getGraphicsState().setStrokingColorSpace(cs);
super.process(operator, arguments);
Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingDeviceGrayColor.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingDeviceGrayColor.java?rev=1922855&r1=1922854&r2=1922855&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingDeviceGrayColor.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingDeviceGrayColor.java Fri Jan 3 11:07:57 2025
@@ -33,8 +33,13 @@ import java.util.List;
*/
public class SetStrokingDeviceGrayColor extends SetStrokingColor
{
+ @Override
public void process(Operator operator, List<COSBase> arguments) throws IOException
{
+ if (!context.isShouldProcessColorOperators())
+ {
+ return;
+ }
PDColorSpace cs = context.getResources().getColorSpace(COSName.DEVICEGRAY);
context.getGraphicsState().setStrokingColorSpace(cs);
super.process(operator, arguments);
Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingDeviceRGBColor.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingDeviceRGBColor.java?rev=1922855&r1=1922854&r2=1922855&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingDeviceRGBColor.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingDeviceRGBColor.java Fri Jan 3 11:07:57 2025
@@ -40,8 +40,13 @@ public class SetStrokingDeviceRGBColor e
* @param arguments List
* @throws IOException If the color space cannot be read.
*/
+ @Override
public void process(Operator operator, List<COSBase> arguments) throws IOException
{
+ if (!context.isShouldProcessColorOperators())
+ {
+ return;
+ }
PDColorSpace cs = context.getResources().getColorSpace(COSName.DEVICERGB);
context.getGraphicsState().setStrokingColorSpace(cs);
super.process(operator, arguments);