-package org.simantics.document.linking.report.pdf;\r
-\r
-import java.awt.Font;\r
-import java.util.HashMap;\r
-import java.util.Map;\r
-\r
-import org.simantics.document.linking.report.Document;\r
-import org.simantics.document.linking.report.DocumentElement;\r
-import org.simantics.document.linking.report.DocumentItem;\r
-import org.simantics.document.linking.report.DocumentTitlePage;\r
-import org.simantics.document.linking.report.Table;\r
-import org.simantics.document.linking.report.TableOfContents;\r
-import org.simantics.document.linking.report.TextItem;\r
-import org.simantics.document.linking.report.URLItem;\r
-import org.simantics.document.linking.report.base.TextItemImpl;\r
-import org.simantics.document.linking.report.base.URLItemImpl;\r
-import org.simantics.utils.datastructures.Arrays;\r
-\r
-\r
-/**\r
- * PDF format reporter.\r
- * \r
- * @author Marko Luukkainen <marko.luukkainen@vtt.fi>\r
- *\r
- */\r
-public class PDFDocument implements Document {\r
- private String filename;\r
- \r
- Map<TextSize, Font> fonts = new HashMap<TextSize, Font>();\r
- \r
- PDFPageStream contentStream;\r
- PDFTable currentTable;\r
- PDFTitlePage titlePage;\r
- PDFTocElement toc;\r
- \r
- public PDFDocument(String filename) throws Exception {\r
- this.filename = filename;\r
- contentStream = new PDFPageStream();\r
- defaultFonts();\r
- contentStream.setDefaultFont(fonts.get(TextSize.SMALL));\r
- }\r
- \r
- public PDFDocument(String filename, Font font) throws Exception {\r
- this.filename = filename;\r
- contentStream = new PDFPageStream();\r
- defaultFonts();\r
- fonts.put(TextSize.SMALL, font);\r
- }\r
- \r
- public PDFDocument(String filename, Font font, Font headerFont) throws Exception {\r
- this.filename = filename;\r
- contentStream = new PDFPageStream();\r
- defaultFonts();\r
- fonts.put(TextSize.SMALL, font);\r
- fonts.put(TextSize.MEDIUM, headerFont);\r
- }\r
- \r
- private void defaultFonts() {\r
- fonts.put(TextSize.TINY, new Font("Arial", Font.PLAIN, 6));\r
- fonts.put(TextSize.SMALL, new Font("Arial", Font.PLAIN, 8));\r
- fonts.put(TextSize.MEDIUM, new Font("Arial", Font.PLAIN, 10));\r
- fonts.put(TextSize.LARGE, new Font("Arial", Font.PLAIN, 16));\r
- fonts.put(TextSize.HUGE, new Font("Arial", Font.BOLD, 24));\r
- contentStream.setDefaultFont(fonts.get(TextSize.SMALL));\r
- }\r
- \r
- Font getFont(TextSize size) {\r
- return fonts.get(size);\r
- }\r
- \r
- @Override\r
- public int getAvailableLines() {\r
- return contentStream.getAvailableLines();\r
- }\r
- \r
- @Override\r
- public int getCurrentLine() {\r
- return contentStream.getCurrentLine();\r
- }\r
- \r
- public void close() throws Exception{\r
- if (toc != null) {\r
- // hackety hack.\r
- toc.create(contentStream, contentStream.getPages().get(0));\r
- }\r
- contentStream.close(filename);\r
- }\r
- \r
- /* (non-Javadoc)\r
- * @see org.simantics.document.linking.report.Document#nextPage()\r
- */\r
- @Override\r
- public void nextPage() throws Exception{\r
- contentStream.nextPage(); \r
- }\r
- \r
- @SuppressWarnings("unchecked")\r
- @Override\r
- public <T extends DocumentElement> T newElement(Class<T> cls, String...options) throws Exception {\r
- if (cls == Table.class) {\r
- return (T)newTable();\r
- } else if (cls == TableOfContents.class) {\r
- return (T)getOrCreateToc();\r
- } else if (cls == DocumentTitlePage.class) {\r
- if (titlePage != null)\r
- throw new Exception("Report may contain only one title page");\r
- titlePage = new PDFTitlePage(this);\r
- return (T)titlePage;\r
- }\r
- return null;\r
- }\r
- \r
- @SuppressWarnings("unchecked")\r
- @Override\r
- public <T extends DocumentElement> T nextElement(Class<T> cls, String...options) throws Exception {\r
- if (cls == Table.class) {\r
- return (T)nextTable(Arrays.contains(options, Document.TOC));\r
- } else if (cls == TableOfContents.class) {\r
- return (T)getOrCreateToc();\r
- } \r
- return null;\r
- }\r
- \r
- @SuppressWarnings("unchecked")\r
- @Override\r
- public <T extends DocumentElement> T getCurrentElement(Class<T> cls) {\r
- if (cls == Table.class) {\r
- return (T)getCurrentTable();\r
- } else if (cls == TableOfContents.class) {\r
- return (T)toc;\r
- } else if (cls == DocumentTitlePage.class) {\r
- return (T)titlePage;\r
- }\r
- return null;\r
- }\r
- \r
- @SuppressWarnings("unchecked")\r
- @Override\r
- public <T extends DocumentItem> T newItem(Class<T> cls, String... options)\r
- throws Exception {\r
- if (cls == TextItem.class)\r
- return (T)new TextItemImpl();\r
- if (cls == URLItem.class)\r
- return (T)new URLItemImpl();\r
- return null;\r
- } \r
- \r
- public Table nextTable(boolean id) throws Exception {\r
- if (currentTable!= null) {\r
- closeTable();\r
- currentTable = new PDFTable(currentTable);\r
- return currentTable; \r
- } else {\r
- return newTable();\r
- }\r
-\r
- }\r
- \r
- private void closeTable() throws Exception {\r
- if (currentTable != null && currentTable.currentLine > 0) {\r
- currentTable.setLinesVisible(false);\r
- currentTable.setHeaderVisible(false);\r
- currentTable.writeLine("");\r
- }\r
- }\r
- \r
- \r
- public Table newTable() throws Exception {\r
- closeTable();\r
- currentTable = new PDFTable(this,contentStream);\r
- return currentTable;\r
- }\r
- \r
- \r
- Table getCurrentTable() {\r
- return currentTable;\r
- }\r
- \r
- TableOfContents getOrCreateToc() throws Exception{\r
- if (toc == null)\r
- toc = new PDFTocElement(this);\r
- return toc;\r
- }\r
- \r
- \r
-\r
-\r
-}\r
+package org.simantics.document.linking.report.pdf;
+
+import java.awt.Font;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.simantics.document.linking.report.Document;
+import org.simantics.document.linking.report.DocumentElement;
+import org.simantics.document.linking.report.DocumentItem;
+import org.simantics.document.linking.report.DocumentTitlePage;
+import org.simantics.document.linking.report.Table;
+import org.simantics.document.linking.report.TableOfContents;
+import org.simantics.document.linking.report.TextItem;
+import org.simantics.document.linking.report.URLItem;
+import org.simantics.document.linking.report.base.TextItemImpl;
+import org.simantics.document.linking.report.base.URLItemImpl;
+import org.simantics.utils.datastructures.Arrays;
+
+
+/**
+ * PDF format reporter.
+ *
+ * @author Marko Luukkainen <marko.luukkainen@vtt.fi>
+ *
+ */
+public class PDFDocument implements Document {
+ private String filename;
+
+ Map<TextSize, Font> fonts = new HashMap<TextSize, Font>();
+
+ PDFPageStream contentStream;
+ PDFTable currentTable;
+ PDFTitlePage titlePage;
+ PDFTocElement toc;
+
+ public PDFDocument(String filename) throws Exception {
+ this.filename = filename;
+ contentStream = new PDFPageStream();
+ defaultFonts();
+ contentStream.setDefaultFont(fonts.get(TextSize.SMALL));
+ }
+
+ public PDFDocument(String filename, Font font) throws Exception {
+ this.filename = filename;
+ contentStream = new PDFPageStream();
+ defaultFonts();
+ fonts.put(TextSize.SMALL, font);
+ }
+
+ public PDFDocument(String filename, Font font, Font headerFont) throws Exception {
+ this.filename = filename;
+ contentStream = new PDFPageStream();
+ defaultFonts();
+ fonts.put(TextSize.SMALL, font);
+ fonts.put(TextSize.MEDIUM, headerFont);
+ }
+
+ private void defaultFonts() {
+ fonts.put(TextSize.TINY, new Font("Arial", Font.PLAIN, 6)); //$NON-NLS-1$
+ fonts.put(TextSize.SMALL, new Font("Arial", Font.PLAIN, 8)); //$NON-NLS-1$
+ fonts.put(TextSize.MEDIUM, new Font("Arial", Font.PLAIN, 10)); //$NON-NLS-1$
+ fonts.put(TextSize.LARGE, new Font("Arial", Font.PLAIN, 16)); //$NON-NLS-1$
+ fonts.put(TextSize.HUGE, new Font("Arial", Font.BOLD, 24)); //$NON-NLS-1$
+ contentStream.setDefaultFont(fonts.get(TextSize.SMALL));
+ }
+
+ Font getFont(TextSize size) {
+ return fonts.get(size);
+ }
+
+ @Override
+ public int getAvailableLines() {
+ return contentStream.getAvailableLines();
+ }
+
+ @Override
+ public int getCurrentLine() {
+ return contentStream.getCurrentLine();
+ }
+
+ public void close() throws Exception{
+ if (toc != null) {
+ // hackety hack.
+ toc.create(contentStream, contentStream.getPages().get(0));
+ }
+ contentStream.close(filename);
+ }
+
+ /* (non-Javadoc)
+ * @see org.simantics.document.linking.report.Document#nextPage()
+ */
+ @Override
+ public void nextPage() throws Exception{
+ contentStream.nextPage();
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public <T extends DocumentElement> T newElement(Class<T> cls, String...options) throws Exception {
+ if (cls == Table.class) {
+ return (T)newTable();
+ } else if (cls == TableOfContents.class) {
+ return (T)getOrCreateToc();
+ } else if (cls == DocumentTitlePage.class) {
+ if (titlePage != null)
+ throw new Exception("Report may contain only one title page"); //$NON-NLS-1$
+ titlePage = new PDFTitlePage(this);
+ return (T)titlePage;
+ }
+ return null;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public <T extends DocumentElement> T nextElement(Class<T> cls, String...options) throws Exception {
+ if (cls == Table.class) {
+ return (T)nextTable(Arrays.contains(options, Document.TOC));
+ } else if (cls == TableOfContents.class) {
+ return (T)getOrCreateToc();
+ }
+ return null;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public <T extends DocumentElement> T getCurrentElement(Class<T> cls) {
+ if (cls == Table.class) {
+ return (T)getCurrentTable();
+ } else if (cls == TableOfContents.class) {
+ return (T)toc;
+ } else if (cls == DocumentTitlePage.class) {
+ return (T)titlePage;
+ }
+ return null;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public <T extends DocumentItem> T newItem(Class<T> cls, String... options)
+ throws Exception {
+ if (cls == TextItem.class)
+ return (T)new TextItemImpl();
+ if (cls == URLItem.class)
+ return (T)new URLItemImpl();
+ return null;
+ }
+
+ public Table nextTable(boolean id) throws Exception {
+ if (currentTable!= null) {
+ closeTable();
+ currentTable = new PDFTable(currentTable);
+ return currentTable;
+ } else {
+ return newTable();
+ }
+
+ }
+
+ private void closeTable() throws Exception {
+ if (currentTable != null && currentTable.currentLine > 0) {
+ currentTable.setLinesVisible(false);
+ currentTable.setHeaderVisible(false);
+ currentTable.writeLine(""); //$NON-NLS-1$
+ }
+ }
+
+
+ public Table newTable() throws Exception {
+ closeTable();
+ currentTable = new PDFTable(this,contentStream);
+ return currentTable;
+ }
+
+
+ Table getCurrentTable() {
+ return currentTable;
+ }
+
+ TableOfContents getOrCreateToc() throws Exception{
+ if (toc == null)
+ toc = new PDFTocElement(this);
+ return toc;
+ }
+
+
+
+
+}