]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/report/pdf/PDFPage.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.document.linking.ui / src / org / simantics / document / linking / report / pdf / PDFPage.java
diff --git a/bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/report/pdf/PDFPage.java b/bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/report/pdf/PDFPage.java
new file mode 100644 (file)
index 0000000..334b1cb
--- /dev/null
@@ -0,0 +1,104 @@
+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