我如何在Batik SVG库中使用自定义字体?

Ben*_*ley 9 java svg truetype batik

我正在研究一个为衣服创建模板的Java程序.用户输入他们想要在服装项目上看到的单词,系统创建PDF模板.要创建模板,我以编程方式创建SVG文档,然后使用Batik将SVG转码为PDF格式.

我的客户现在希望能够使用自定义字体来创建模板.我想知道是否有可能像使用Batik转码器的TTF一样使用字体?如果是这样,您如何设置SVG?

Hug*_*sti 7

首先,您需要使用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);
Run Code Online (Sandbox Code Playgroud)

在创建文本元素时,设置字体系列就像任何其他字体一样

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);
Run Code Online (Sandbox Code Playgroud)

我从这篇文章获得了信息:http://frabru.de/c.php/article/SVGFonts-usage希望它有所帮助.

  • 无需将字体转换为SVG.Batik可以使用TrueType字体显式操作.只需添加类似于此的CSS声明:@ font-face {font-family:'Your Font Family'; src:url('fonts/yourfontfile.ttf')格式('truetype'); } (7认同)