00001 package edu.stanford.hci.r3.render.sheets;
00002
00003 import java.awt.Graphics2D;
00004 import java.awt.geom.AffineTransform;
00005 import java.io.File;
00006 import java.io.FileNotFoundException;
00007 import java.io.FileOutputStream;
00008 import java.io.IOException;
00009 import java.util.List;
00010
00011 import com.lowagie.text.DocumentException;
00012 import com.lowagie.text.pdf.PdfContentByte;
00013 import com.lowagie.text.pdf.PdfReader;
00014 import com.lowagie.text.pdf.PdfStamper;
00015
00016 import edu.stanford.hci.r3.paper.Region;
00017 import edu.stanford.hci.r3.paper.sheets.PDFSheet;
00018 import edu.stanford.hci.r3.render.SheetRenderer;
00019 import edu.stanford.hci.r3.units.coordinates.Coordinates;
00020 import edu.stanford.hci.r3.util.DebugUtils;
00021 import edu.stanford.hci.r3.util.graphics.GraphicsUtils;
00022
00033 public class PDFSheetRenderer extends SheetRenderer {
00034
00038 private PDFSheet pdfSheet;
00039
00043 public PDFSheetRenderer(PDFSheet s) {
00044 super(s);
00045 pdfSheet = s;
00046 }
00047
00058 public void renderToG2D(Graphics2D g2d) {
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072 g2d.setRenderingHints(GraphicsUtils.getBestRenderingHints());
00073
00074 final List<Region> regions = sheet.getRegions();
00075
00076
00077 for (Region r : regions) {
00078 if (r.isActive()) continue;
00079
00080
00081 final AffineTransform currTransform = new AffineTransform(g2d.getTransform());
00082 DebugUtils.println("Rendering " + r.getName());
00083 final Coordinates regionOffset = sheet.getRegionOffset(r);
00084 final double xOffsetPts = regionOffset.getX().getValueInPoints();
00085 final double yOffsetPts = regionOffset.getY().getValueInPoints();
00086
00087
00088 g2d.translate((int) xOffsetPts, (int) yOffsetPts);
00089 r.getRenderer().renderToG2D(g2d);
00090 g2d.setTransform(currTransform);
00091 }
00092 }
00093
00100 public void renderToPDF(File destPDFFile) {
00101 try {
00102 final FileOutputStream fileOutputStream = new FileOutputStream(destPDFFile);
00103
00104 final PdfReader reader = pdfSheet.getReader();
00105 DebugUtils.println("NumPages in Existing PDF: " + reader.getNumberOfPages());
00106
00107
00108 final PdfStamper stamp = new PdfStamper(reader, fileOutputStream);
00109
00110
00111
00112 final PdfContentByte topLayer = stamp.getOverContent(1 );
00113 final PdfContentByte bottomLayer = stamp.getUnderContent(1);
00114 renderToPDFContentLayers(destPDFFile, topLayer, bottomLayer);
00115 stamp.close();
00116
00117
00118 savePatternInformation();
00119 } catch (FileNotFoundException e) {
00120 e.printStackTrace();
00121 } catch (DocumentException e) {
00122 e.printStackTrace();
00123 } catch (IOException e) {
00124 e.printStackTrace();
00125 }
00126 }
00127 }