-package org.simantics.document.linking.report.pdf;\r
-\r
-import java.awt.Font;\r
-import java.awt.FontMetrics;\r
-import java.awt.Graphics2D;\r
-import java.awt.font.FontRenderContext;\r
-import java.io.File;\r
-import java.io.FileOutputStream;\r
-\r
-import com.lowagie.text.Document;\r
-import com.lowagie.text.Rectangle;\r
-import com.lowagie.text.pdf.PdfContentByte;\r
-import com.lowagie.text.pdf.PdfTemplate;\r
-import com.lowagie.text.pdf.PdfWriter;\r
-\r
-public class PDFPage {\r
- public PDFPageStream stream;\r
- public Graphics2D g2d;\r
- public Document document;\r
- public PdfWriter writer;\r
- public File tempFile;\r
- public PdfContentByte cb;\r
- public PdfTemplate template = null;\r
- public Font font;\r
- \r
- FontRenderContext frc;\r
- FontMetrics fm;\r
- \r
- int currentPixel = 0;\r
- int currentLine = 0;\r
- int availableLines = 0;\r
- \r
- \r
- public PDFPage(PDFPageStream stream) throws Exception{\r
- this.stream = stream;\r
- Rectangle pageSize = stream.getPageSize();\r
- document = new Document(pageSize);\r
- tempFile = File.createTempFile("ReportGenerator", ".pdf");\r
- writer = PdfWriter.getInstance(document, new FileOutputStream(tempFile));\r
- document.open();\r
- this.cb = writer.getDirectContent();\r
-\r
- \r
- writer.flush();\r
- template = cb.createTemplate(pageSize.getWidth(), pageSize.getHeight());\r
- g2d = template.createGraphics(pageSize.getWidth(), pageSize.getHeight());\r
- g2d.translate(stream.marginLeft, stream.marginTop);\r
- g2d.setClip(0, 0, stream.contentWidth, stream.contentHeight);\r
- currentPixel = 0;\r
- currentLine = 1;\r
- \r
- setFont(stream.getDefaultFont());\r
- }\r
- \r
- protected int getLineHeight() {\r
- return fm.getHeight();\r
- }\r
- \r
- public boolean isOpen() {\r
- return template != null;\r
- }\r
- \r
- public void setFont(Font font) {\r
- this.font = font;\r
- g2d.setFont(font);\r
- fm = g2d.getFontMetrics();\r
- frc = new FontRenderContext(g2d.getTransform(), true, true);\r
- estimateAvailableLines();\r
- }\r
- \r
- protected void estimateAvailableLines() {\r
- availableLines = (int)Math.floor((stream.contentHeight-currentPixel)/getLineHeight());\r
- }\r
- \r
- public Font getFont() {\r
- return font;\r
- }\r
- \r
- public void writeLine(String line) throws Exception{\r
- writeLine(line, 0);\r
- }\r
- \r
- public void writeLine(String line, int x) throws Exception{\r
- g2d.drawString(line, x, currentPixel+getLineHeight());\r
- currentLine++;\r
- availableLines--;\r
- currentPixel += getLineHeight();\r
- stream.checkNextPage();\r
- }\r
- \r
- public void close() {\r
- g2d.dispose();\r
- cb.addTemplate(template, 0, 0);\r
- template = null;\r
- \r
- document.close();\r
- if (writer != null)\r
- writer.close();\r
- document = null;\r
- writer = null;\r
- cb = null;\r
- g2d = null;\r
- }\r
-}\r
+package org.simantics.document.linking.report.pdf;
+
+import java.awt.Font;
+import java.awt.FontMetrics;
+import java.awt.Graphics2D;
+import java.awt.font.FontRenderContext;
+import java.io.File;
+import java.io.FileOutputStream;
+
+import com.lowagie.text.Document;
+import com.lowagie.text.Rectangle;
+import com.lowagie.text.pdf.PdfContentByte;
+import com.lowagie.text.pdf.PdfTemplate;
+import com.lowagie.text.pdf.PdfWriter;
+
+public class PDFPage {
+ public PDFPageStream stream;
+ public Graphics2D g2d;
+ public Document document;
+ public PdfWriter writer;
+ public File tempFile;
+ public PdfContentByte cb;
+ public PdfTemplate template = null;
+ public Font font;
+
+ FontRenderContext frc;
+ FontMetrics fm;
+
+ int currentPixel = 0;
+ int currentLine = 0;
+ int availableLines = 0;
+
+
+ public PDFPage(PDFPageStream stream) throws Exception{
+ this.stream = stream;
+ Rectangle pageSize = stream.getPageSize();
+ document = new Document(pageSize);
+ tempFile = File.createTempFile("ReportGenerator", ".pdf");
+ writer = PdfWriter.getInstance(document, new FileOutputStream(tempFile));
+ document.open();
+ this.cb = writer.getDirectContent();
+
+
+ writer.flush();
+ template = cb.createTemplate(pageSize.getWidth(), pageSize.getHeight());
+ g2d = template.createGraphics(pageSize.getWidth(), pageSize.getHeight());
+ g2d.translate(stream.marginLeft, stream.marginTop);
+ g2d.setClip(0, 0, stream.contentWidth, stream.contentHeight);
+ currentPixel = 0;
+ currentLine = 1;
+
+ setFont(stream.getDefaultFont());
+ }
+
+ protected int getLineHeight() {
+ return fm.getHeight();
+ }
+
+ public boolean isOpen() {
+ return template != null;
+ }
+
+ public void setFont(Font font) {
+ this.font = font;
+ g2d.setFont(font);
+ fm = g2d.getFontMetrics();
+ frc = new FontRenderContext(g2d.getTransform(), true, true);
+ estimateAvailableLines();
+ }
+
+ protected void estimateAvailableLines() {
+ availableLines = (int)Math.floor((stream.contentHeight-currentPixel)/getLineHeight());
+ }
+
+ public Font getFont() {
+ return font;
+ }
+
+ public void writeLine(String line) throws Exception{
+ writeLine(line, 0);
+ }
+
+ public void writeLine(String line, int x) throws Exception{
+ g2d.drawString(line, x, currentPixel+getLineHeight());
+ currentLine++;
+ availableLines--;
+ currentPixel += getLineHeight();
+ stream.checkNextPage();
+ }
+
+ public void close() {
+ g2d.dispose();
+ cb.addTemplate(template, 0, 0);
+ template = null;
+
+ document.close();
+ if (writer != null)
+ writer.close();
+ document = null;
+ writer = null;
+ cb = null;
+ g2d = null;
+ }
+}