Viktor Merkel created PDFBOX-5570:
-------------------------------------

             Summary: 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
         Environment: Windows 10
Amazon Corretto Windows x64 JDK 11
            Reporter: Viktor Merkel
         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