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


---------------------------------------------------------------------
To unsubscribe, e-mail: batik-users-unsubscr...@xmlgraphics.apache.org
For additional commands, e-mail: batik-users-h...@xmlgraphics.apache.org

Reply via email to