2012-08-07 95 views
8

我正在創建一個爲程序創建模板的Java程序。用戶輸入他們希望在衣服上看到的單詞,系統創建一個PDF模板。要創建模板,我以編程方式創建SVG文檔,然後使用Batik將SVG轉換爲PDF格式。如何在Batik SVG庫中使用自定義字體?

我的客戶現在希望能夠使用自定義字體來創建模板。我想知道是否有可能像Batik代碼轉換器一樣使用像TTF這樣的字體?如果是的話,你如何設置SVG?

回答

5

首先,您需要使用batik的ttf2svg將字體文件從TTF轉換爲SVG,一旦轉換後的文件必須在SVG文檔的「defs」部分添加引用。 這是我做的:

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); 
創建文本元素中設置字體系列就像任何其他字體

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

我接到這篇文章的信息時

http://frabru.de/c.php/article/SVGFonts-usage希望它幫助。

+7

沒有必要的字體轉換爲SVG。蠟染可以使用TrueType字體顯式操作。只需添加一個類似如下的CSS聲明:@ font-face {font-family:'Your Font Family'; src:url('fonts/yourfontfile.ttf')格式('truetype'); } – 2012-11-06 06:55:27

+0

@JiříVypědřík:你能否詳細說明如何使用css在Batik中將自定義字體添加到SVG中?我無法在Google上找到示例。 (實際上添加任何CSS到蠟染幾乎不存在) – 2013-10-06 06:32:21

+0

如果我在一個文件夾中具有所有* .ttf字體,我可以在全局註冊它們,以便它們可用於PNGTranscoder和PDFTranscoder嗎?我一直在玩耍幾天,除了在SVG本身添加'font-face-uri'到本地文件之外,還沒有能夠得到任何東西。到目前爲止,即使使用FOP工作類似的配置,使用'',http://wiki.apache.org/xmlgraphics-fop/SvgNotes/PdfTranscoderTrueTypeEmbedding也不適用於我。 – 2014-07-01 22:40:01

2

只需添加下列元素作爲<svg/>孩子:<style type="text/css">然後,類似於HTML ...