You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2025/02/06 09:56:06 UTC
svn commit: r1923608 - /pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
Author: tilman
Date: Thu Feb 6 09:56:05 2025
New Revision: 1923608
URL: http://svn.apache.org/viewvc?rev=1923608&view=rev
Log:
PDFBOX-4744: reconstruct NoRotate annotations that have transparencies
Modified:
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
Modified: pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java?rev=1923608&r1=1923607&r2=1923608&view=diff
==============================================================================
--- pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java (original)
+++ pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java Thu Feb 6 09:56:05 2025
@@ -1581,6 +1581,16 @@ public class PageDrawer extends PDFGraph
}
if (annotation.isNoRotate() && getCurrentPage().getRotation() != 0)
{
+ appearance = annotation.getAppearance();
+ if (appearance != null && appearance.getNormalAppearance() != null &&
+ appearance.getNormalAppearance().isStream() &&
+ hasTransparency(appearance.getNormalAppearance().getAppearanceStream()))
+ {
+ // PDFBOX-4744: avoid appearances with transparency groups until we have fixed
+ // the rendering. A real solution should probably be
+ // in PDFStreamEngine.processAnnotation().
+ annotation.constructAppearances();
+ }
PDRectangle rect = annotation.getRectangle();
AffineTransform savedTransform = graphics.getTransform();
// "The upper-left corner of the annotation remains at the same point in
@@ -1589,6 +1599,7 @@ public class PageDrawer extends PDFGraph
rect.getLowerLeftX(), rect.getUpperRightY());
super.showAnnotation(annotation);
graphics.setTransform(savedTransform);
+ annotation.setAppearance(appearance); // restore
}
else
{
@@ -1596,6 +1607,32 @@ public class PageDrawer extends PDFGraph
}
}
+ private boolean hasTransparency(PDFormXObject form) throws IOException
+ {
+ if (form == null)
+ {
+ return false;
+ }
+ PDResources resources = form.getResources();
+ if (resources == null)
+ {
+ return false;
+ }
+ for (COSName name : resources.getXObjectNames())
+ {
+ PDXObject xObject = resources.getXObject(name);
+ if (xObject instanceof PDTransparencyGroup)
+ {
+ return true;
+ }
+ if (xObject instanceof PDFormXObject && hasTransparency((PDFormXObject) xObject))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
/**
* {@inheritDoc}
*/