2010-03-03 20 views
5

J'essaie de générer une image SVG, puis de la transcoder en PNG à l'aide d'Apache Batik. Cependant, je me retrouve avec une image vide et je ne vois pas pourquoi.Obtenir l'image vide lors du transcodage SVG en PNG

J'utilise le Document de SVGDomImplementation comme base pour mon transcodage (pour éviter d'écrire le SVG sur le disque et de le charger à nouveau). Voici un exemple:

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

Mon problème est que l'image résultante est vide et je ne vois pas pourquoi. Des indices?

Répondre

1

Je pense que cela dépend de la façon dont vous créez le document SVG. Qu'est-ce que vous utilisez svgGenerator pour (que je suppose est un SVGGraphics2D)?

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

Si vous avez construit le document SVG en document, alors vous devez passer au constructeur TranscoderInput.

This page a un exemple de pixellisation d'un DOM SVG en JPEG.

+0

Correct, le svgGenerator est un SVGGraphics2D. GetDOMFactory() renvoie le même document/objet que celui que je crée au début de la méthode, donc cela ne fait aucune différence. J'ai déjà été plusieurs fois sur l'exemple JPEG. Peut-être ne suffit-il pas de changer cet exemple en PNG (je n'ai pas testé cet exemple particulier), et peut-être que le transcodeur PNG a besoin d'autres paramètres que je ne vois pas. J'ai résolu mon problème réel (obtenir le SVG dans un fichier PDF correctement) d'une autre manière, donc ce n'est plus nécessaire. – fiskeben