[
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]