You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@pdfbox.apache.org by "Tilman Hausherr (JIRA)" <ji...@apache.org> on 2014/07/01 00:29:25 UTC

[jira] [Commented] (PDFBOX-2126) Optimize clipping

    [ https://issues.apache.org/jira/browse/PDFBOX-2126?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14048256#comment-14048256 ] 

Tilman Hausherr commented on PDFBOX-2126:
-----------------------------------------

Some difference:
- The file from PDFBOX-1608 is redered different, "veggie good" on the left is grey instead of green
- The file from PDFBOX-1689 is rendered without the ELVIA title on the top left
- The file from PDFBOX-1689 is rendered on page 1 without EINLADUNG

There are many more, but maybe it is all the same reason (color?)

Nevertheless
{code}
the clipping path can't actually change in between BT and ET operators, so we were calling setClip needlessly 15,000 times or so.
{code}
is a great observation.

> Optimize clipping
> -----------------
>
>                 Key: PDFBOX-2126
>                 URL: https://issues.apache.org/jira/browse/PDFBOX-2126
>             Project: PDFBox
>          Issue Type: Improvement
>          Components: Rendering
>    Affects Versions: 2.0.0
>            Reporter: Petr Slaby
>         Attachments: ClipPath.1.patch, ClipPath.patch, example_010.pdf
>
>
> As already stated in a TODO comment in PageDrawer, the call of Graphics2D#setClip() is time and memory consuming. The attached patch optimizes clipping by calling Graphics2D#setClip() only if the clipping path has changed. The effect depends on the document, e.g. the attached one renders in 10.5s without the optimization and in 5.5 seconds in the optimized version.
> The clipping has to be re-applied whenever the transform in Graphics2D changes. This is not explicitly checked for, the implementation rather depends on the cached value being reset manually. Currently this is only needed at one place when processing annotations (AcroForms). Also, the implementation relies upon the clipping path object stored in PDGraphicsState to never change so that a comparison using == can be used. This works fine, but needs a bit of awareness in future changes. To make the design more clean, the clipping path could be made private to PDGraphcisState and thus really "immutable" from outside.



--
This message was sent by Atlassian JIRA
(v6.2#6252)