2012-08-07 4 views
8

Ich arbeite an einem Java-Programm, das Vorlagen für Kleidung erstellt. Der Benutzer gibt das Wort ein, das er auf dem Kleidungsstück sehen möchte, und das System erstellt eine PDF-Vorlage. Um die Vorlage zu erstellen, erstelle ich ein SVG-Dokument programmatisch und verwende dann Batik, um das SVG in das PDF-Format umzuwandeln.Wie verwende ich eine benutzerdefinierte Schriftart mit der Batik SVG-Bibliothek?

Mein Client möchte nun benutzerdefinierte Schriftarten zum Erstellen der Vorlagen verwenden können. Ich frage mich, ob es möglich ist, Schriftarten wie eine TTF mit dem Batik-Transcoder zu verwenden? Wenn ja, wie geht es bei der Einrichtung des SVG?

Antwort

5

Zuerst müssen Sie die Schriftart-Datei von TTF in SVG mit Batiks ttf2svg transformieren, sobald Sie die konvertierte Datei müssen Sie Verweis hinzufügen in der "Defs" -Abschnitt Ihres SVG-Dokuments. das ist, wie ich es tat:

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

wenn das Textelement die Schriftfamilie wie jede andere Schriftart

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

Ich habe die Informationen aus diesem Artikel Set zu erstellen: http://frabru.de/c.php/article/SVGFonts-usage hoffen, es hilft.

+7

keine Notwendigkeit, die Schrift zu SVG zu konvertieren. Batik kann explizit mit TrueType-Schriften arbeiten. Fügen Sie einfach eine ähnliche CSS-Deklaration hinzu: @ font-face {font-family: 'Your Font Family'; src: url ('fonts/yourfontfile.ttf') format ('truetype'); } –

+0

@ Jiří Vypědřík: Könnten Sie näher erläutern, wie Sie mithilfe von CSS eine benutzerdefinierte Schriftart zu SVG in Batik hinzufügen können? Ich kann kein Beispiel bei Google finden. (Das Hinzufügen von CSS zu Batik ist fast nicht existent.) –

+0

Wenn ich alle * .ttf-Fonts in einem einzigen Ordner habe, kann ich sie global registrieren, damit sie sowohl für PNGTranscoder als auch für PDFTranscoder verfügbar sind? Ich habe tagelang herumgespielt und war noch nicht in der Lage, etwas zum Laufen zu bringen, außer dem Hinzufügen einer 'font-face-uri' zu einer lokalen Datei in der SVG selbst. Bis jetzt funktionierte http://wiki.apache.org/xmlgraphics-fop/SvgNotes/PdfTranscoderTrueTypeEmbedding nicht für mich, wenn ich '' benutzte, sogar thoughha ähnliche Konfiguration mit nur FOP funktionierte. –

2

einfach das folgende Element als Kind <svg/> hinzu: <style type="text/css"> Dann ähnlich wie HTML ...

Verwandte Themen