2010-03-03 9 views
5

Sto cercando di generare un'immagine SVG e poi transcodificarlo in PNG usando Apache Batik. Tuttavia, finisco con un'immagine vuota e non riesco a capire perché.ottenere l'immagine vuoto quando la transcodifica SVG in PNG

Uso il documento da SVGDomImplementation come base per la mia transcodifica (per evitare di scrivere l'SVG sul disco e caricarlo di nuovo). Ecco un esempio:

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(); 
    } 

mio problema è che l'immagine risultante è vuota e non riesco a capire perché. Qualche suggerimento?

risposta

1

penso che dipende da come si sta creando il documento SVG. Che cosa stai usando svgGenerator per (che presumo sia un SVGGraphics2D)?

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

Se avete costruito il documento SVG in document, allora si dovrebbe passare al costruttore TranscoderInput.

This page ha un esempio di rasterizzazione di un DOM SVG in JPEG.

+0

corretta, lo svgGenerator è uno SVGGraphics2D. GetDOMFactory() restituisce lo stesso documento/oggetto di quello che ho creato all'inizio del metodo, quindi non fa alcuna differenza. Sono già stato sopra l'esempio JPEG più volte. Forse non è sufficiente cambiare quell'esempio in PNG (non ho davvero provato questo particolare esempio), e forse il transcoder PNG ha bisogno di altre impostazioni aggiuntive che non vedo. ho risolto il mio problema reale (ricevendo lo SVG in un file PDF correttamente) in un altro modo, quindi questo non è necessario più. – fiskeben