2010-03-03 16 views
5

Estoy tratando de generar una imagen SVG y luego transcodificarla a PNG usando Apache Batik. Sin embargo, termino con una imagen vacía y no puedo ver por qué.Obtener imagen vacía al transcodificar SVG a PNG

Utilizo el documento de SVGDomImplementation como la base para mi transcodificación (para evitar escribir el SVG en el disco y cargarlo de nuevo). Aquí hay un ejemplo:

DOMImplementation domImpl = SVGDOMImplementation.getDOMImplementation(); 
    String namespace = SVGDOMImplementation.SVG_NAMESPACE_URI; 
    Document document = domImpl.createDocument(namespace, "svg", null); 

    //stuff that builds SVG (and works) 

    TranscoderInput transcoderInput = new TranscoderInput(svgGenerator.getDOMFactory()); 
    PNGTranscoder transcoder = new PNGTranscoder(); 
    transcoder.addTranscodingHint(PNGTranscoder.KEY_WIDTH, new Float(svgWidth)); 
    transcoder.addTranscodingHint(PNGTranscoder.KEY_HEIGHT, new Float(svgHeight)); 

    try { 
    File temp = File.createTempFile(key, ".png"); 
    FileOutputStream outputstream = new FileOutputStream(temp); 

    TranscoderOutput output = new TranscoderOutput(outputstream); 

    transcoder.transcode(transcoderInput, output); 
    outputstream.flush(); 
    outputstream.close(); 
    name = temp.getName(); 
    } catch (IOException ioex) { 
    ioex.printStackTrace(); 
    } catch (TranscoderException trex) { 
    trex.printStackTrace(); 
    } 

Mi problema es que la imagen resultante está vacía y no puedo ver por qué. ¿Algún consejo?

Respuesta

1

Creo que depende de cómo esté creando el documento SVG. ¿Para qué estás usando svgGenerator (que supongo que es SVGGraphics2D)?

TranscoderInput transcoderInput = new TranscoderInput(svgGenerator.getDOMFactory()); 

Si ha creado el documento SVG en document, entonces usted debe pasarlo al constructor TranscoderInput.

This page tiene un ejemplo de rasterización de un SVG DOM a un JPEG.

+0

Correcto, el svgGenerator es un SVGGraphics2D. GetDOMFactory() devuelve el mismo documento/objeto que el que creo al comienzo del método, por lo que no hace diferencia. Ya he estado sobre el ejemplo JPEG varias veces. Tal vez no sea suficiente cambiar ese ejemplo a PNG (realmente no probé ese ejemplo en particular), y tal vez el transcodificador PNG necesite alguna configuración extra que no esté viendo. Resolví mi problema real (convirtiendo el SVG en un PDF correctamente) de otra manera, por lo que ya no es necesario. – fiskeben