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