You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ja...@apache.org on 2014/12/05 23:11:28 UTC
svn commit: r1643446 - in
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox:
contentstream/PDFStreamEngine.java rendering/PageDrawer.java
Author: jahewson
Date: Fri Dec 5 22:11:27 2014
New Revision: 1643446
URL: http://svn.apache.org/r1643446
Log:
PDFBOX-2423: Clear soft mask in graphics state to avoid self-application
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDFStreamEngine.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDFStreamEngine.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDFStreamEngine.java?rev=1643446&r1=1643445&r2=1643446&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDFStreamEngine.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDFStreamEngine.java Fri Dec 5 22:11:27 2014
@@ -208,10 +208,21 @@ public class PDFStreamEngine
}
/**
+ * Processes a soft mask transparency group stream.
+ */
+ protected void processSoftMask(PDFormXObject group) throws IOException
+ {
+ // clear the current soft mask (this mask) to avoid recursion
+ saveGraphicsState();
+ getGraphicsState().setSoftMask(null);
+ processTransparencyGroup(group);
+ restoreGraphicsState();
+ }
+
+ /**
* Processes a transparency group stream.
*/
- protected void processTransparencyGroup(PDFormXObject group)
- throws IOException
+ protected void processTransparencyGroup(PDFormXObject group) throws IOException
{
if (currentPage == null)
{
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=1643446&r1=1643445&r2=1643446&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 Fri Dec 5 22:11:27 2014
@@ -447,7 +447,7 @@ public final class PageDrawer extends PD
*/
private Raster createSoftMaskRaster(PDSoftMask softMask) throws IOException
{
- TransparencyGroup transparencyGroup = new TransparencyGroup(softMask.getGroup());
+ TransparencyGroup transparencyGroup = new TransparencyGroup(softMask.getGroup(), true);
COSName subtype = softMask.getSubType();
if (COSName.ALPHA.equals(subtype))
{
@@ -782,7 +782,7 @@ public final class PageDrawer extends PD
@Override
public void showTransparencyGroup(PDFormXObject form) throws IOException
{
- TransparencyGroup group = new TransparencyGroup(form);
+ TransparencyGroup group = new TransparencyGroup(form, false);
graphics.setComposite(getGraphicsState().getNonStrokingJavaComposite());
setClip();
@@ -831,7 +831,7 @@ public final class PageDrawer extends PD
/**
* Creates a buffered image for a transparency group result.
*/
- private TransparencyGroup(PDFormXObject form) throws IOException
+ private TransparencyGroup(PDFormXObject form, boolean isSoftMask) throws IOException
{
Graphics2D g2dOriginal = graphics;
Area lastClipOriginal = lastClip;
@@ -878,7 +878,14 @@ public final class PageDrawer extends PD
graphics = g;
try
{
- processTransparencyGroup(form);
+ if (isSoftMask)
+ {
+ processSoftMask(form);
+ }
+ else
+ {
+ processTransparencyGroup(form);
+ }
}
finally
{