ingo@318: package de.intevation.gnv.exports; ingo@318: ingo@320: import com.lowagie.text.Document; ingo@320: import com.lowagie.text.DocumentException; ingo@320: import com.lowagie.text.PageSize; ingo@320: import com.lowagie.text.Rectangle; ingo@320: import com.lowagie.text.pdf.PdfContentByte; ingo@320: import com.lowagie.text.pdf.PdfTemplate; ingo@320: import com.lowagie.text.pdf.PdfWriter; ingo@320: ingo@318: import java.awt.Transparency; ingo@320: import java.awt.Graphics2D; ingo@320: import java.awt.geom.Rectangle2D; ingo@320: import java.awt.geom.Rectangle2D.Double; ingo@318: import java.io.OutputStream; ingo@318: import java.io.IOException; ingo@318: import javax.imageio.ImageIO; ingo@318: ingo@318: import org.apache.log4j.Logger; ingo@318: ingo@318: import org.jfree.chart.JFreeChart; ingo@318: ingo@320: ingo@318: /** ingo@318: * @author Ingo Weinzierl ingo@318: */ ingo@318: public class ChartExportHelper { ingo@318: ingo@320: private static final String DEFAULT_PAGE_SIZE = "A4"; ingo@318: ingo@318: private static Logger log = Logger.getLogger(ChartExportHelper.class); ingo@318: ingo@318: public static void exportImage( ingo@318: OutputStream out, ingo@318: JFreeChart chart, ingo@318: String format, ingo@318: int width, ingo@318: int height ingo@318: ) ingo@318: throws IOException ingo@318: { ingo@318: log.info("export chart as png"); ingo@318: ingo@318: ImageIO.write( ingo@318: chart.createBufferedImage( ingo@318: width, height, Transparency.BITMASK, null ingo@318: ), ingo@318: format, ingo@318: out ingo@318: ); ingo@318: } ingo@318: ingo@320: ingo@318: public static void exportSVG() { ingo@318: log.info("export chart as svg (not implemented yet)"); ingo@318: } ingo@318: ingo@320: ingo@320: public static void exportPDF( ingo@320: OutputStream out, ingo@320: JFreeChart chart, ingo@320: String pageFormat, ingo@320: boolean landscape, ingo@320: float marginLeft, ingo@320: float marginRight, ingo@320: float marginTop, ingo@320: float marginBottom ingo@320: ) { ingo@320: log.info("export chart as pdf."); ingo@320: ingo@320: if (pageFormat == null) ingo@320: pageFormat = DEFAULT_PAGE_SIZE; ingo@320: ingo@320: Rectangle page = PageSize.getRectangle(pageFormat); ingo@320: int pageWidth = (int) (page.getRight(marginRight) - page.getLeft(marginLeft)); ingo@320: int pageHeight = (int) (page.getTop(marginTop) - page.getBottom(marginBottom)); ingo@320: ingo@320: Document document = null; ingo@320: if (landscape) { ingo@320: document = new Document(page.rotate()); ingo@320: log.debug("Create landscape pdf."); ingo@320: } ingo@320: else ingo@320: document = new Document(page); ingo@320: ingo@320: try { ingo@320: PdfWriter writer = PdfWriter.getInstance(document, out); ingo@320: ingo@320: document.addSubject(chart.getTitle().getText()); ingo@320: document.addCreationDate(); ingo@320: document.open(); ingo@320: ingo@320: PdfContentByte content = writer.getDirectContent(); ingo@320: ingo@320: int width = 0; ingo@320: int height = 0; ingo@320: if (landscape) { ingo@320: width = pageHeight; ingo@320: height = pageWidth; ingo@320: } ingo@320: else { ingo@320: width = pageWidth; ingo@320: height = pageHeight; ingo@320: } ingo@320: ingo@320: PdfTemplate template = content.createTemplate(width, height); ingo@320: Graphics2D graphics = template.createGraphics(width, height); ingo@320: Rectangle2D area = new Rectangle2D.Double(0.0D, 0.0D,width,height); ingo@320: ingo@320: chart.draw(graphics, area); ingo@320: graphics.dispose(); ingo@320: content.addTemplate(template, marginLeft, marginBottom); ingo@320: } ingo@320: catch (DocumentException de) { ingo@320: log.error("Error while exporting chart to pdf.", de); ingo@320: } ingo@320: finally { ingo@320: document.close(); ingo@320: } ingo@318: } ingo@318: } ingo@320: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :