Author: tilman
Date: Mon Aug 24 14:52:12 2026
New Revision: 1937377
Log:
PDFBOX-3353: add rendering comparison test for the appearances of the
annotations in our example
Added:
pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdmodel/interactive/annotation/Annotations.pdf
(contents, props changed)
Modified:
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/annotation/AppearanceGenerationTest.java
Modified:
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/annotation/AppearanceGenerationTest.java
==============================================================================
---
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/annotation/AppearanceGenerationTest.java
Mon Aug 24 14:52:07 2026 (r1937376)
+++
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/annotation/AppearanceGenerationTest.java
Mon Aug 24 14:52:12 2026 (r1937377)
@@ -17,13 +17,15 @@
package org.apache.pdfbox.pdmodel.interactive.annotation;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
+import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.List;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
import org.apache.pdfbox.Loader;
import org.apache.pdfbox.contentstream.operator.Operator;
import org.apache.pdfbox.cos.COSFloat;
@@ -36,8 +38,10 @@ import org.apache.pdfbox.pdmodel.common.
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import org.apache.pdfbox.pdmodel.font.Standard14Fonts;
+import org.apache.pdfbox.pdmodel.graphics.image.ValidateXImage;
import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm;
import org.apache.pdfbox.pdmodel.interactive.form.PDTextField;
+import org.apache.pdfbox.rendering.PDFRenderer;
import org.apache.pdfbox.rendering.TestPDFToImage;
import org.junit.jupiter.api.AfterEach;
@@ -191,6 +195,44 @@ class AppearanceGenerationTest
}
}
+ /**
+ * Test the generation of /AP content with our handlers. The test file was
created by running
+ * the AddAnnotations example.
+ */
+ @Test
+ void testAnnotationAppearancesGeneration() throws IOException
+ {
+ BufferedImage expectedImage;
+ BufferedImage actualImage;
+ // 1. render with existing /AP
+ try (PDDocument doc = Loader.loadPDF(new File(IN_DIR,
"Annotations.pdf")))
+ {
+ PDFRenderer r = new PDFRenderer(doc);
+ expectedImage = r.renderImage(0);
+ }
+ // 2. render with removed /AP
+ try (PDDocument doc = Loader.loadPDF(new File(IN_DIR,
"Annotations.pdf")))
+ {
+ List<PDAnnotation> annotations = doc.getPage(0).getAnnotations();
+ annotations.forEach(ann -> { assertNotNull(ann.getAppearance());
});
+ annotations.forEach(ann -> { ann.setAppearance(null); });
+
+ // need to set rectangle because the handler in the example has
modified it
+ PDAnnotationFreeText freeTextAnnotation = (PDAnnotationFreeText)
annotations.get(6);
+ PDRectangle rectangle = freeTextAnnotation.getRectangle();
+ rectangle.setLowerLeftX(72);
+ rectangle.setLowerLeftY(216);
+ freeTextAnnotation.setRectangle(rectangle);
+ PDAnnotationCaret annotationCaret = (PDAnnotationCaret)
annotations.get(8);
+ annotationCaret.setRectangle(new PDRectangle(300, 50, 100, 100));
+
+ PDFRenderer r = new PDFRenderer(doc);
+ actualImage = r.renderImage(0);
+ }
+ // 3. compare
+ ValidateXImage.checkIdent(expectedImage, actualImage);
+ }
+
@AfterEach
void tearDown() throws IOException
{
Added:
pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdmodel/interactive/annotation/Annotations.pdf
==============================================================================
Binary file. No diff available.