1 17 18 19 20 package org.apache.fop.render.pdf; 21 22 import java.awt.Color ; 23 import java.awt.Dimension ; 24 import java.awt.Graphics2D ; 25 import java.awt.RenderingHints ; 26 import java.awt.geom.AffineTransform ; 27 import java.awt.geom.Rectangle2D ; 28 import java.awt.image.BufferedImage ; 29 import java.io.IOException ; 30 31 import org.apache.fop.render.AbstractGraphics2DAdapter; 32 import org.apache.fop.render.Graphics2DImagePainter; 33 import org.apache.fop.render.RendererContext; 34 import org.apache.fop.render.RendererContext.RendererContextWrapper; 35 import org.apache.fop.svg.PDFGraphics2D; 36 37 40 public class PDFGraphics2DAdapter extends AbstractGraphics2DAdapter { 41 42 private PDFRenderer renderer; 43 44 48 public PDFGraphics2DAdapter(PDFRenderer renderer) { 49 this.renderer = renderer; 50 } 51 52 53 public void paintImage(Graphics2DImagePainter painter, 54 RendererContext context, 55 int x, int y, int width, int height) throws IOException { 56 57 PDFSVGHandler.PDFInfo pdfInfo = PDFSVGHandler.getPDFInfo(context); 58 float fwidth = width / 1000f; 59 float fheight = height / 1000f; 60 float fx = x / 1000f; 61 float fy = y / 1000f; 62 63 Dimension dim = painter.getImageSize(); 65 float imw = (float)dim.getWidth() / 1000f; 66 float imh = (float)dim.getHeight() / 1000f; 67 68 float sx = fwidth / (float)imw; 69 float sy = fheight / (float)imh; 70 71 renderer.saveGraphicsState(); 72 renderer.setColor(Color.black, false, null); 73 renderer.setColor(Color.black, true, null); 74 75 77 renderer.currentStream.add(sx + " 0 0 " + sy + " " + fx + " " 81 + fy + " cm\n"); 82 83 84 final boolean textAsShapes = false; 85 if (pdfInfo.pdfContext == null) { 86 pdfInfo.pdfContext = pdfInfo.pdfPage; 87 } 88 PDFGraphics2D graphics = new PDFGraphics2D(textAsShapes, 89 pdfInfo.fi, pdfInfo.pdfDoc, 90 pdfInfo.pdfContext, pdfInfo.pdfPage.referencePDF(), 91 renderer.currentFontName, 92 renderer.currentFontSize); 93 graphics.setGraphicContext(new org.apache.xmlgraphics.java2d.GraphicContext()); 94 95 AffineTransform transform = new AffineTransform (); 96 transform.translate(fx, fy); 97 pdfInfo.pdfState.concatenate(transform); 98 graphics.setPDFState(pdfInfo.pdfState); 99 graphics.setOutputStream(pdfInfo.outputStream); 100 101 if (pdfInfo.paintAsBitmap) { 102 int resolution = (int)Math.round(context.getUserAgent().getTargetResolution()); 104 RendererContextWrapper ctx = RendererContext.wrapRendererContext(context); 105 BufferedImage bi = paintToBufferedImage(painter, ctx, resolution, false, false); 106 107 float scale = PDFRenderer.NORMAL_PDF_RESOLUTION 108 / context.getUserAgent().getTargetResolution(); 109 graphics.drawImage(bi, new AffineTransform (scale, 0, 0, scale, 0, 0), null); 110 } else { 111 Rectangle2D area = new Rectangle2D.Double (0.0, 0.0, imw, imh); 112 painter.paint(graphics, area); 113 } 114 115 pdfInfo.currentStream.add(graphics.getString()); 116 renderer.restoreGraphicsState(); 117 pdfInfo.pdfState.pop(); 118 } 119 120 124 protected void setRenderingHintsForBufferedImage(Graphics2D g2d) { 125 super.setRenderingHintsForBufferedImage(g2d); 126 g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 127 RenderingHints.VALUE_ANTIALIAS_ON); 128 g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, 129 RenderingHints.VALUE_TEXT_ANTIALIAS_ON); 130 } 131 132 } 133 | Popular Tags |