Hi Tilman,
thanks for your support.
I've tried your suggestion, but I am getting this exception:
Exception in thread "AWT-EventQueue-0" java.util.EmptyStackException
at java.util.Stack.peek(Stack.java:102)
at
org.apache.pdfbox.contentstream.PDFStreamEngine.saveGraphicsStack(PDFStreamEngine.java:954)
at
org.apache.pdfbox.contentstream.PDFStreamEngine.processAnnotation(PDFStreamEngine.java:302)
at
org.apache.pdfbox.contentstream.PDFStreamEngine.showAnnotation(PDFStreamEngine.java:421)
at
org.apache.pdfbox.rendering.PageDrawer.showAnnotation(PageDrawer.java:1359)
at org.apache.pdfbox.rendering.PageDrawer.drawPage(PageDrawer.java:267)
at
org.apache.pdfbox.rendering.PDFRenderer.renderImage(PDFRenderer.java:321)
at
org.apache.pdfbox.rendering.PDFRenderer.renderImage(PDFRenderer.java:243)
at
org.apache.pdfbox.rendering.PDFRenderer.renderImageWithDPI(PDFRenderer.java:229)
at de.pdscss.rubberstamp.PdfView.updateImage(PdfView.java:152)
at de.pdscss.rubberstamp.PdfView.addAnnotation(PdfView.java:346)
at
de.pdscss.rubberstamp.actions.AbstractAnnotationAction.addAnnotation(AbstractAnnotationAction.java:159)
at
de.pdscss.rubberstamp.actions.SquareAction.mouseReleased(SquareAction.java:37)
at
java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:290)
at java.awt.Component.processMouseEvent(Component.java:6533)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6298)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4711)
at
java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
at
java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
at java.awt.Container.dispatchEventImpl(Container.java:2280)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at
java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at
java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at
java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at
java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at
java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Looking deeper into the sourcecode at your suggested methods, I am
thinking about overriding drawPage:
public void drawPage(Graphics arg0, PDRectangle
arg1) throws IOException
{
final COSBase contents =
parameters.getPage().getCOSObject().getDictionaryObject(COSName.CONTENTS);
parameters.getPage().getCOSObject().removeItem(COSName.CONTENTS);
try
{
super.drawPage(arg0, arg1);
}
finally
{
parameters.getPage().getCOSObject().setItem(COSName.CONTENTS, contents);
}
}
What do you think? Thanks again,
jens
Am 01.11.2019 um 17:43 schrieb Tilman Hausherr:
Hello Jens,
This can be done by modifying PageDrawer.java or make your own.
Override PageDrawer.processPage() to do nothing (see the source code
of PageDrawer.drawPage() to see why). Read the class javadoc of
PageDrawer because of the difficulties to subclass it.
Tilman
Am 01.11.2019 um 11:28 schrieb Jens Bruhn-Hansel:
Hi,
we are using PDFBox to add/modify annotations of a PDF file with
showing a preview to the user. This works well: let PDFBox rendering
the PDF (with annotations included), showing the image to the user.
But when using complex and big PDF files, it may take some seconds to
render the complete page. That's not bad, when only doing this once.
But we want to update the preview after every annotation change.
So the idea is: let PDFBox render the PDF without the annotations
once. Caching the resulting image (base). Now it would be great, to
let PDFBox render only the annotations after every change. So the
preview would be much faster: painting the cached (base) image and
painting the annotation-image. Is this possible?
Thanks a lot,
jens
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org
For additional commands, e-mail: users-h...@pdfbox.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org
For additional commands, e-mail: users-h...@pdfbox.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org
For additional commands, e-mail: users-h...@pdfbox.apache.org