Mercurial > dive4elements > gnv-client
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 :