[
https://issues.apache.org/jira/browse/PDFBOX-1443?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13494070#comment-13494070
]
Andreas Lehmkühler commented on PDFBOX-1443:
--------------------------------------------
Yes, no problem
> 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