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?
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