[ 
https://issues.apache.org/jira/browse/PDFBOX-4744?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Christian Appl updated PDFBOX-4744:
-----------------------------------
    Description: 
Unrotatable Annotations are no longer rendered by the PageDrawer.

The issue can be reproduced using the attached "simple.pdf" and the following 
code:

{code:java}
public static void main(String... args) {
        File pdfFile = new File("pathto", "simple.pdf");
        BufferedImage actualImage = null;
        try {
            try (PDDocument document = PDDocument.load(pdfFile)) {
                PDFRenderer pdfRenderer = new PDFRenderer(document);
                pdfRenderer.setAnnotationsFilter(PDAnnotation::isPrinted);
                pdfRenderer.setDefaultDestination(RenderDestination.VIEW);
                actualImage = pdfRenderer.renderImage(0);
            }

            if (actualImage != null) {
                ImageIO.write(actualImage, "png", new File("somePath", 
"out.png"));
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
{code}

When setting the page rotation to 0 the annotation can be seen in the 
"out.png", when selecting another rotation, it is gone.

I am assuming, that the following code in PageDrawer (Method: 
showAnnotation(PDAnnotation annotation) Lines: 886 to 892) is not working as 
expected. Maybe the rotation anchor should be set to a different position?
{code:java}
   if (annotation.isNoRotate() && this.getCurrentPage().getRotation() != 0) {
      PDRectangle rect = annotation.getRectangle();
      AffineTransform savedTransform =this.graphics.getTransform();
      
this.graphics.rotate(Math.toRadians((double)this.getCurrentPage().getRotation()),
 (double)rect.getLowerLeftX(),(double)rect.getUpperRightY());
      super.showAnnotation(annotation);
      this.graphics.setTransform(savedTransform);
   } else {
      super.showAnnotation(annotation);
   }
{code}

The flags of the annotation are:
 !screenshot-1.png! 

  was:
Unrotatable Annotations are no longer rendered by the PageDrawer.

The issue can be reproduced using the attached "simple.pdf" and the following 
code:

{code:java}
public static void main(String... args) {
        File pdfFile = new File("pathto", "simple.pdf");
        BufferedImage actualImage = null;
        try {
            try (PDDocument document = PDDocument.load(pdfFile)) {
                PDFRenderer pdfRenderer = new PDFRenderer(document);
                pdfRenderer.setAnnotationsFilter(PDAnnotation::isPrinted);
                pdfRenderer.setDefaultDestination(RenderDestination.VIEW);
                actualImage = pdfRenderer.renderImage(0);
            }

            if (actualImage != null) {
                ImageIO.write(actualImage, "png", new File("somePath", 
"out.png"));
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
{code}

When setting the page rotation to 0 the annotation can be seen in the 
"out.png", when selecting another rotation, it is gone.

I am assuming, that the following code in PageDrawer (Method: 
showAnnotation(PDAnnotation annotation) Lines: 886 to 892) is not working as 
expected. Maybe the rotation anchor should be set to a different position?
{code:java}
   if (annotation.isNoRotate() && this.getCurrentPage().getRotation() != 0) {
      PDRectangle rect = annotation.getRectangle();
      AffineTransform savedTransform =this.graphics.getTransform();
      
this.graphics.rotate(Math.toRadians((double)this.getCurrentPage().getRotation()),
 (double)rect.getLowerLeftX(),(double)rect.getUpperRightY());
      super.showAnnotation(annotation);
      this.graphics.setTransform(savedTransform);
   } else {
      super.showAnnotation(annotation);
   }
{code}





> PageDrawer is not rendering unrotatable Annotations on rotated pages
> --------------------------------------------------------------------
>
>                 Key: PDFBOX-4744
>                 URL: https://issues.apache.org/jira/browse/PDFBOX-4744
>             Project: PDFBox
>          Issue Type: Bug
>          Components: Rendering
>    Affects Versions: 2.0.18
>            Reporter: Christian Appl
>            Priority: Major
>              Labels: PDFBox, PageDrawer
>         Attachments: screenshot-1.png, simple.pdf
>
>
> Unrotatable Annotations are no longer rendered by the PageDrawer.
> The issue can be reproduced using the attached "simple.pdf" and the following 
> code:
> {code:java}
> public static void main(String... args) {
>         File pdfFile = new File("pathto", "simple.pdf");
>         BufferedImage actualImage = null;
>         try {
>             try (PDDocument document = PDDocument.load(pdfFile)) {
>                 PDFRenderer pdfRenderer = new PDFRenderer(document);
>                 pdfRenderer.setAnnotationsFilter(PDAnnotation::isPrinted);
>                 pdfRenderer.setDefaultDestination(RenderDestination.VIEW);
>                 actualImage = pdfRenderer.renderImage(0);
>             }
>             if (actualImage != null) {
>                 ImageIO.write(actualImage, "png", new File("somePath", 
> "out.png"));
>             }
>         } catch (IOException e) {
>             e.printStackTrace();
>         }
>     }
> {code}
> When setting the page rotation to 0 the annotation can be seen in the 
> "out.png", when selecting another rotation, it is gone.
> I am assuming, that the following code in PageDrawer (Method: 
> showAnnotation(PDAnnotation annotation) Lines: 886 to 892) is not working as 
> expected. Maybe the rotation anchor should be set to a different position?
> {code:java}
>    if (annotation.isNoRotate() && this.getCurrentPage().getRotation() != 0) {
>       PDRectangle rect = annotation.getRectangle();
>       AffineTransform savedTransform =this.graphics.getTransform();
>       
> this.graphics.rotate(Math.toRadians((double)this.getCurrentPage().getRotation()),
>  (double)rect.getLowerLeftX(),(double)rect.getUpperRightY());
>       super.showAnnotation(annotation);
>       this.graphics.setTransform(savedTransform);
>    } else {
>       super.showAnnotation(annotation);
>    }
> {code}
> The flags of the annotation are:
>  !screenshot-1.png! 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@pdfbox.apache.org
For additional commands, e-mail: dev-h...@pdfbox.apache.org

Reply via email to