我正在創建一個爲程序創建模板的Java程序。用戶輸入他們希望在衣服上看到的單詞,系統創建一個PDF模板。要創建模板,我以編程方式創建SVG文檔,然後使用Batik將SVG轉換爲PDF格式。如何在Batik SVG庫中使用自定義字體?
我的客戶現在希望能夠使用自定義字體來創建模板。我想知道是否有可能像Batik代碼轉換器一樣使用像TTF這樣的字體?如果是的話,你如何設置SVG?
我正在創建一個爲程序創建模板的Java程序。用戶輸入他們希望在衣服上看到的單詞,系統創建一個PDF模板。要創建模板,我以編程方式創建SVG文檔,然後使用Batik將SVG轉換爲PDF格式。如何在Batik SVG庫中使用自定義字體?
我的客戶現在希望能夠使用自定義字體來創建模板。我想知道是否有可能像Batik代碼轉換器一樣使用像TTF這樣的字體?如果是的話,你如何設置SVG?
首先,您需要使用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);
我接到這篇文章的信息時
只需添加下列元素作爲<svg/>
孩子:<style type="text/css">
然後,類似於HTML ...
沒有必要的字體轉換爲SVG。蠟染可以使用TrueType字體顯式操作。只需添加一個類似如下的CSS聲明:@ font-face {font-family:'Your Font Family'; src:url('fonts/yourfontfile.ttf')格式('truetype'); } – 2012-11-06 06:55:27
@JiříVypědřík:你能否詳細說明如何使用css在Batik中將自定義字體添加到SVG中?我無法在Google上找到示例。 (實際上添加任何CSS到蠟染幾乎不存在) – 2013-10-06 06:32:21
如果我在一個文件夾中具有所有* .ttf字體,我可以在全局註冊它們,以便它們可用於PNGTranscoder和PDFTranscoder嗎?我一直在玩耍幾天,除了在SVG本身添加'font-face-uri'到本地文件之外,還沒有能夠得到任何東西。到目前爲止,即使使用FOP工作類似的配置,使用'',http://wiki.apache.org/xmlgraphics-fop/SvgNotes/PdfTranscoderTrueTypeEmbedding也不適用於我。 –
2014-07-01 22:40:01