我正在开发一个简单的Web应用程序,它为渲染SVG图像提供了URL。我使用Apache Batik库进行SVG渲染,并且我在设置font-系列
时遇到了问题。我希望从任何浏览器(主要是Chrome、FF和Edge)和任何OS(主要是Linux和Windows)查看时,生成的SVG看起来都是相同的。问题是,正如我所看到的,Batik使用了一些从本地系统加载字体的内部逻辑,这阻止了跨平台行为。
更准确地说:我的webapp运行在UbuntuLinux上,我将font-home:'DejaVu Sans'
设置为我的图形。当客户端使用Linux时,这非常有效,但在Windows上,显然这种字体不存在。我试图根据请求中的User-Agent
头设置font-home
,但当我为Windows客户端设置font-home:'Verdana'
时,Batik试图加载'Verdana'字体,显然失败了。
我尝试这样设置属性:font-home:'DejaVu Sans', Verdana
但是Batik无法处理有效字体系列的逗号分隔列表。除了在服务器上安装Verdana字体之外,还有什么方法可以解决这个问题吗?
最后,我通过在我的应用程序中包含字体并将其注册到Graphics环境. getLocalGraphics环境().stersterFont(字体);
来实现它。这样Batik就可以正确地将'Verdana'
字符串保存在font-系列
属性中。感谢mike-pomax-kamermen的有用建议!