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

Tilman Hausherr commented on PDFBOX-5570:
-----------------------------------------

692 seconds to render at 1000%, which would be 720dpi. Something very 
inefficient is happening related to the type 4 function used by a type 1 
(functional) shading that goes over almost the entire page.

> Long Render Time and Freezing when Printing Document
> ----------------------------------------------------
>
>                 Key: PDFBOX-5570
>                 URL: https://issues.apache.org/jira/browse/PDFBOX-5570
>             Project: PDFBox
>          Issue Type: Bug
>          Components: Rendering
>    Affects Versions: 2.0.24, 2.0.27, 3.0.0 PDFBox
>         Environment: Windows 10
> Amazon Corretto Windows x64 JDK 11
>            Reporter: Viktor Merkel
>            Priority: Major
>         Attachments: non-printable.pdf
>
>
> Opening the attached PDF document in the PDFBox PDF Debugger can take up to 3 
> seconds on average to render the page. However, attempting to print the PDF 
> document in the PDF Debugger using the "Microsoft Print to PDF" printer will 
> cause the entire application to freeze and become unresponsive to mouse 
> inputs.
> During the freeze, a thread dump was generated, and it was observed that the 
> AWT-EventQueue-0 seems to be stuck at a fillPath procedure. The full 
> stacktrace is provided below:
>  
> {noformat}
> "AWT-EventQueue-0" #22 prio=6 os_prio=0 cpu=17875.00ms elapsed=80.86s 
> tid=0x000002e137734000 nid=0x51f4 runnable  [0x000000e85cbf8000]
>    java.lang.Thread.State: RUNNABLE
>         at 
> org.apache.pdfbox.pdmodel.common.function.type4.InstructionSequence.execute(InstructionSequence.java:83)
>         at 
> org.apache.pdfbox.pdmodel.common.function.type4.InstructionSequence.execute(InstructionSequence.java:108)
>         at 
> org.apache.pdfbox.pdmodel.common.function.PDFunctionType4.eval(PDFunctionType4.java:78)
>         at 
> org.apache.pdfbox.pdmodel.graphics.shading.PDShading.evalFunction(PDShading.java:410)
>         at 
> org.apache.pdfbox.pdmodel.graphics.shading.Type1ShadingContext.getRaster(Type1ShadingContext.java:134)
>         at 
> sun.java2d.pipe.AlphaPaintPipe.renderPathTile([email protected]/AlphaPaintPipe.java:124)
>         at 
> sun.java2d.pipe.SpanShapeRenderer$Composite.renderBox([email protected]/SpanShapeRenderer.java:60)
>         at 
> sun.java2d.pipe.SpanShapeRenderer.spanClipLoop([email protected]/SpanShapeRenderer.java:213)
>         at 
> sun.java2d.pipe.SpanShapeRenderer.renderSpans([email protected]/SpanShapeRenderer.java:196)
>         at 
> sun.java2d.pipe.SpanShapeRenderer.fill([email protected]/SpanShapeRenderer.java:116)
>         at 
> sun.java2d.pipe.ValidatePipe.fill([email protected]/ValidatePipe.java:160)
>         at 
> sun.java2d.SunGraphics2D.fill([email protected]/SunGraphics2D.java:2533)
>         at 
> org.apache.pdfbox.rendering.PageDrawer.fillPath(PageDrawer.java:910)
>         at 
> org.apache.pdfbox.contentstream.operator.graphics.FillEvenOddRule.process(FillEvenOddRule.java:37)
>         at 
> org.apache.pdfbox.contentstream.PDFStreamEngine.processOperator(PDFStreamEngine.java:933)
>         at 
> org.apache.pdfbox.contentstream.PDFStreamEngine.processStreamOperators(PDFStreamEngine.java:514)
>         at 
> org.apache.pdfbox.contentstream.PDFStreamEngine.processTransparencyGroup(PDFStreamEngine.java:244)
>         at 
> org.apache.pdfbox.contentstream.PDFStreamEngine.processSoftMask(PDFStreamEngine.java:202)
>         at org.apache.pdfbox.rendering.PageDrawer.access$20(PageDrawer.java:1)
>         at 
> org.apache.pdfbox.rendering.PageDrawer$TransparencyGroup.<init>(PageDrawer.java:1805)
>         at 
> org.apache.pdfbox.rendering.PageDrawer$TransparencyGroup.<init>(PageDrawer.java:1668)
>         at 
> org.apache.pdfbox.rendering.PageDrawer.applySoftMaskToPaint(PageDrawer.java:658)
>         at 
> org.apache.pdfbox.rendering.PageDrawer.getNonStrokingPaint(PageDrawer.java:745)
>         at 
> org.apache.pdfbox.rendering.PageDrawer.fillPath(PageDrawer.java:878)
>         at 
> org.apache.pdfbox.contentstream.operator.graphics.FillEvenOddRule.process(FillEvenOddRule.java:37)
>         at 
> org.apache.pdfbox.contentstream.PDFStreamEngine.processOperator(PDFStreamEngine.java:933)
>         at 
> org.apache.pdfbox.contentstream.PDFStreamEngine.processStreamOperators(PDFStreamEngine.java:514)
>         at 
> org.apache.pdfbox.contentstream.PDFStreamEngine.processTilingPattern(PDFStreamEngine.java:413)
>         at 
> org.apache.pdfbox.rendering.PageDrawer.drawTilingPattern(PageDrawer.java:317)
>         at 
> org.apache.pdfbox.rendering.TilingPaint.getImage(TilingPaint.java:177)
>         at 
> org.apache.pdfbox.rendering.TilingPaint.<init>(TilingPaint.java:103)
>         at 
> org.apache.pdfbox.rendering.TilingPaintFactory.create(TilingPaintFactory.java:60)
>         at 
> org.apache.pdfbox.rendering.PageDrawer.getPaint(PageDrawer.java:364)
>         at 
> org.apache.pdfbox.rendering.PageDrawer.getNonStrokingPaint(PageDrawer.java:746)
>         at 
> org.apache.pdfbox.rendering.PageDrawer.fillPath(PageDrawer.java:878)
>         at 
> org.apache.pdfbox.contentstream.operator.graphics.FillNonZeroRule.process(FillNonZeroRule.java:37)
>         at 
> org.apache.pdfbox.contentstream.PDFStreamEngine.processOperator(PDFStreamEngine.java:933)
>         at 
> org.apache.pdfbox.contentstream.PDFStreamEngine.processStreamOperators(PDFStreamEngine.java:514)
>         at 
> org.apache.pdfbox.contentstream.PDFStreamEngine.processStream(PDFStreamEngine.java:492)
>         at 
> org.apache.pdfbox.contentstream.PDFStreamEngine.processPage(PDFStreamEngine.java:155)
>         at 
> org.apache.pdfbox.rendering.PageDrawer.drawPage(PageDrawer.java:277)
>         at 
> org.apache.pdfbox.rendering.PDFRenderer.renderPageToGraphics(PDFRenderer.java:458)
>         at 
> org.apache.pdfbox.printing.PDFPrintable.print(PDFPrintable.java:264)
>         at 
> sun.print.RasterPrinterJob.printPage([email protected]/RasterPrinterJob.java:2275)
>         at 
> sun.print.RasterPrinterJob.print([email protected]/RasterPrinterJob.java:1654)
>         at 
> org.apache.pdfbox.debugger.PDFDebugger.printMenuItemActionPerformed(PDFDebugger.java:1182)
>         at 
> org.apache.pdfbox.debugger.PDFDebugger.access$8(PDFDebugger.java:1142)
>         at 
> org.apache.pdfbox.debugger.PDFDebugger$7.actionPerformed(PDFDebugger.java:433)
>         at 
> javax.swing.AbstractButton.fireActionPerformed([email protected]/AbstractButton.java:1967)
>         at 
> javax.swing.AbstractButton$Handler.actionPerformed([email protected]/AbstractButton.java:2308)
>         at 
> javax.swing.DefaultButtonModel.fireActionPerformed([email protected]/DefaultButtonModel.java:405)
>         at 
> javax.swing.DefaultButtonModel.setPressed([email protected]/DefaultButtonModel.java:262)
>         at 
> javax.swing.AbstractButton.doClick([email protected]/AbstractButton.java:369)
>         at 
> javax.swing.plaf.basic.BasicMenuItemUI.doClick([email protected]/BasicMenuItemUI.java:1020)
>         at 
> javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased([email protected]/BasicMenuItemUI.java:1064)
>         at 
> java.awt.Component.processMouseEvent([email protected]/Component.java:6635)
>         at 
> javax.swing.JComponent.processMouseEvent([email protected]/JComponent.java:3342)
>         at 
> java.awt.Component.processEvent([email protected]/Component.java:6400)
>         at 
> java.awt.Container.processEvent([email protected]/Container.java:2263)
>         at 
> java.awt.Component.dispatchEventImpl([email protected]/Component.java:5011)
>         at 
> java.awt.Container.dispatchEventImpl([email protected]/Container.java:2321)
>         at 
> java.awt.Component.dispatchEvent([email protected]/Component.java:4843)
>         at 
> java.awt.LightweightDispatcher.retargetMouseEvent([email protected]/Container.java:4918)
>         at 
> java.awt.LightweightDispatcher.processMouseEvent([email protected]/Container.java:4547)
>         at 
> java.awt.LightweightDispatcher.dispatchEvent([email protected]/Container.java:4488)
>         at 
> java.awt.Container.dispatchEventImpl([email protected]/Container.java:2307)
>         at 
> java.awt.Window.dispatchEventImpl([email protected]/Window.java:2772)
>         at 
> java.awt.Component.dispatchEvent([email protected]/Component.java:4843)
>         at 
> java.awt.EventQueue.dispatchEventImpl([email protected]/EventQueue.java:772)
>         at 
> java.awt.EventQueue$4.run([email protected]/EventQueue.java:721)
>         at 
> java.awt.EventQueue$4.run([email protected]/EventQueue.java:715)
>         at 
> java.security.AccessController.doPrivileged([email protected]/Native 
> Method)
>         at 
> java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege([email protected]/ProtectionDomain.java:85)
>         at 
> java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege([email protected]/ProtectionDomain.java:95)
>         at 
> java.awt.EventQueue$5.run([email protected]/EventQueue.java:745)
>         at 
> java.awt.EventQueue$5.run([email protected]/EventQueue.java:743)
>         at 
> java.security.AccessController.doPrivileged([email protected]/Native 
> Method)
>         at 
> java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege([email protected]/ProtectionDomain.java:85)
>         at 
> java.awt.EventQueue.dispatchEvent([email protected]/EventQueue.java:742)
>         at 
> java.awt.EventDispatchThread.pumpOneEventForFilters([email protected]/EventDispatchThread.java:203)
>         at 
> java.awt.EventDispatchThread.pumpEventsForFilter([email protected]/EventDispatchThread.java:124)
>         at 
> java.awt.EventDispatchThread.pumpEventsForHierarchy([email protected]/EventDispatchThread.java:113)
>         at 
> java.awt.EventDispatchThread.pumpEvents([email protected]/EventDispatchThread.java:109)
>         at 
> java.awt.EventDispatchThread.pumpEvents([email protected]/EventDispatchThread.java:101)
>         at 
> java.awt.EventDispatchThread.run([email protected]/EventDispatchThread.java:90){noformat}
> Acrobat Reader renders the document much faster and printing with the same 
> printer is done quickly.
> It was discovered that commenting out the following lines in the function 
> fillPath(int windingRule) in org.apache.pdfbox.rendering.PageDrawer makes 
> printing possible again. However, this leads to the disadvantage that some 
> elements will not be drawn (of course):
> {code:java}
>         Shape shape;
>         if (!(graphics.getPaint() instanceof Color))
>         {
>             // apply clip to path to avoid oversized device bounds in shading 
> contexts (PDFBOX-2901)
>             Area area = new Area(linePath);
>             area.intersect(new Area(graphics.getClip()));
>             intersectShadingBBox(getGraphicsState().getNonStrokingColor(), 
> area);
>             shape = area;
>         }
>         else
>         {
>             shape = linePath;
>         }
> // when commenting this out, print works again
> //        if (isContentRendered())
> //        {
> //            graphics.fill(shape);
> //        } {code}
> Does anyone know of a permanent solution to this problem?
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to