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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.