KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > krysalis > barcode > output > svg > JDOMSVGCanvasProvider


1 /*
2  * $Id: JDOMSVGCanvasProvider.java,v 1.8 2003/08/18 19:12:05 jmaerki Exp $
3  * ============================================================================
4  * The Krysalis Patchy Software License, Version 1.1_01
5  * Copyright (c) 2002-2003 Nicola Ken Barozzi. All rights reserved.
6  *
7  * This Licence is compatible with the BSD licence as described and
8  * approved by http://www.opensource.org/, and is based on the
9  * Apache Software Licence Version 1.1.
10  *
11  * Redistribution and use in source and binary forms, with or without
12  * modification, are permitted provided that the following conditions
13  * are met:
14  *
15  * 1. Redistributions of source code must retain the above copyright
16  * notice, this list of conditions and the following disclaimer.
17  *
18  * 2. Redistributions in binary form must reproduce the above copyright
19  * notice, this list of conditions and the following disclaimer in
20  * the documentation and/or other materials provided with the
21  * distribution.
22  *
23  * 3. The end-user documentation included with the redistribution,
24  * if any, must include the following acknowledgment:
25  * "This product includes software developed for project
26  * Krysalis (http://www.krysalis.org/)."
27  * Alternately, this acknowledgment may appear in the software itself,
28  * if and wherever such third-party acknowledgments normally appear.
29  *
30  * 4. The names "Krysalis" and "Nicola Ken Barozzi" and
31  * "Krysalis Barcode" must not be used to endorse or promote products
32  * derived from this software without prior written permission. For
33  * written permission, please contact nicolaken@krysalis.org.
34  *
35  * 5. Products derived from this software may not be called "Krysalis",
36  * "Krysalis Barcode", nor may "Krysalis" appear in their name,
37  * without prior written permission of Nicola Ken Barozzi.
38  *
39  * 6. This software may contain voluntary contributions made by many
40  * individuals, who decided to donate the code to this project in
41  * respect of this licence, and was originally created by
42  * Jeremias Maerki <jeremias@maerki.org>.
43  *
44  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
45  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
46  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
47  * DISCLAIMED. IN NO EVENT SHALL THE KRYSALIS PROJECT OR
48  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
49  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
50  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
51  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
52  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
53  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
54  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
55  * SUCH DAMAGE.
56  * ====================================================================
57  */

58 package org.krysalis.barcode.output.svg;
59
60 import org.jdom.Document;
61 import org.jdom.Element;
62 import org.jdom.JDOMException;
63 import org.jdom.Namespace;
64 import org.krysalis.barcode.BarcodeDimension;
65 import org.krysalis.barcode.output.BarcodeCanvasSetupException;
66
67 /**
68  * SVG generating implementation that outputs to a JDOM.
69  *
70  * @author Jeremias Maerki
71  */

72 public class JDOMSVGCanvasProvider extends AbstractSVGGeneratingCanvasProvider {
73
74     private Namespace ns;
75     private Document doc;
76     private Element detailGroup;
77
78     /**
79      * Creates a new JDOMSVGCanvasProvider with namespaces enabled.
80      * @param namespacePrefix the namespace prefix to use, null for no prefix
81      * @throws BarcodeCanvasSetupException if setting up the provider fails
82      */

83     public JDOMSVGCanvasProvider(String JavaDoc namespacePrefix)
84                 throws BarcodeCanvasSetupException {
85         super(namespacePrefix);
86     }
87
88     /**
89      * Creates a new JDOMSVGCanvasProvider.
90      * @param useNamespace Controls whether namespaces should be used
91      * @throws BarcodeCanvasSetupException if setting up the provider fails
92      */

93     public JDOMSVGCanvasProvider(boolean useNamespace)
94                 throws BarcodeCanvasSetupException {
95         super(useNamespace);
96         init();
97     }
98
99     /**
100      * Creates a new JDOMSVGCanvasProvider with default settings (with namespaces,
101      * but without namespace prefix).
102      * @throws BarcodeCanvasSetupException if setting up the provider fails
103      */

104     public JDOMSVGCanvasProvider() throws BarcodeCanvasSetupException {
105         super();
106         init();
107     }
108
109     private void init() {
110         Element svg;
111         if (isNamespaceEnabled()) {
112             if (getNamespacePrefix() != null) {
113                 ns = Namespace.getNamespace(getNamespacePrefix(), SVG_NAMESPACE);
114             } else {
115                 ns = Namespace.getNamespace(SVG_NAMESPACE);
116             }
117         } else {
118             ns = null;
119         }
120         svg = new Element("svg", ns);
121         doc = new Document(svg);
122
123         detailGroup = new Element("g", ns);
124         svg.addContent(detailGroup);
125         detailGroup.setAttribute("style", "fill:black; stroke:none");
126     }
127
128     /**
129      * Returns the JDOM document.
130      * @return the JDOM document
131      */

132     public Document getDocument() {
133         return this.doc;
134     }
135
136     /**
137      * Converts the internal JDOM to a DOM and returns it.
138      * @return the DOM document.
139      */

140     public org.w3c.dom.Document JavaDoc getDOM() {
141         org.jdom.output.DOMOutputter output = new org.jdom.output.DOMOutputter();
142         try {
143             return output.output(this.doc);
144         } catch (JDOMException e) {
145             e.printStackTrace();
146             return null;
147         }
148     }
149
150     /**
151      * Returns the DOM fragment containing the SVG barcode.
152      * @return the DOM fragment
153      */

154     public org.w3c.dom.DocumentFragment JavaDoc getDOMFragment() {
155         org.w3c.dom.Document JavaDoc doc = getDOM();
156         org.w3c.dom.DocumentFragment JavaDoc frag = doc.createDocumentFragment();
157         frag.appendChild(doc.getDocumentElement());
158         return frag;
159     }
160
161     /** @see org.krysalis.barcode.output.CanvasProvider */
162     public void establishDimensions(BarcodeDimension dim) {
163         super.establishDimensions(dim);
164         Element svg = doc.getRootElement();
165         svg.setAttribute("width", addUnit(dim.getWidthPlusQuiet()));
166         svg.setAttribute("height", addUnit(dim.getHeightPlusQuiet()));
167     }
168
169     /** @see org.krysalis.barcode.output.CanvasProvider */
170     public void deviceFillRect(double x, double y, double w, double h) {
171         Element el = new Element("rect", ns);
172         el.setAttribute("x", addUnit(x));
173         el.setAttribute("y", addUnit(y));
174         el.setAttribute("width", addUnit(w));
175         el.setAttribute("height", addUnit(h));
176         detailGroup.addContent(el);
177     }
178
179     /** @see org.krysalis.barcode.output.CanvasProvider */
180     public void deviceJustifiedText(String JavaDoc text, double x1, double x2, double y1,
181                             String JavaDoc fontName, double fontSize) {
182         deviceCenteredText(text, x1, x2, y1, fontName, fontSize, true);
183     }
184                             
185     /** @see org.krysalis.barcode.output.CanvasProvider */
186     public void deviceCenteredText(String JavaDoc text, double x1, double x2, double y1,
187                             String JavaDoc fontName, double fontSize) {
188         deviceCenteredText(text, x1, x2, y1, fontName, fontSize, false);
189     }
190                             
191     /**
192      * Draws centered text.
193      * @param text the text to draw
194      * @param x1 the left boundary
195      * @param x2 the right boundary
196      * @param y1 the y coordinate
197      * @param fontName the name of the font
198      * @param fontSize the size of the font
199      * @param justify true if the text should be justified instead of centered
200      */

201     public void deviceCenteredText(String JavaDoc text, double x1, double x2, double y1,
202                             String JavaDoc fontName, double fontSize, boolean justify) {
203         Element el = new Element("text", ns);
204         el.setAttribute("style", "font-family:" + fontName + "; font-size:"
205                     + fontSize + "pt; text-anchor:middle");
206         el.setAttribute("x", addUnit(x1 + (x2 - x1) / 2));
207         el.setAttribute("y", addUnit(y1));
208         if (justify) {
209             el.setAttribute("textLength", addUnit(x2 - x1));
210         }
211         el.addContent(text);
212         detailGroup.addContent(el);
213
214     }
215
216 }
Popular Tags