svn commit: r1782135 - in /xmlgraphics/fop-pdf-images/trunk: src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxAdapterUtil.java test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java test/java/org/apache/fop/render/pdf/PDFRotateTestCase.java

[email protected]
Newsgroups gmane.text.xml.fop.cvs
Message-ID <[email protected]>
Author: ssteiner
Date: Wed Feb  8 10:03:45 2017
New Revision: 1782135

URL: http://svn.apache.org/viewvc?rev=1782135&view=rev
Log:
FOP-2689: PDF rotated at 90 degrees not visible

Modified:
    xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxAdapterUtil.java
    xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
    xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFRotateTestCase.java

Modified: xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxAdapterUtil.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxAdapterUtil.java?rev=1782135&r1=1782134&r2=1782135&view=diff
==============================================================================
--- xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxAdapterUtil.java (original)
+++ xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxAdapterUtil.java Wed Feb  8 10:03:45 2017
@@ -110,24 +110,22 @@ public final class PDFBoxAdapterUtil {
     }
 
     protected static void rotate(int rotation, PDRectangle viewBox, AffineTransform atdoc) {
-        float x = viewBox.getWidth() + viewBox.getLowerLeftX();
-        float y = viewBox.getHeight() + viewBox.getLowerLeftY();
+        float w = viewBox.getWidth();
+        float h = viewBox.getHeight();
+        float x = viewBox.getLowerLeftX();
+        float y = viewBox.getLowerLeftY();
         switch (rotation) {
             case 90:
-                atdoc.scale(viewBox.getWidth() / viewBox.getHeight(), viewBox.getHeight() / viewBox.getWidth());
-                atdoc.translate(0, viewBox.getWidth());
-                atdoc.rotate(-Math.PI / 2.0);
-                atdoc.scale(viewBox.getWidth() / viewBox.getHeight(), viewBox.getHeight() / viewBox.getWidth());
+                atdoc.rotate(Math.toRadians(rotation + 180), x, y);
+                atdoc.translate(-h, 0);
                 break;
             case 180:
-                atdoc.translate(x, y);
-                atdoc.rotate(-Math.PI);
-                atdoc.translate(-viewBox.getLowerLeftX(), -viewBox.getLowerLeftY());
+                atdoc.translate(w, h);
+                atdoc.rotate(Math.toRadians(rotation), x, y);
                 break;
             case 270:
-                atdoc.translate(viewBox.getLowerLeftX(), y);
-                atdoc.rotate(Math.toRadians(270 + 180));
-                atdoc.translate(-x, -y);
+                atdoc.rotate(Math.toRadians(rotation + 180), x, h + y);
+                atdoc.translate(-w, 0);
                 break;
             default:
                 //no additional transformations necessary

Modified: xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java?rev=1782135&r1=1782134&r2=1782135&view=diff
==============================================================================
--- xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java (original)
+++ xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java Wed Feb  8 10:03:45 2017
@@ -84,7 +84,6 @@ import org.apache.fop.render.ps.PSRender
 import junit.framework.Assert;
 
 public class PDFBoxAdapterTestCase {
-    private Rectangle2D r = new Rectangle2D.Double();
     protected static final String CFF1 = "test/resources/2fonts.pdf";
     protected static final String CFF2 = "test/resources/2fonts2.pdf";
     protected static final String CFF3 = "test/resources/simpleh.pdf";
@@ -109,9 +108,14 @@ public class PDFBoxAdapterTestCase {
     private static final String XFORM = "test/resources/xform.pdf";
     private static final String LOOP = "test/resources/loop.pdf";
 
-    private PDFBoxAdapter getPDFBoxAdapter(boolean mergeFonts) {
+    private static PDFPage getPDFPage(PDFDocument doc) {
+        final Rectangle2D r = new Rectangle2D.Double();
+        return new PDFPage(new PDFResources(doc), 0, r, r, r, r);
+    }
+
+    protected static PDFBoxAdapter getPDFBoxAdapter(boolean mergeFonts) {
         PDFDocument doc = new PDFDocument("");
-        PDFPage pdfpage = new PDFPage(new PDFResources(doc), 0, r, r, r, r);
+        PDFPage pdfpage = getPDFPage(doc);
         doc.setMergeFontsEnabled(mergeFonts);
         pdfpage.setDocument(doc);
         pdfpage.setObjectNumber(1);
@@ -187,27 +191,9 @@ public class PDFBoxAdapterTestCase {
     }
 
     @Test
-    public void testStream() throws Exception {
-        PDFDocument pdfdoc = new PDFDocument("");
-        PDFPage pdfpage = new PDFPage(new PDFResources(pdfdoc), 0, r, r, r, r);
-        pdfpage.setDocument(pdfdoc);
-        PDFBoxAdapter adapter = new PDFBoxAdapter(pdfpage, new HashMap(), new HashMap<Integer, PDFArray>());
-        PDDocument doc = PDDocument.load(new File(ROTATE));
-        PDPage page = doc.getDocumentCatalog().getPages().get(0);
-        AffineTransform at = new AffineTransform();
-        Rectangle r = new Rectangle(0, 1650, 842000, 595000);
-        String stream = adapter.createStreamFromPDFBoxPage(doc, page, "key", at, null, r);
-        Assert.assertEquals(at, new AffineTransform(-0.0, 1.0000000554888686, 1.0000000554888686, 0.0, 0.0,
-                -2.0742416381835938E-5));
-        Assert.assertTrue(stream.contains("/GS0106079 gs"));
-        Assert.assertTrue(stream.contains("/TT0106079 1 Tf"));
-        doc.close();
-    }
-
-    @Test
     public void testTaggedPDFWriter() throws IOException {
         PDFDocument pdfdoc = new PDFDocument("");
-        PDFPage pdfpage = new PDFPage(new PDFResources(pdfdoc), 0, r, r, r, r);
+        PDFPage pdfpage = getPDFPage(pdfdoc);
         pdfpage.setDocument(pdfdoc);
         PDFBoxAdapter adapter = new PDFBoxAdapter(pdfpage, new HashMap(), new HashMap<Integer, PDFArray>());
         adapter.setCurrentMCID(5);
@@ -223,7 +209,7 @@ public class PDFBoxAdapterTestCase {
     @Test
     public void testAnnot() throws Exception {
         PDFDocument pdfdoc = new PDFDocument("");
-        PDFPage pdfpage = new PDFPage(new PDFResources(pdfdoc), 0, r, r, r, r);
+        PDFPage pdfpage = getPDFPage(pdfdoc);
         pdfpage.setDocument(pdfdoc);
         pdfpage.setObjectNumber(1);
         PDFBoxAdapter adapter = new PDFBoxAdapter(pdfpage, new HashMap(), new HashMap<Integer, PDFArray>());
@@ -258,7 +244,7 @@ public class PDFBoxAdapterTestCase {
     @Test
     public void testLink() throws Exception {
         PDFDocument pdfdoc = new PDFDocument("");
-        PDFPage pdfpage = new PDFPage(new PDFResources(pdfdoc), 0, r, r, r, r);
+        PDFPage pdfpage = getPDFPage(pdfdoc);
         pdfpage.setDocument(pdfdoc);
         pdfpage.setObjectNumber(1);
         Map<Integer, PDFArray> pageNumbers = new HashMap<Integer, PDFArray>();
@@ -280,7 +266,7 @@ public class PDFBoxAdapterTestCase {
         PDFDocument pdfdoc = new PDFDocument("");
         pdfdoc.getFilterMap().put(PDFFilterList.DEFAULT_FILTER, Collections.singletonList("null"));
         pdfdoc.setMergeFontsEnabled(true);
-        PDFPage pdfpage = new PDFPage(new PDFResources(pdfdoc), 0, r, r, r, r);
+        PDFPage pdfpage = getPDFPage(pdfdoc);
         pdfpage.setDocument(pdfdoc);
         pdfpage.setObjectNumber(1);
         Map<Integer, PDFArray> pageNumbers = new HashMap<Integer, PDFArray>();
@@ -396,7 +382,7 @@ public class PDFBoxAdapterTestCase {
         PDDocument doc = PDDocument.load(new File(SHADING));
         ImagePDF img = new ImagePDF(imgi, doc);
         PDFDocument pdfdoc = new PDFDocument("");
-        PDFPage pdfpage = new PDFPage(new PDFResources(pdfdoc), 0, r, r, r, r);
+        PDFPage pdfpage = getPDFPage(pdfdoc);
         pdfpage.setDocument(pdfdoc);
         PDFGState g = new PDFGState();
         pdfdoc.assignObjectNumber(g);
@@ -417,7 +403,7 @@ public class PDFBoxAdapterTestCase {
     @Test
     public void testPDFCache() throws IOException {
         PDFDocument pdfdoc = new PDFDocument("");
-        PDFPage pdfpage = new PDFPage(new PDFResources(pdfdoc), 0, r, r, r, r);
+        PDFPage pdfpage = getPDFPage(pdfdoc);
         pdfdoc.assignObjectNumber(pdfpage);
         pdfpage.setDocument(pdfdoc);
         Map<Object, Object> pdfCache = new HashMap<Object, Object>();

Modified: xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFRotateTestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFRotateTestCase.java?rev=1782135&r1=1782134&r2=1782135&view=diff
==============================================================================
--- xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFRotateTestCase.java (original)
+++ xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFRotateTestCase.java Wed Feb  8 10:03:45 2017
@@ -19,7 +19,11 @@
 
 package org.apache.fop.render.pdf;
 
+import java.awt.Rectangle;
+import java.awt.geom.AffineTransform;
 import java.awt.geom.Rectangle2D;
+import java.io.File;
+import java.io.IOException;
 
 import org.junit.Test;
 
@@ -34,6 +38,7 @@ import org.apache.xmlgraphics.java2d.ps.
 
 import org.apache.fop.render.pdf.pdfbox.ImageConverterPDF2G2D;
 import org.apache.fop.render.pdf.pdfbox.ImagePDF;
+import org.apache.fop.render.pdf.pdfbox.PDFBoxAdapter;
 import org.apache.fop.render.pdf.pdfbox.PSPDFGraphics2D;
 
 import junit.framework.Assert;
@@ -58,4 +63,27 @@ public class PDFRotateTestCase {
         ig.getGraphics2DImagePainter().paint(g2d, rect);
         Assert.assertEquals(g2d.getTransform().getShearX(), 0.16339869281045735);
     }
+
+    @Test
+    public void testAngle() throws IOException {
+        Assert.assertEquals(getTransform(90), new AffineTransform(0, 1, 1, 0, 0, 0));
+        Assert.assertEquals(getTransform(270), new AffineTransform(0, -1, -1, 0, 842, 595));
+        AffineTransform at = getTransform(180);
+        Assert.assertEquals((int)at.getTranslateX(), 842);
+        Assert.assertEquals(at.getTranslateY(), 0.0);
+    }
+
+    private AffineTransform getTransform(int angle) throws IOException {
+        PDFBoxAdapter adapter = PDFBoxAdapterTestCase.getPDFBoxAdapter(false);
+        PDDocument doc = PDDocument.load(new File(PDFBoxAdapterTestCase.ROTATE));
+        PDPage page = doc.getDocumentCatalog().getPages().get(0);
+        page.setRotation(angle);
+        AffineTransform at = new AffineTransform();
+        Rectangle r = new Rectangle(0, 1650, 842000, 595000);
+        String stream = adapter.createStreamFromPDFBoxPage(doc, page, "key", at, null, r);
+        Assert.assertTrue(stream.contains("/GS0106079 gs"));
+        Assert.assertTrue(stream.contains("/TT0106079 1 Tf"));
+        doc.close();
+        return at;
+    }
 }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.