-package org.simantics.document.linking.report.pdf;\r
-\r
-import java.awt.Font;\r
-import java.io.FileOutputStream;\r
-import java.io.IOException;\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-\r
-import com.lowagie.text.Document;\r
-import com.lowagie.text.PageSize;\r
-import com.lowagie.text.Rectangle;\r
-import com.lowagie.text.pdf.PdfCopy;\r
-import com.lowagie.text.pdf.PdfImportedPage;\r
-import com.lowagie.text.pdf.PdfReader;\r
-\r
-public class PDFPageStream {\r
- boolean modifiable = false;\r
- Rectangle pageSize = PageSize.A4;\r
- Font defaultFont;\r
- List<PDFPage> pages = new ArrayList<PDFPage>();\r
- \r
- int contentWidth;\r
- int contentHeight;\r
- \r
- int marginLeft = 20;\r
- int marginRight = 20;\r
- int marginTop = 10;\r
- int marginBottom = 45;\r
-\r
- int currentPage = 0;\r
- \r
- public PDFPageStream() {\r
- calculateContent();\r
- }\r
- \r
- public PDFPageStream(Rectangle pageSize) {\r
- this.pageSize = pageSize;\r
- calculateContent();\r
- }\r
- \r
- public PDFPageStream(boolean modifiable) {\r
- this.modifiable = modifiable;\r
- calculateContent();\r
- }\r
- \r
- public PDFPageStream(Rectangle pageSize, boolean modifiable) {\r
- this.pageSize = pageSize;\r
- this.modifiable = modifiable;\r
- calculateContent();\r
- }\r
- \r
- private void calculateContent() {\r
- contentWidth = (int)getPageSize().getWidth() - marginLeft - marginRight;\r
- contentHeight = (int)getPageSize().getHeight() - marginTop - marginBottom;\r
- }\r
- \r
-\r
- public Rectangle getPageSize() {\r
- return pageSize;\r
- }\r
- \r
- public Font getDefaultFont() {\r
- return defaultFont;\r
- }\r
- \r
- public void setDefaultFont(Font defaultFont) {\r
- this.defaultFont = defaultFont;\r
- }\r
- \r
- public List<PDFPage> getPages() {\r
- return pages;\r
- }\r
- \r
- public void nextPage() throws Exception{\r
- endPage();\r
- \r
- PDFPage page = new PDFPage(this);\r
- pages.add(page);\r
- currentPage++;\r
- \r
- }\r
-\r
- private void endPage() {\r
- if (pages.size() > 0) {\r
- PDFPage lastPage = pages.get(pages.size()-1);\r
- if (!modifiable && lastPage.isOpen())\r
- lastPage.close();\r
- }\r
- }\r
- \r
- \r
- \r
- public int getAvailableLines() {\r
- return getCurrentPage().availableLines;\r
- }\r
- \r
-// public int getTotalLines() {\r
-// return totalLines;\r
-// }\r
- \r
- public int getCurrentLine() {\r
- return getCurrentPage().currentLine;\r
- }\r
- \r
- public int getContentWidth() {\r
- return contentWidth;\r
- }\r
- \r
- public int getContentHeight() {\r
- return contentHeight;\r
- }\r
- \r
- protected void checkNextPage() throws Exception{\r
- PDFPage page = getCurrentPage();\r
- if (contentHeight - page.currentPixel - page.getLineHeight() <= 0)\r
- nextPage();\r
- }\r
- \r
- public int getCurrentPageIndex() {\r
- return currentPage;\r
- }\r
- \r
- public PDFPage getCurrentPage() {\r
- return pages.get(currentPage-1);\r
- }\r
- \r
- public void copy(PdfCopy pdfCopy) throws IOException{\r
- for (PDFPage page : pages) {\r
- if (page.isOpen())\r
- page.close();\r
- PdfReader reader = new PdfReader(page.tempFile.getAbsolutePath());\r
- try {\r
- for (int i = 1; i <= reader.getNumberOfPages(); i++) {\r
- PdfImportedPage ipage = pdfCopy.getImportedPage(reader, i);\r
- pdfCopy.addPage(ipage);\r
- }\r
- } catch (Exception e) {\r
- e.printStackTrace();\r
- } finally {\r
- reader.close();\r
- }\r
- }\r
- }\r
- \r
- public void close(String filename) throws Exception{\r
- if (pages.size() == 0) {\r
- return;\r
- }\r
- try {\r
- endPage();\r
- Document document = new Document(pageSize);\r
- PdfCopy pdfCopy = new PdfCopy(document, new FileOutputStream(filename));\r
- document.open();\r
- copy(pdfCopy);\r
- document.close();\r
- pdfCopy.close();\r
- } finally {\r
- close();\r
- }\r
- }\r
- \r
- public void close() throws Exception{\r
- for (PDFPage page : pages) {\r
- page.tempFile.delete();\r
- }\r
- pages.clear();\r
- defaultFont = null;\r
- }\r
-}\r
+package org.simantics.document.linking.report.pdf;
+
+import java.awt.Font;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import com.lowagie.text.Document;
+import com.lowagie.text.PageSize;
+import com.lowagie.text.Rectangle;
+import com.lowagie.text.pdf.PdfCopy;
+import com.lowagie.text.pdf.PdfImportedPage;
+import com.lowagie.text.pdf.PdfReader;
+
+public class PDFPageStream {
+ boolean modifiable = false;
+ Rectangle pageSize = PageSize.A4;
+ Font defaultFont;
+ List<PDFPage> pages = new ArrayList<PDFPage>();
+
+ int contentWidth;
+ int contentHeight;
+
+ int marginLeft = 20;
+ int marginRight = 20;
+ int marginTop = 10;
+ int marginBottom = 45;
+
+ int currentPage = 0;
+
+ public PDFPageStream() {
+ calculateContent();
+ }
+
+ public PDFPageStream(Rectangle pageSize) {
+ this.pageSize = pageSize;
+ calculateContent();
+ }
+
+ public PDFPageStream(boolean modifiable) {
+ this.modifiable = modifiable;
+ calculateContent();
+ }
+
+ public PDFPageStream(Rectangle pageSize, boolean modifiable) {
+ this.pageSize = pageSize;
+ this.modifiable = modifiable;
+ calculateContent();
+ }
+
+ private void calculateContent() {
+ contentWidth = (int)getPageSize().getWidth() - marginLeft - marginRight;
+ contentHeight = (int)getPageSize().getHeight() - marginTop - marginBottom;
+ }
+
+
+ public Rectangle getPageSize() {
+ return pageSize;
+ }
+
+ public Font getDefaultFont() {
+ return defaultFont;
+ }
+
+ public void setDefaultFont(Font defaultFont) {
+ this.defaultFont = defaultFont;
+ }
+
+ public List<PDFPage> getPages() {
+ return pages;
+ }
+
+ public void nextPage() throws Exception{
+ endPage();
+
+ PDFPage page = new PDFPage(this);
+ pages.add(page);
+ currentPage++;
+
+ }
+
+ private void endPage() {
+ if (pages.size() > 0) {
+ PDFPage lastPage = pages.get(pages.size()-1);
+ if (!modifiable && lastPage.isOpen())
+ lastPage.close();
+ }
+ }
+
+
+
+ public int getAvailableLines() {
+ return getCurrentPage().availableLines;
+ }
+
+// public int getTotalLines() {
+// return totalLines;
+// }
+
+ public int getCurrentLine() {
+ return getCurrentPage().currentLine;
+ }
+
+ public int getContentWidth() {
+ return contentWidth;
+ }
+
+ public int getContentHeight() {
+ return contentHeight;
+ }
+
+ protected void checkNextPage() throws Exception{
+ PDFPage page = getCurrentPage();
+ if (contentHeight - page.currentPixel - page.getLineHeight() <= 0)
+ nextPage();
+ }
+
+ public int getCurrentPageIndex() {
+ return currentPage;
+ }
+
+ public PDFPage getCurrentPage() {
+ return pages.get(currentPage-1);
+ }
+
+ public void copy(PdfCopy pdfCopy) throws IOException{
+ for (PDFPage page : pages) {
+ if (page.isOpen())
+ page.close();
+ PdfReader reader = new PdfReader(page.tempFile.getAbsolutePath());
+ try {
+ for (int i = 1; i <= reader.getNumberOfPages(); i++) {
+ PdfImportedPage ipage = pdfCopy.getImportedPage(reader, i);
+ pdfCopy.addPage(ipage);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ reader.close();
+ }
+ }
+ }
+
+ public void close(String filename) throws Exception{
+ if (pages.size() == 0) {
+ return;
+ }
+ try {
+ endPage();
+ Document document = new Document(pageSize);
+ PdfCopy pdfCopy = new PdfCopy(document, new FileOutputStream(filename));
+ document.open();
+ copy(pdfCopy);
+ document.close();
+ pdfCopy.close();
+ } finally {
+ close();
+ }
+ }
+
+ public void close() throws Exception{
+ for (PDFPage page : pages) {
+ page.tempFile.delete();
+ }
+ pages.clear();
+ defaultFont = null;
+ }
+}