[
https://issues.apache.org/jira/browse/PDFBOX-5570?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17697215#comment-17697215
]
Tilman Hausherr commented on PDFBOX-5570:
-----------------------------------------
I looked at the input and output values. The output values are always the same,
the input values are not. Maybe Adobe looks at the PostScript code of the
function and realizes it's all useless?!
PDF.js is also fast, but they [don't
support|https://github.com/mozilla/pdf.js/issues/5046] type 1 shading.
> 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]