Re: generating png and pdf files
Jeremias Maerki <[email protected]>
| Newsgroups | gmane.text.xml.batik.user |
|---|---|
| Message-ID | <[email protected]> |
Hi Joris,
you obviously already have the code that paints against a Graphics2D
object. You use SVGGraphics2D to produce SVG.
For PNG and PDF you could, of course, use Batik's transcoders to convert
the SVG to PNG and PDF:
http://xmlgraphics.apache.org/batik/using/transcoder.html
But that would be inefficient because it requires two steps.
To create a PNG directly, create a BufferedImage and request a
Graphics2D from it:
Graphics2D g2d = (Graphics2D)bufImage.getGraphics();
// Print to the SVG Graphics2D object
graphComponent.getGraphControl().print(g2d);
Then use ImageIO to write the BufferedImage to a PNG file. See here for
ideas:
http://stackoverflow.com/questions/665406/how-to-make-a-color-transparent-in-a-bufferedimage-and-save-as-png
For PDF you can try the org.apache.fop.svg.PDFDocumentGraphics2D from
Apache FOP. Here's a usage example:
http://markmail.org/message/6s6us2hf34h2q3mv
PDFDocumentGraphics2D is also used by the PDFTranscoder for Batik to
create PDF from SVG.
HTH
On 13.04.2011 19:39:50 Joris Kinable wrote:
> Dear,
>
> I have a mxGraphComponent which basically is a
> javax.swing.JScrollPane. Objective is to print this mxGraphComponent
> to a file in the following 3 formats: SVG, PDF, PNG. The images in the
> .SVG and .PDF files should be scalable i.e. vectorized. The following
> code works great for printing the .SVG file:
>
> private void batikTest(mxGraphComponent graphComponent){
> // Get a DOMImplementation
> DOMImplementation domImpl =
> GenericDOMImplementation.getDOMImplementation();
>
> // Create an instance of org.w3c.dom.Document
> Document document = domImpl.createDocument(null, "svg", null);
>
> // Create an instance of the SVG Generator
> SVGGraphics2D svgGenerator = new SVGGraphics2D(document);
>
> // Print to the SVG Graphics2D object
> graphComponent.getGraphControl().print(svgGenerator);
>
> boolean useCSS = false;
>
> Writer out;
> try {
> out=new FileWriter(new File(OUTPUTDIR+fileName+"_batik.SVG"));
> svgGenerator.stream(out, useCSS);
> } catch (Exception e) {
> e.printStackTrace();
> }
> System.out.println("Batik svg printed");
> }
>
> Is there a convenient way to generate the .PDF and .PNG files too
> using this code? I can't really find how to do that within the code.
> There is a description on how to externally convert the generated .SVG
> file to a pdf (http://xmlgraphics.apache.org/batik/tools/rasterizer.html)
> but I would like to do this within the code, without having to call
> an external tool.
>
> Thnx,
>
> Joris
Jeremias Maerki