| 1 58 package org.krysalis.barcode.fop0205; 59 60 import org.apache.batik.dom.svg.SVGDOMImplementation; 61 import org.apache.fop.layout.Area; 62 import org.apache.fop.layout.FontState; 63 import org.apache.fop.messaging.MessageHandler; 64 import org.apache.fop.render.Renderer; 65 import org.apache.fop.render.pdf.PDFRenderer; 66 import org.apache.fop.render.ps.PSRenderer; 67 import org.apache.fop.svg.SVGArea; 68 import org.krysalis.barcode.BarcodeGenerator; 69 import org.krysalis.barcode.output.BarcodeCanvasSetupException; 70 import org.krysalis.barcode.output.svg.SVGCanvasProvider; 71 import org.krysalis.barcode.tools.UnitConv; 72 import org.w3c.dom.DOMImplementation ; 73 import org.w3c.dom.Document ; 74 75 78 public class BarcodeArea extends Area { 79 80 private BarcodeGenerator bargen; 81 private String msg; 82 private String renderMode; 83 84 91 public BarcodeArea(FontState fontState, float width, float height) { 92 super(fontState, (int)width, (int)height); 93 currentHeight = (int)height; 94 contentRectangleWidth = (int)width; 95 } 96 97 public void setBarcode(BarcodeGenerator bargen, 98 String msg, String renderMode) { 99 this.bargen = bargen; 100 this.msg = msg; 101 this.renderMode = renderMode; 102 } 103 104 public BarcodeGenerator getBarcodeGenerator() { 105 return this.bargen; 106 } 107 108 public String getMessage() { 109 return this.msg; 110 } 111 112 public String getRenderMode() { 113 return this.renderMode; 114 } 115 116 public int getWidth() { 117 return contentRectangleWidth; 118 } 119 120 public double mpt2mm(double mpt) { 121 return UnitConv.pt2mm(mpt / 1000); 122 } 123 124 129 public void render(Renderer renderer) { 130 if (renderer instanceof PSRenderer) { 131 PSRenderer psr = (PSRenderer)renderer; 132 renderPostScriptBarcodeUsingSVG(psr); 133 } else if (renderer instanceof PDFRenderer) { 134 PDFRenderer pdfr = (PDFRenderer)renderer; 135 renderPDFBarcodeUsingSVG(pdfr); 136 } else { 137 MessageHandler.errorln( 138 "Cannot render barcode. Unsupported renderer: " 139 + renderer.getClass().getName()); 140 } 141 } 142 143 protected SVGArea createSVGArea() throws BarcodeCanvasSetupException { 144 DOMImplementation domImpl = SVGDOMImplementation.getDOMImplementation(); 145 SVGCanvasProvider svgout = new SVGCanvasProvider(domImpl, true); 146 getBarcodeGenerator().generateBarcode(svgout, getMessage()); 147 Document dom = svgout.getDOM(); 148 SVGArea svgarea = new SVGArea(getFontState(), getWidth(), getHeight()); 149 svgarea.setSVGDocument(dom); 150 return svgarea; 151 } 152 153 protected void renderPostScriptBarcodeUsingSVG(PSRenderer psr) { 154 try { 155 psr.renderSVGArea(createSVGArea()); 156 } catch (BarcodeCanvasSetupException bcse) { 157 MessageHandler.errorln( 158 "Couldn't render barcode due to BarcodeCanvasSetupException: " 159 + bcse.getMessage()); 160 } 161 } 162 163 protected void renderPDFBarcodeUsingSVG(PDFRenderer pdfr) { 164 try { 165 pdfr.renderSVGArea(createSVGArea()); 166 } catch (BarcodeCanvasSetupException bcse) { 167 MessageHandler.errorln( 168 "Couldn't render barcode due to BarcodeCanvasSetupException: " 169 + bcse.getMessage()); 170 } 171 } 172 173 } 174 | Popular Tags |