1 package org.simantics.document.linking.report.pdf;
\r
3 import java.awt.Font;
\r
4 import java.io.FileOutputStream;
\r
5 import java.io.IOException;
\r
6 import java.util.ArrayList;
\r
7 import java.util.List;
\r
9 import com.lowagie.text.Document;
\r
10 import com.lowagie.text.PageSize;
\r
11 import com.lowagie.text.Rectangle;
\r
12 import com.lowagie.text.pdf.PdfCopy;
\r
13 import com.lowagie.text.pdf.PdfImportedPage;
\r
14 import com.lowagie.text.pdf.PdfReader;
\r
16 public class PDFPageStream {
\r
17 boolean modifiable = false;
\r
18 Rectangle pageSize = PageSize.A4;
\r
20 List<PDFPage> pages = new ArrayList<PDFPage>();
\r
25 int marginLeft = 20;
\r
26 int marginRight = 20;
\r
28 int marginBottom = 45;
\r
30 int currentPage = 0;
\r
32 public PDFPageStream() {
\r
36 public PDFPageStream(Rectangle pageSize) {
\r
37 this.pageSize = pageSize;
\r
41 public PDFPageStream(boolean modifiable) {
\r
42 this.modifiable = modifiable;
\r
46 public PDFPageStream(Rectangle pageSize, boolean modifiable) {
\r
47 this.pageSize = pageSize;
\r
48 this.modifiable = modifiable;
\r
52 private void calculateContent() {
\r
53 contentWidth = (int)getPageSize().getWidth() - marginLeft - marginRight;
\r
54 contentHeight = (int)getPageSize().getHeight() - marginTop - marginBottom;
\r
58 public Rectangle getPageSize() {
\r
62 public Font getDefaultFont() {
\r
66 public void setDefaultFont(Font defaultFont) {
\r
67 this.defaultFont = defaultFont;
\r
70 public List<PDFPage> getPages() {
\r
74 public void nextPage() throws Exception{
\r
77 PDFPage page = new PDFPage(this);
\r
83 private void endPage() {
\r
84 if (pages.size() > 0) {
\r
85 PDFPage lastPage = pages.get(pages.size()-1);
\r
86 if (!modifiable && lastPage.isOpen())
\r
93 public int getAvailableLines() {
\r
94 return getCurrentPage().availableLines;
\r
97 // public int getTotalLines() {
\r
98 // return totalLines;
\r
101 public int getCurrentLine() {
\r
102 return getCurrentPage().currentLine;
\r
105 public int getContentWidth() {
\r
106 return contentWidth;
\r
109 public int getContentHeight() {
\r
110 return contentHeight;
\r
113 protected void checkNextPage() throws Exception{
\r
114 PDFPage page = getCurrentPage();
\r
115 if (contentHeight - page.currentPixel - page.getLineHeight() <= 0)
\r
119 public int getCurrentPageIndex() {
\r
120 return currentPage;
\r
123 public PDFPage getCurrentPage() {
\r
124 return pages.get(currentPage-1);
\r
127 public void copy(PdfCopy pdfCopy) throws IOException{
\r
128 for (PDFPage page : pages) {
\r
131 PdfReader reader = new PdfReader(page.tempFile.getAbsolutePath());
\r
133 for (int i = 1; i <= reader.getNumberOfPages(); i++) {
\r
134 PdfImportedPage ipage = pdfCopy.getImportedPage(reader, i);
\r
135 pdfCopy.addPage(ipage);
\r
137 } catch (Exception e) {
\r
138 e.printStackTrace();
\r
145 public void close(String filename) throws Exception{
\r
146 if (pages.size() == 0) {
\r
151 Document document = new Document(pageSize);
\r
152 PdfCopy pdfCopy = new PdfCopy(document, new FileOutputStream(filename));
\r
162 public void close() throws Exception{
\r
163 for (PDFPage page : pages) {
\r
164 page.tempFile.delete();
\r
167 defaultFont = null;
\r