source: trunk/src/org/expeditee/io/PdfFramesetWriter.java@ 1450

Last change on this file since 1450 was 1258, checked in by davidb, 5 years ago

Changed how DisplayController width, height and size are retrieved. Now does this top-level, rather than going through the AxisAlignmentBox. In doing so, can now control for when the window size has you yet been correctly mapped to the screen, and fall back to pre-defined MINIMUM defaults

File size: 7.2 KB
Line 
1/**
2 * PdfFramesetWriter.java
3 * Copyright (C) 2010 New Zealand Digital Library, http://expeditee.org
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19package org.expeditee.io;
20
21import java.awt.Graphics2D;
22import java.io.FileOutputStream;
23import java.io.IOException;
24import java.io.Writer;
25import java.util.Collection;
26import java.util.List;
27
28import org.expeditee.core.Dimension;
29import org.expeditee.core.Image;
30import org.expeditee.gio.EcosystemManager;
31import org.expeditee.gio.GraphicsManager;
32import org.expeditee.gio.swing.SwingConversions;
33import org.expeditee.gio.swing.SwingMiscManager;
34import org.expeditee.gui.DisplayController;
35import org.expeditee.gui.Frame;
36import org.expeditee.gui.FrameGraphics;
37import org.expeditee.items.Circle;
38import org.expeditee.items.Item;
39import org.expeditee.items.Line;
40import org.expeditee.items.Picture;
41import org.expeditee.items.Text;
42import org.expeditee.items.widgets.Widget;
43import org.expeditee.settings.UserSettings;
44
45import com.lowagie.text.Document;
46import com.lowagie.text.DocumentException;
47import com.lowagie.text.Font;
48import com.lowagie.text.FontFactory;
49import com.lowagie.text.Rectangle;
50import com.lowagie.text.pdf.PdfContentByte;
51import com.lowagie.text.pdf.PdfWriter;
52
53/**
54 *
55 * @author root
56 *
57 */
58public class PdfFramesetWriter extends DefaultFramesetWriter {
59
60 private Document _pdfDocument;
61
62 private PdfWriter _pdfWriter;
63
64 private boolean _showFrameNames;
65
66 public PdfFramesetWriter(long firstFrame, long maxFrame, boolean showFrameNames)
67 {
68 super(firstFrame, maxFrame);
69 Dimension d = DisplayController.getFramePaintAreaSize();
70 _pdfDocument = new Document(new Rectangle(d.width, d.height));
71 _showFrameNames = showFrameNames;
72 }
73
74 public PdfFramesetWriter() {
75 this(1, Long.MAX_VALUE, false);
76 }
77
78 @Override
79 protected String getFileName(Frame start) {
80 String fileName = start.getFramesetName();
81 if (_maxFrame < Long.MAX_VALUE) {
82 fileName += "_" + _firstFrame + "-" + _maxFrame;
83 }
84 return fileName;
85 }
86
87 @Override
88 protected void initialise(Frame start, Writer writer) throws IOException {
89 _format = ".pdf";
90 super.initialise(start, writer);
91
92 try {
93 _pdfWriter = PdfWriter.getInstance(_pdfDocument,
94 new FileOutputStream(_filename));
95 _pdfDocument.open();
96 _pdfDocument.addCreationDate();
97 _pdfDocument.addAuthor(UserSettings.UserName.get());
98 _pdfDocument.addCreator("Expeditee");
99 } catch (DocumentException e) {
100 e.printStackTrace();
101 throw new IOException(e.getMessage());
102 }
103 }
104
105 @Override
106 protected void writeTitle(Text toWrite, List<Item> items)
107 throws IOException {
108 _pdfDocument.addTitle(toWrite.getText());
109 writeText(toWrite);
110 }
111
112 protected void writeStartFrame(Frame starting) throws IOException {
113 // TODO color in the frame background color
114
115 super.writeStartFrame(starting);
116 }
117
118 protected void writeEndFrame(Frame ending) throws IOException {
119 if (_showFrameNames)
120 writeText((Text) ending.getNameItem());
121 super.writeEndFrame(ending);
122 // Move to the next page
123 _pdfDocument.newPage();
124 }
125
126 @Override
127 protected String finalise() throws IOException {
128 _pdfDocument.close();
129 return super.finalise();
130 }
131
132 @Override
133 protected void writeText(Text text) throws IOException {
134 PdfContentByte cb = _pdfWriter.getDirectContent();
135 // we tell the ContentByte we're ready to draw text
136 cb.beginText();
137 Font font = FontFactory.getFont(Conversion.getPdfFont(text.getFamily()),
138 text.getSize(),
139 SwingConversions.toSwingFontStyle(text.getPaintFont().getStyle()),
140 SwingConversions.toSwingColor(text.getPaintColor()));
141 cb.setFontAndSize(font.getBaseFont(), text.getSize());
142 // cb.setColorStroke(text.getPaintColor());
143 cb.setColorFill(SwingConversions.toSwingColor(text.getPaintColor()));
144
145 // we draw some text on a certain position
146 cb.setTextMatrix(text.getX(), _pdfWriter.getPageSize().getHeight()
147 - text.getY());
148 List<String> textLines = text.getTextList();
149 // cb.showText(textLines.get(0));
150 for (int i = 0; i < textLines.size(); i++) {
151 cb.showText(textLines.get(i));
152 cb.moveText(0, -text.getLineHeight());
153 }
154 // we tell the contentByte, we've finished drawing text
155 cb.endText();
156 }
157
158 @Override
159 protected void writePicture(Picture pic) throws IOException {
160 Image image = pic.getCroppedImage();
161 if (image == null)
162 return;
163 try {
164 PdfContentByte cb = _pdfWriter.getDirectContent();
165 com.lowagie.text.Image iTextImage = com.lowagie.text.Image
166 .getInstance(SwingMiscManager.getIfUsingSwingImageManager().getInternalImage(image), null);
167 iTextImage.setAbsolutePosition(pic.getX(), _pdfWriter.getPageSize()
168 .getHeight()
169 - pic.getY() - pic.getHeight());
170 cb.addImage(iTextImage);
171 } catch (DocumentException e) {
172 e.printStackTrace();
173 }
174 }
175
176 @Override
177 protected void writeLine(Line lineEnd) throws IOException {
178 PdfContentByte cb = _pdfWriter.getDirectContent();
179// Color fill = lineEnd.getFillColor();
180// if (fill != null) {
181// cb.setColorFill(fill);
182// }
183/* Graphics2D g = cb.createGraphicsShapes(
184 FrameGraphics.getMaxSize().width,
185 FrameGraphics.getMaxSize().height);*/
186 GraphicsManager g = EcosystemManager.getGraphicsManager();
187 Image temp = EcosystemManager.getImageManager().createImage(DisplayController.getFramePaintAreaSize());
188 lineEnd.paint();
189// if (fill != null) {
190// g.setPaint(fill);
191// }
192// lineEnd.paintFill(g);
193 }
194
195 @Override
196 protected Collection<Item> getItemsToWrite(Frame toWrite) {
197 return toWrite.getVisibleItems();
198 }
199
200 @Override
201 protected void writeCircle(Circle toWrite) throws IOException
202 {
203 PdfContentByte cb = _pdfWriter.getDirectContent();
204 Graphics2D g = cb.createGraphicsShapes(DisplayController.getFramePaintAreaWidth(), DisplayController.getFramePaintAreaHeight());
205 Image temp = EcosystemManager.getImageManager().createImage(DisplayController.getFramePaintAreaSize());
206 EcosystemManager.getGraphicsManager().pushDrawingSurface(temp);
207 toWrite.paint();
208 EcosystemManager.getGraphicsManager().popDrawingSurface();
209 g.drawImage(SwingMiscManager.getIfUsingSwingImageManager().getInternalImage(temp), 0, 0, null);
210 }
211
212 @Override
213 protected void writeWidget(Widget toWrite) throws IOException
214 {
215 PdfContentByte cb = _pdfWriter.getDirectContent();
216 Graphics2D g = cb.createGraphicsShapes(DisplayController.getFramePaintAreaWidth(), DisplayController.getFramePaintAreaHeight());
217 Image temp = EcosystemManager.getImageManager().createImage(DisplayController.getFramePaintAreaSize());
218 EcosystemManager.getGraphicsManager().pushDrawingSurface(temp);
219 toWrite.paint();
220 EcosystemManager.getGraphicsManager().popDrawingSurface();
221 g.drawImage(SwingMiscManager.getIfUsingSwingImageManager().getInternalImage(temp), 0, 0, null);
222 }
223}
Note: See TracBrowser for help on using the repository browser.