pdfbox-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Dave Smith (JIRA)" <j...@apache.org>
Subject [jira] [Created] (PDFBOX-1443) Images are rendered blank
Date Fri, 09 Nov 2012 14:28:12 GMT
Dave Smith created PDFBOX-1443:
----------------------------------

             Summary: Images are rendered blank
                 Key: PDFBOX-1443
                 URL: https://issues.apache.org/jira/browse/PDFBOX-1443
             Project: PDFBox
          Issue Type: Bug
            Reporter: Dave Smith


We are not processing the following segment correctly.. I have added the -> and command
for clarity


q   -> GSave
Q   -> QRestore
q   -> GSave
W   -> ClipNonZeroRule
0 0 m  -> MoveTo
612 0 l -> LineTo
612 792 l -> LineTo
0 792 l   -> LineTo
h   ->  ClosePath
n    -> EndPath
q    -> GSave
612 0 0 792 0 0 cm  ->Concatenate
/I13 Do   -> Invoke
Q   -> QRestore
Q   -> QRestore


The problem is 'W' or ClipNonZeroRule. According to the spec 8.5.4 

Although the clipping path operator appears before the painting operator, it shall not alter
the clipping path at the point where it appears. Rather, it shall modify the effect of the
succeeding painting operator. After the path has been painted, the clipping path in the graphics
state shall be set to the intersection of the current clipping path and the newly constructed
path.

About the n (EndPath) operator 

The n operator (see Table 60) is a no-op path-painting operator; it shall cause no marks to
be placed on the page, but can be used with a clipping path operator to establish a new clipping
path. That is, after a path has been constructed, the sequence W n shall intersect that path
with the current clipping path and shall establish a new clipping path.

Currently in ClipNonZeroRule.java and ClipEvenOddRule.java we do 

drawer.setClippingPath(GeneralPath.WIND_NON_ZERO); 

This applies the current path and resets. 

I believe we should ...

            drawer.setCurrentWindingRule(GeneralPath.WIND_NON_ZERO);

and 
            drawer.setCurrentWindingRule(GeneralPath.WIND_NON_ZERO);



and in PageDrawer.java add

 int currentWindingRule = -1;
    
    public void setCurrentWindingRule(int windingRule)
    {
    	currentWindingRule=windingRule;
    }
    
    public void setClippingWindingRule()
    {
    	if(currentWindingRule == -1)
    	{
    		return;
    	}
    	setClippingPath(currentWindingRule);
    	currentWindingRule=-1;
    }

Then in EndPath.java

 drawer.setClippingWindingRule(); 






--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message