diff gnv-artifacts/src/main/java/de/intevation/gnv/exports/ChartExportHelper.java @ 320:18302372703f

Implemented pdf export of charts. gnv-artifacts/trunk@381 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Mon, 30 Nov 2009 09:51:59 +0000
parents 5f2820e821e0
children a4376fd23f99
line wrap: on
line diff
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/exports/ChartExportHelper.java	Fri Nov 27 13:00:00 2009 +0000
+++ b/gnv-artifacts/src/main/java/de/intevation/gnv/exports/ChartExportHelper.java	Mon Nov 30 09:51:59 2009 +0000
@@ -1,7 +1,17 @@
 package de.intevation.gnv.exports;
 
+import com.lowagie.text.Document;
+import com.lowagie.text.DocumentException;
+import com.lowagie.text.PageSize;
+import com.lowagie.text.Rectangle;
+import com.lowagie.text.pdf.PdfContentByte;
+import com.lowagie.text.pdf.PdfTemplate;
+import com.lowagie.text.pdf.PdfWriter;
+
 import java.awt.Transparency;
-import java.awt.image.BufferedImage;
+import java.awt.Graphics2D;
+import java.awt.geom.Rectangle2D;
+import java.awt.geom.Rectangle2D.Double;
 import java.io.OutputStream;
 import java.io.IOException;
 import javax.imageio.ImageIO;
@@ -10,12 +20,13 @@
 
 import org.jfree.chart.JFreeChart;
 
+
 /**
  * @author Ingo Weinzierl <ingo.weinzierl@intevation.de>
  */
 public class ChartExportHelper {
 
-    private static final String DEFAULT_PAGE_SIZE = "A4";
+    private static final String  DEFAULT_PAGE_SIZE = "A4";
 
     private static Logger log = Logger.getLogger(ChartExportHelper.class);
 
@@ -39,11 +50,73 @@
         );
     }
 
+
     public static void exportSVG() {
         log.info("export chart as svg (not implemented yet)");
     }
 
-    public static void exportPDF() {
-        log.info("export chart as pdf (not implemented yet)");
+
+    public static void exportPDF(
+        OutputStream out,
+        JFreeChart   chart,
+        String       pageFormat,
+        boolean      landscape,
+        float        marginLeft,
+        float        marginRight,
+        float        marginTop,
+        float        marginBottom
+    ) {
+        log.info("export chart as pdf.");
+
+        if (pageFormat == null)
+            pageFormat = DEFAULT_PAGE_SIZE;
+
+        Rectangle page = PageSize.getRectangle(pageFormat);
+        int pageWidth  = (int) (page.getRight(marginRight) - page.getLeft(marginLeft));
+        int pageHeight = (int) (page.getTop(marginTop) - page.getBottom(marginBottom));
+
+        Document document = null;
+        if (landscape) {
+            document = new Document(page.rotate());
+            log.debug("Create landscape pdf.");
+        }
+        else
+            document = new Document(page);
+
+        try {
+            PdfWriter writer = PdfWriter.getInstance(document, out);
+
+            document.addSubject(chart.getTitle().getText());
+            document.addCreationDate();
+            document.open();
+
+            PdfContentByte content  = writer.getDirectContent();
+
+            int width  = 0;
+            int height = 0;
+            if (landscape) {
+                width  = pageHeight;
+                height = pageWidth;
+            }
+            else {
+                width  = pageWidth;
+                height = pageHeight;
+            }
+
+            PdfTemplate template = content.createTemplate(width, height);
+            Graphics2D  graphics = template.createGraphics(width, height);
+            Rectangle2D area = new Rectangle2D.Double(0.0D, 0.0D,width,height);
+
+            chart.draw(graphics, area);
+            graphics.dispose();
+            content.addTemplate(template, marginLeft, marginBottom);
+        }
+        catch (DocumentException de) {
+            log.error("Error while exporting chart to pdf.", de);
+        }
+        finally {
+            document.close();
+        }
     }
 }
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org