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

标签 java svg truetype batik

我正在开发一个为衣服创建模板的 Java 程序。用户在衣服上输入他们想看到的词,系统会创建一个 PDF 模板。为了创建模板,我以编程方式创建了一个 SVG 文档,然后使用 Batik 将 SVG 转码为 PDF 格式。

我的客户现在希望能够使用自定义字体来创建模板。我想知道 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);

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

关于java - 我如何在 Batik SVG 库中使用自定义字体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11851821/

相关文章:

java - 集合框架的HashSet如何识别重复对象? Hashcode 和 equals 如何处理自定义对象?

javascript - 使用 D3 在鼠标位置单击时绘制圆圈

html - 在 SVG 中居中图像

c++ - Symbian C++ - 在您的应用程序中使用 TTF 字体?

javascript - 是否可以使用javascript加载truetype字体

java - 如何在java中声明一个辅助方法,在本地使用能够引用变量

java - Java 中的垃圾回收是如何完成的,它与 .net 相比如何?

java - 检查玩家是否可以在所述位置放置方 block

html - 存储 svg 图标的最佳实践?

css - CSS3中的这个字体是如何嵌入到css文件中的?