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 2018/03/20 18:58:11 UTC
svn commit: r1827345 -
/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/multipdf/Overlay.java
Author: tilman
Date: Tue Mar 20 18:58:11 2018
New Revision: 1827345
URL: http://svn.apache.org/viewvc?rev=1827345&view=rev
Log:
PDFBOX-4161: allow user to influence transform
Modified:
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/multipdf/Overlay.java
Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/multipdf/Overlay.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/multipdf/Overlay.java?rev=1827345&r1=1827344&r2=1827345&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/multipdf/Overlay.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/multipdf/Overlay.java Tue Mar 20 18:58:11 2018
@@ -435,20 +435,41 @@ public class Overlay
throws IOException
{
// create a new content stream that executes the XObject content
- PDRectangle pageMediaBox = page.getMediaBox();
- float hShift = (pageMediaBox.getWidth() - layoutPage.overlayMediaBox.getWidth()) / 2.0f;
- float vShift = (pageMediaBox.getHeight() - layoutPage.overlayMediaBox.getHeight()) / 2.0f;
StringBuilder overlayStream = new StringBuilder();
- overlayStream.append("q\nq 1 0 0 1 ");
- overlayStream.append(float2String(hShift));
- overlayStream.append(" ");
- overlayStream.append(float2String(vShift) );
- overlayStream.append(" cm /");
+ overlayStream.append("q\nq\n");
+ AffineTransform at = calculateAffineTransform(page, layoutPage.overlayMediaBox);
+ double[] flatmatrix = new double[6];
+ at.getMatrix(flatmatrix);
+ for (double v : flatmatrix)
+ {
+ overlayStream.append(float2String((float) v));
+ overlayStream.append(" ");
+ }
+ overlayStream.append(" cm\n/");
overlayStream.append(xObjectId.getName());
overlayStream.append(" Do Q\nQ\n");
return createStream(overlayStream.toString());
}
+ /**
+ * Calculate the transform to be used when positioning the overlay. The default implementation
+ * centers on the destination. Override this method to do your own, e.g. move to a corner, or
+ * rotate.
+ *
+ * @param page The page that will get the overlay.
+ * @param overlayMediaBox The overlay media box.
+ * @return The affine transform to be used.
+ */
+ protected AffineTransform calculateAffineTransform(PDPage page, PDRectangle overlayMediaBox)
+ {
+ AffineTransform at = new AffineTransform();
+ PDRectangle pageMediaBox = page.getMediaBox();
+ float hShift = (pageMediaBox.getWidth() - overlayMediaBox.getWidth()) / 2.0f;
+ float vShift = (pageMediaBox.getHeight() - overlayMediaBox.getHeight()) / 2.0f;
+ at.translate(hShift, vShift);
+ return at;
+ }
+
private String float2String(float floatValue)
{
// use a BigDecimal as intermediate state to avoid