]> gerrit.simantics Code Review - simantics/platform.git/blob - 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
1 package org.simantics.document.linking.report.pdf;\r
2 \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
7 import java.io.File;\r
8 import java.io.FileOutputStream;\r
9 \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
15 \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
24         public Font font;\r
25         \r
26         FontRenderContext frc;\r
27         FontMetrics fm;\r
28         \r
29         int currentPixel = 0;\r
30         int currentLine = 0;\r
31         int availableLines = 0;\r
32         \r
33         \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
40                 document.open();\r
41                 this.cb = writer.getDirectContent();\r
42 \r
43         \r
44         writer.flush();\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
49         currentPixel = 0;\r
50         currentLine = 1;\r
51        \r
52         setFont(stream.getDefaultFont());\r
53         }\r
54         \r
55         protected int getLineHeight() {\r
56                 return fm.getHeight();\r
57         }\r
58         \r
59         public boolean isOpen() {\r
60                 return template != null;\r
61         }\r
62         \r
63         public void setFont(Font font) {\r
64                 this.font = font;\r
65                 g2d.setFont(font);\r
66         fm = g2d.getFontMetrics();\r
67         frc = new FontRenderContext(g2d.getTransform(), true, true);\r
68         estimateAvailableLines();\r
69         }\r
70         \r
71         protected void estimateAvailableLines() {\r
72                  availableLines = (int)Math.floor((stream.contentHeight-currentPixel)/getLineHeight());\r
73         }\r
74         \r
75         public Font getFont() {\r
76                 return font;\r
77         }\r
78         \r
79         public void writeLine(String line) throws Exception{\r
80                 writeLine(line, 0);\r
81         }\r
82         \r
83         public void writeLine(String line, int x) throws Exception{\r
84                 g2d.drawString(line, x, currentPixel+getLineHeight());\r
85                 currentLine++;\r
86                 availableLines--;\r
87                 currentPixel += getLineHeight();\r
88                 stream.checkNextPage();\r
89         }\r
90         \r
91         public void close() {\r
92                 g2d.dispose();\r
93                 cb.addTemplate(template, 0, 0);\r
94         template = null;\r
95         \r
96                 document.close();\r
97                 if (writer != null)\r
98                         writer.close();\r
99                 document = null;\r
100                 writer = null;\r
101                 cb = null;\r
102                 g2d = null;\r
103         }\r
104 }\r