Uploaded image for project: 'PDFBox'
  1. PDFBox
  2. PDFBOX-4094

Add support for a flag disabling the rendering of PDF annotations in PDFRenderer

    Details

    • Type: Wish
    • Status: Closed
    • Priority: Minor
    • Resolution: Fixed
    • Affects Version/s: 2.0.8
    • Fix Version/s: 2.0.9, 3.0.0 PDFBox
    • Component/s: Rendering
    • Labels:
      None

      Description

      Regardless if annotations are supposed to be printed or not on the PDF, would it not be interesting to possess a flag allowing to choose if annotations should be printed on top of the document pages?

       

      Here is a diff of a very rough implementation of it : 

       

      diff --git a/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java b/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java
      --- a/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java
      +++ b/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java
      @@ -35,6 +35,9 @@ public class PDFRenderer
           protected final PDDocument document;
           // TODO keep rendering state such as caches here
       
      +    // parameter used to know if the rendering should include annotations 
      +    private boolean renderAnnotations = true;
      +
           /**
            * Creates a new PDFRenderer.
            * @param document the document to render
      @@ -224,4 +227,14 @@ public class PDFRenderer
           {
               return new PageDrawer(parameters);
           }
      +
      +    public void setRenderAnnotations(boolean render) 
      +    {
      +        this.renderAnnotations = render;
      +    }
      +
      +    public boolean renderAnnotations() 
      +    {
      +        return renderAnnotations;
      +    }
       }
      diff --git a/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java b/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
      --- a/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
      +++ b/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
      @@ -195,11 +195,13 @@ public class PageDrawer extends PDFGraphicsStreamEngine
       
               processPage(getPage());
       
      -        for (PDAnnotation annotation : getPage().getAnnotations())
      -        {
      -            showAnnotation(annotation);
      +        if (getRenderer().renderAnnotations()) 
      +        { 
      +            for (PDAnnotation annotation : getPage().getAnnotations())
      +            {
      +                showAnnotation(annotation);
      +            }
               }
      -
               graphics = null;
           }
       
      

      And an exemple of a use case: 

      PDDocument doc = getPDDocument(); 
      PDFRenderer pdfRenderer = new PDFRenderer(doc);
      pdfRenderer.setRenderAnnotations(false);
      pdfRenderer.renderImage(page);
       
      

      By default, this would be keeping the same behavior as it used to (aka : print the annotations) but possess an opt-out feature.

       

      Best regards,

      M.Veron

        Attachments

          Activity

            People

            • Assignee:
              msahyoun Maruan Sahyoun
              Reporter:
              mveron Maxime Veron
            • Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: