java - 使用 Apache Batik 在 SVG 中的 Linux 上设置 Windows 字体

标签 java svg fonts batik

我正在开发一个简单的 Web 应用程序,它提供用于渲染 SVG 图像的 URL。我使用 Apache Batik 库进行 SVG 渲染,但在设置 font-family 时遇到问题。我希望从任何浏览器(主要是 Chrome、FF 和 Edge)和任何操作系统(主要是 Linux 和 Windows)查看时生成的 SVG 看起来都相同(尽可能)。问题是,正如我所见,Batik 使用一些内部逻辑从本地系统加载字体,这会阻止跨平台行为。

更准确地说:我的 Web 应用程序在 Ubuntu Linux 上运行,并且我将 font-family:'DejaVu Sans' 设置为我的图形。当客户端使用Linux时,这非常有效,但在Windows上,显然这种字体不存在。我尝试根据请求中的 User-Agent header 设置 font-family,但是当我设置 font-family:'Verdana'对于 Windows 客户端,Batik 尝试加载“Verdana”字体,但显然失败了。

我尝试设置如下属性:font-family:'DejaVu Sans',Verdana 但 Batik 无法处理以逗号分隔的有效字体系列列表。除了在服务器上安装 Verdana 字体之外,还有什么方法可以解决这个问题吗?

最佳答案

最后,我通过在应用程序中包含字体并使用 GraphicsEnvironment.getLocalGraphicsEnvironment().registerFont(font); 注册它来实现这一目标。这样 Batik 就可以正确地将 'Verdana' 字符串保留在 font-family 属性中。感谢mike-pomax-kamermans寻求有用的建议!

关于java - 使用 Apache Batik 在 SVG 中的 Linux 上设置 Windows 字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35018826/

相关文章:

java - 为什么扫描仪不工作

Java Mail,发送多个附件不起作用

java - getDeclaredConstructors() 返回 java.lang.NullPointerException

javascript - 具有多个矢量图层的 OpenLayers map 使整个页面在 chrome 中闪烁

css - 在 Chrome 中通过字体粗细和字体样式重置 OpenType 设置

java - 在 Java 中转义字符串的最快方法

javascript - 路径上的 D3 事件不起作用

reactjs - 将内联 SVG 作为 React 组件 prop 传递

fonts - 过时的实现如何优雅地处理新版本的 OpenType 字体?

html - CSS3 自定义 Font Face 在 html View 中无法正常工作