2013-08-01 33 views
6

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: enter image description here

Ma quando converto SVG usando Apache Batik, l'immagine convertita sembra diversa. Il PNG convertito Apache Batik è: enter image description here

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.

risposta

4

È necessario installare i font TrueType Microsoft e renderli disponibili alla macchina virtuale java impostando la variabile di ambiente JAVA_FONTS.

wget http://www.my-guides.net/en/images/stories/fedora12/msttcore-fonts-2.0-3.noarch.rpm 

rpm -ivh msttcore-fonts-2.0-3.noarch.rpm 

Aprire /etc/bashrc e aggiungere in seguito alla fine del file

JAVA_FONTS=/usr/share/fonts/msttcore 

export JAVA_FONTS 

http://www.itzgeek.com/how-tos/linux/centos-how-tos/how-to-install-microsoft-truetype-fonts-in-centos-6-rhel-6.html#axzz2aibHZaOI