Sto avendo un problema di PNG convertito usando Apache Batik è diverso quando c'è un testo con una famiglia di font diversa, come Arial. Il problema si verifica nell'ambiente in cui Cent OS 6 in esecuzione Tomcat 7 e Java 6.Il testo da SVG a PNG non viene visualizzato correttamente - Carattere Arial
Il codice Java utilizzato per convertire in formato SVG in PNG è:
// Convert the SVG image to png and send back
PNGTranscoder transcoder = new PNGTranscoder();
//
TranscoderInput input = new TranscoderInput(new ByteArrayInputStream(svgImage));
outStream = new ByteArrayOutputStream();
TranscoderOutput output = new TranscoderOutput(outStream);
// Transcode the given SVG
transcoder.transcode(input, output);
outStream.flush();
pngImage = outStream.toByteArray();
Il file in formato SVG ho intenzione di convertire in PNG è :
<svg version="1.1" x="0" y="0" id="hjtqebzv1" width="610" height="240" xmlns="http://www.w3.org/2000/svg" xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<linearGradient id="LFFFFFF0" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" style="stop-color:#FFFFFF;stop-opacity:0.8"/>
<stop offset="100%" style="stop-color:#FAFAFA;stop-opacity:1"/>
</linearGradient>
</defs>
<g id="hjtqebzv-o1" transform="translate(5,5)">
<rect x="1" y="1" width="578" height="20" fill="url(#LFFFFFF0)" stroke="#5e5ca7" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/>
<text x="1" y="1" width="578" height="19" >
<tspan x="2" y="14" style="font-family:Arial;font-size:12px;fill:#000000;">This is a test text for testing text overlapping in the rectangle when convert the svg to PNG using SVG-Batik</tspan>
</text>
</g>
</svg>
Quando apro il file SVG in browser Firefox si visualizza correttamente come indicato nella immagine qui sotto:
Ma quando converto SVG usando Apache Batik, l'immagine convertita sembra diversa. Il PNG convertito Apache Batik è:
In Windows 7 con tomcat 7 e Java 7, l'immagine generata è identica allo SVG originale.
Come il server Cent OS dà l'immagine di testo incasinata, ritengo che il carattere Arial non sia disponibile per l'applicazione tomcat/java e che sia necessario caricarlo manualmente. In tal caso, preferisco avere un consiglio per caricarli in un modo comune dalla posizione del sistema operativo sottostante (posizione del font del sistema operativo) senza alcuna modifica al file SVG.