-package org.simantics.document.linking.report.pdf;\r
-\r
-import java.awt.Font;\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-\r
-import org.simantics.document.linking.report.DocumentElement;\r
-import org.simantics.document.linking.report.TableOfContents;\r
-import org.simantics.document.linking.report.Document.TextSize;\r
-import org.simantics.document.linking.report.TableColumn.Alignment;\r
-import org.simantics.utils.datastructures.Pair;\r
-\r
-\r
-public class PDFTocElement implements TableOfContents {\r
- \r
- PDFDocument writer;\r
- PDFPageStream stream;\r
- \r
- Font itemFont;\r
- Font titleFont;\r
- \r
- int linesPerPage;\r
- int linesOnFirstPage;\r
- \r
- PDFTable tocTable;\r
- \r
- public PDFTocElement(PDFDocument writer) throws Exception{\r
- this.writer = writer;\r
- stream = new PDFPageStream();\r
- itemFont = writer.getFont(TextSize.SMALL);\r
- titleFont = writer.getFont(TextSize.LARGE);\r
- stream.setDefaultFont(itemFont);\r
- \r
- stream.nextPage();\r
- tocTable= new PDFTable(writer, stream);\r
- linesPerPage = tocTable.getAvailableLines();\r
- //linesPerPage = stream.getAvailableLines();\r
- PDFPage page = stream.getCurrentPage();\r
- page.setFont(titleFont);\r
- page.writeLine("Table of Contents");\r
- page.setFont(itemFont);\r
- page.writeLine("");\r
- linesOnFirstPage = tocTable.getAvailableLines();\r
- //linesOnFirstPage = page.availableLines;\r
- }\r
- private List<Pair<String, PDFElement>> toc = new ArrayList<Pair<String,PDFElement>>();\r
- @Override\r
- public void addTocElement(String label, DocumentElement element) {\r
- toc.add(new Pair<String, PDFElement>(label, (PDFElement)element));\r
- }\r
- \r
- public void create(PDFPageStream destStream, PDFPage after) throws Exception {\r
- int tocPages = getEstimatedPages();\r
-\r
- List<PDFPage> pages = destStream.getPages();\r
- int tocIndex = pages.indexOf(after)+1;\r
- \r
- tocTable.addColumn("Document", 0.9);\r
- tocTable.addColumn("Page", 0.1).setAlignment(Alignment.RIGHT);\r
- tocTable.setHeaderVisible(false);\r
- tocTable.setLinesVisible(false);\r
- for (Pair<String, PDFElement> item : toc) {\r
- int pageIndex = pages.indexOf(item.second.getPage());\r
- if (pageIndex >= 0) {\r
- pageIndex += tocPages + 1;\r
- }\r
- tocTable.writeRow(item.first, Integer.toString(pageIndex));\r
-// stream.getCurrentPage().writeLine( + " " + pageIndex);\r
- }\r
- \r
- pages.addAll(tocIndex, stream.getPages());\r
- stream = null;\r
- }\r
- \r
- \r
- \r
- public int getEstimatedPages() {\r
- int pages = 1;\r
- int items = toc.size();\r
- items -= linesOnFirstPage;\r
- while (items > 0) {\r
- items-= linesPerPage;\r
- pages++;\r
- }\r
- return pages;\r
- }\r
-\r
-}\r
+package org.simantics.document.linking.report.pdf;
+
+import java.awt.Font;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.simantics.document.linking.report.DocumentElement;
+import org.simantics.document.linking.report.TableOfContents;
+import org.simantics.document.linking.report.Document.TextSize;
+import org.simantics.document.linking.report.TableColumn.Alignment;
+import org.simantics.utils.datastructures.Pair;
+
+
+public class PDFTocElement implements TableOfContents {
+
+ PDFDocument writer;
+ PDFPageStream stream;
+
+ Font itemFont;
+ Font titleFont;
+
+ int linesPerPage;
+ int linesOnFirstPage;
+
+ PDFTable tocTable;
+
+ public PDFTocElement(PDFDocument writer) throws Exception{
+ this.writer = writer;
+ stream = new PDFPageStream();
+ itemFont = writer.getFont(TextSize.SMALL);
+ titleFont = writer.getFont(TextSize.LARGE);
+ stream.setDefaultFont(itemFont);
+
+ stream.nextPage();
+ tocTable= new PDFTable(writer, stream);
+ linesPerPage = tocTable.getAvailableLines();
+ //linesPerPage = stream.getAvailableLines();
+ PDFPage page = stream.getCurrentPage();
+ page.setFont(titleFont);
+ page.writeLine("Table of Contents");
+ page.setFont(itemFont);
+ page.writeLine("");
+ linesOnFirstPage = tocTable.getAvailableLines();
+ //linesOnFirstPage = page.availableLines;
+ }
+ private List<Pair<String, PDFElement>> toc = new ArrayList<Pair<String,PDFElement>>();
+ @Override
+ public void addTocElement(String label, DocumentElement element) {
+ toc.add(new Pair<String, PDFElement>(label, (PDFElement)element));
+ }
+
+ public void create(PDFPageStream destStream, PDFPage after) throws Exception {
+ int tocPages = getEstimatedPages();
+
+ List<PDFPage> pages = destStream.getPages();
+ int tocIndex = pages.indexOf(after)+1;
+
+ tocTable.addColumn("Document", 0.9);
+ tocTable.addColumn("Page", 0.1).setAlignment(Alignment.RIGHT);
+ tocTable.setHeaderVisible(false);
+ tocTable.setLinesVisible(false);
+ for (Pair<String, PDFElement> item : toc) {
+ int pageIndex = pages.indexOf(item.second.getPage());
+ if (pageIndex >= 0) {
+ pageIndex += tocPages + 1;
+ }
+ tocTable.writeRow(item.first, Integer.toString(pageIndex));
+// stream.getCurrentPage().writeLine( + " " + pageIndex);
+ }
+
+ pages.addAll(tocIndex, stream.getPages());
+ stream = null;
+ }
+
+
+
+ public int getEstimatedPages() {
+ int pages = 1;
+ int items = toc.size();
+ items -= linesOnFirstPage;
+ while (items > 0) {
+ items-= linesPerPage;
+ pages++;
+ }
+ return pages;
+ }
+
+}