1 package org.simantics.document.linking.report.pdf;
\r
3 import java.awt.Font;
\r
4 import java.awt.FontMetrics;
\r
5 import java.awt.Graphics2D;
\r
6 import java.awt.font.FontRenderContext;
\r
8 import java.io.FileOutputStream;
\r
10 import com.lowagie.text.Document;
\r
11 import com.lowagie.text.Rectangle;
\r
12 import com.lowagie.text.pdf.PdfContentByte;
\r
13 import com.lowagie.text.pdf.PdfTemplate;
\r
14 import com.lowagie.text.pdf.PdfWriter;
\r
16 public class PDFPage {
\r
17 public PDFPageStream stream;
\r
18 public Graphics2D g2d;
\r
19 public Document document;
\r
20 public PdfWriter writer;
\r
21 public File tempFile;
\r
22 public PdfContentByte cb;
\r
23 public PdfTemplate template = null;
\r
26 FontRenderContext frc;
\r
29 int currentPixel = 0;
\r
30 int currentLine = 0;
\r
31 int availableLines = 0;
\r
34 public PDFPage(PDFPageStream stream) throws Exception{
\r
35 this.stream = stream;
\r
36 Rectangle pageSize = stream.getPageSize();
\r
37 document = new Document(pageSize);
\r
38 tempFile = File.createTempFile("ReportGenerator", ".pdf");
\r
39 writer = PdfWriter.getInstance(document, new FileOutputStream(tempFile));
\r
41 this.cb = writer.getDirectContent();
\r
45 template = cb.createTemplate(pageSize.getWidth(), pageSize.getHeight());
\r
46 g2d = template.createGraphics(pageSize.getWidth(), pageSize.getHeight());
\r
47 g2d.translate(stream.marginLeft, stream.marginTop);
\r
48 g2d.setClip(0, 0, stream.contentWidth, stream.contentHeight);
\r
52 setFont(stream.getDefaultFont());
\r
55 protected int getLineHeight() {
\r
56 return fm.getHeight();
\r
59 public boolean isOpen() {
\r
60 return template != null;
\r
63 public void setFont(Font font) {
\r
66 fm = g2d.getFontMetrics();
\r
67 frc = new FontRenderContext(g2d.getTransform(), true, true);
\r
68 estimateAvailableLines();
\r
71 protected void estimateAvailableLines() {
\r
72 availableLines = (int)Math.floor((stream.contentHeight-currentPixel)/getLineHeight());
\r
75 public Font getFont() {
\r
79 public void writeLine(String line) throws Exception{
\r
83 public void writeLine(String line, int x) throws Exception{
\r
84 g2d.drawString(line, x, currentPixel+getLineHeight());
\r
87 currentPixel += getLineHeight();
\r
88 stream.checkNextPage();
\r
91 public void close() {
\r
93 cb.addTemplate(template, 0, 0);
\r