[ https://issues.apache.org/jira/browse/PDFBOX-1443?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Andreas Lehmkühler resolved PDFBOX-1443. ---------------------------------------- Resolution: Fixed Fix Version/s: 1.8.0 Assignee: Andreas Lehmkühler I fixed the issue in revision 1407859 based on Daves proposal. Thanks for the contribution! > Images are rendered blank > ------------------------- > > Key: PDFBOX-1443 > URL: https://issues.apache.org/jira/browse/PDFBOX-1443 > Project: PDFBox > Issue Type: Bug > Reporter: Dave Smith > Assignee: Andreas Lehmkühler > Fix For: 1.8.0 > > > 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