PDFBOX-4596: adjust transforms for rotation
git-svn-id: https://svn.apache.org/repos/asf/pdfbox/trunk@1863047 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/pdfbox/src/main/java/org/apache/pdfbox/multipdf/Overlay.java b/pdfbox/src/main/java/org/apache/pdfbox/multipdf/Overlay.java
index 3057fdc..62c03f1 100644
--- a/pdfbox/src/main/java/org/apache/pdfbox/multipdf/Overlay.java
+++ b/pdfbox/src/main/java/org/apache/pdfbox/multipdf/Overlay.java
@@ -432,8 +432,7 @@
resources = new PDResources();
page.setResources(resources);
}
- COSName xObjectId = createOverlayXObject(page, layoutPage,
- layoutPage.overlayContentStream);
+ COSName xObjectId = createOverlayXObject(page, layoutPage, layoutPage.overlayContentStream);
array.add(createOverlayStream(page, layoutPage, xObjectId));
}
@@ -478,7 +477,25 @@
xobjForm.setResources(new PDResources(layoutPage.overlayResources));
xobjForm.setFormType(1);
xobjForm.setBBox(layoutPage.overlayMediaBox.createRetranslatedRectangle());
- xobjForm.setMatrix(new AffineTransform());
+ AffineTransform at = new AffineTransform();
+ switch (layoutPage.overlayRotation)
+ {
+ case 90:
+ at.translate(0, layoutPage.overlayMediaBox.getWidth());
+ at.rotate(Math.toRadians(-90));
+ break;
+ case 180:
+ at.translate(layoutPage.overlayMediaBox.getWidth(), layoutPage.overlayMediaBox.getHeight());
+ at.rotate(Math.toRadians(-180));
+ break;
+ case 270:
+ at.translate(layoutPage.overlayMediaBox.getHeight(), 0);
+ at.rotate(Math.toRadians(-270));
+ break;
+ default:
+ break;
+ }
+ xobjForm.setMatrix(at);
PDResources resources = page.getResources();
return resources.add(xobjForm, "OL");
}
@@ -489,7 +506,15 @@
// create a new content stream that executes the XObject content
StringBuilder overlayStream = new StringBuilder();
overlayStream.append("q\nq\n");
- AffineTransform at = calculateAffineTransform(page, layoutPage.overlayMediaBox);
+ PDRectangle overlayMediaBox = new PDRectangle(layoutPage.overlayMediaBox.getCOSArray());
+ if (layoutPage.overlayRotation == 90 || layoutPage.overlayRotation == 270)
+ {
+ overlayMediaBox.setLowerLeftX(layoutPage.overlayMediaBox.getLowerLeftY());
+ overlayMediaBox.setLowerLeftY(layoutPage.overlayMediaBox.getLowerLeftX());
+ overlayMediaBox.setUpperRightX(layoutPage.overlayMediaBox.getUpperRightY());
+ overlayMediaBox.setUpperRightY(layoutPage.overlayMediaBox.getUpperRightX());
+ }
+ AffineTransform at = calculateAffineTransform(page, overlayMediaBox);
double[] flatmatrix = new double[6];
at.getMatrix(flatmatrix);
for (double v : flatmatrix)
@@ -497,7 +522,13 @@
overlayStream.append(float2String((float) v));
overlayStream.append(" ");
}
- overlayStream.append(" cm\n/");
+ overlayStream.append(" cm\n");
+
+ // if debugging, insert
+ // 0 0 overlayMediaBox.getHeight() overlayMediaBox.getWidth() re\ns\n
+ // into the content stream
+
+ overlayStream.append(" /");
overlayStream.append(xObjectId.getName());
overlayStream.append(" Do Q\nQ\n");
return createStream(overlayStream.toString());