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 2016/12/13 19:25:23 UTC
svn commit: r1774081 - in
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state:
PDExtendedGraphicsState.java PDSoftMask.java
Author: tilman
Date: Tue Dec 13 19:25:23 2016
New Revision: 1774081
URL: http://svn.apache.org/viewvc?rev=1774081&view=rev
Log:
PDFBOX-3000: save initial CTM in softmask so that CTM at the moment of ExtGState activation is remembered
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDExtendedGraphicsState.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDSoftMask.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDExtendedGraphicsState.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDExtendedGraphicsState.java?rev=1774081&r1=1774080&r2=1774081&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDExtendedGraphicsState.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDExtendedGraphicsState.java Tue Dec 13 19:25:23 2016
@@ -143,7 +143,14 @@ public class PDExtendedGraphicsState imp
}
else if( key.equals( COSName.SMASK ) )
{
- gs.setSoftMask(getSoftMask());
+ PDSoftMask softmask = getSoftMask();
+ if (softmask != null)
+ {
+ // Softmask must know the CTM at the time the ExtGState is activated. Read
+ // https://bugs.ghostscript.com/show_bug.cgi?id=691157#c7 for a good explanation.
+ softmask.setInitialTransformationMatrix(gs.getCurrentTransformationMatrix().clone());
+ }
+ gs.setSoftMask(softmask);
}
else if( key.equals( COSName.BM ) )
{
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDSoftMask.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDSoftMask.java?rev=1774081&r1=1774080&r2=1774081&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDSoftMask.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDSoftMask.java Tue Dec 13 19:25:23 2016
@@ -28,6 +28,7 @@ import org.apache.pdfbox.pdmodel.common.
import org.apache.pdfbox.pdmodel.common.function.PDFunction;
import org.apache.pdfbox.pdmodel.graphics.PDXObject;
import org.apache.pdfbox.pdmodel.graphics.form.PDTransparencyGroup;
+import org.apache.pdfbox.util.Matrix;
/**
* Soft mask.
@@ -75,6 +76,11 @@ public final class PDSoftMask implements
private PDFunction transferFunction = null;
/**
+ * To allow a soft mask to know the CTM at the time of activation of the ExtGState.
+ */
+ private Matrix ctm;
+
+ /**
* Creates a new soft mask.
*
* @param dictionary The soft mask dictionary.
@@ -153,4 +159,24 @@ public final class PDSoftMask implements
}
return transferFunction;
}
+
+ /**
+ * Set the CTM that is valid at the time the ExtGState was activated.
+ *
+ * @param ctm
+ */
+ void setInitialTransformationMatrix(Matrix ctm)
+ {
+ this.ctm = ctm;
+ }
+
+ /**
+ * Returns the CTM at the time the ExtGState was activated.
+ *
+ * @return
+ */
+ public Matrix getInitialTransformationMatrix()
+ {
+ return ctm;
+ }
}