Mercurial > dive4elements > gnv-client
view 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 source
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.Graphics2D; import java.awt.geom.Rectangle2D; import java.awt.geom.Rectangle2D.Double; import java.io.OutputStream; import java.io.IOException; import javax.imageio.ImageIO; import org.apache.log4j.Logger; 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 Logger log = Logger.getLogger(ChartExportHelper.class); public static void exportImage( OutputStream out, JFreeChart chart, String format, int width, int height ) throws IOException { log.info("export chart as png"); ImageIO.write( chart.createBufferedImage( width, height, Transparency.BITMASK, null ), format, out ); } public static void exportSVG() { log.info("export chart as svg (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 :