2012-08-07 8 views
8

Sto lavorando a un programma Java che crea modelli per i vestiti. L'utente inserisce la parola che desidera vedere sull'elemento di abbigliamento e il sistema crea un modello PDF. Per creare il modello, creo un documento SVG in modo programmatico quindi utilizzo Batik per transcodificare SVG nel formato PDF.Come utilizzo un font personalizzato con la libreria SVG di Batik?

Il mio cliente ora vuole essere in grado di utilizzare caratteri personalizzati per creare i modelli. Mi stavo chiedendo se è possibile utilizzare i caratteri come un TTF con il transcoder Batik? In tal caso, come procedete con la configurazione di SVG?

risposta

5

Per prima cosa è necessario trasformare il file del font da TTF a SVG con batik's ttf2svg, una volta ottenuto il file convertito, è necessario aggiungere un riferimento nella sezione "defs" del documento SVG. questo è come ho fatto:

Element defs = doc.createElementNS(svgNS, "defs"); 

Element fontface = doc.createElementNS(svgNS, "font-face"); 
fontface.setAttributeNS(null, "font-family", "DroidSansRegular"); 

Element fontfacesrc = doc.createElementNS(svgNS, "font-face-src"); 
Element fontfaceuri = doc.createElementNS(svgNS, "font-face-uri"); 

fontfaceuri.setAttributeNS(svgNS, "xlink:href", "fonts/DroidSans-webfont.svg#DroidSansRegular"); 

Element fontfaceformat = doc.createElementNS(svgNS, "font-face-format"); 
fontfaceformat.setAttributeNS(svgNS, "string", "svg"); 

fontfaceuri.appendChild(fontfaceformat); 
fontfacesrc.appendChild(fontfaceuri); 
fontface.appendChild(fontfacesrc); 
defs.appendChild(fontface); 
svgRoot.appendChild(defs); 

quando si crea l'elemento di testo impostare la famiglia di caratteri proprio come qualsiasi altro tipo di carattere

Element txtElem = doc.createElementNS(svgNS, "text"); 

txtElem.setAttributeNS(svgNS, "style", "font-family:DroidSansRegular;font-size:" + fontsize + ";stroke:#000000;#fill:#00ff00;"); 
txtElem.setTextContent("some text"); 
svgRoot.appendChild(txtElem); 

ho ottenuto le informazioni da questo articolo: http://frabru.de/c.php/article/SVGFonts-usage Speranza che aiuta.

+7

Non c'è bisogno di convertire il tipo di carattere per SVG. Batik può operare esplicitamente con i font TrueType. Basta aggiungere una dichiarazione CSS simile a questa: @ font-face {font-family: 'Your Font Family'; src: url ('fonts/yourfontfile.ttf') format ('truetype'); } –

+0

@ Jiří Vypědřík: Potresti approfondire come usare css per aggiungere un font personalizzato a SVG in Batik? Non riesco a trovare un esempio su google. (in realtà l'aggiunta di qualsiasi css a Batik è quasi inesistente) –

+0

Se ho tutti i caratteri * .ttf in una singola cartella, posso registrarli globalmente in modo che siano disponibili sia per PNGTranscoder che PDFTranscoder? Ho giocato per giorni e non sono ancora riuscito a far funzionare nulla se non aggiungendo un 'font-face-uri' a un file locale nel SVG stesso. Finora, http://wiki.apache.org/xmlgraphics-fop/SvgNotes/PdfTranscoderTrueTypeEmbedding non ha funzionato con me quando si utilizzava '' anche se la stessa configurazione con solo la FOP funzionava. –

2

basta aggiungere il seguente elemento come un figlio di <svg/>: <style type="text/css"> Poi, simile all'HTML ...