我正在使用Apache Batik光栅化器(Java,Ubuntu上的Oracle JRE 7)将SVG转换为PDF。SVG包含文本和引用ttf字体,效果很好,但是字体Diehl Deco没有按预期呈现:
预期:
不正确:
如您所见,“R”流入“A”,因此字距调整未正确解释,因为字体本身包含此信息(感谢来自@Jongware的评论):R A-
可能的解决方案:
1)我想如果我们可以交换蜡染的字体渲染引擎来使用freetype,它可以在我的Libre Office Writer中正确渲染,它使用freetype。
2)我可以将ttf字体转换为SVG字体,这在SVG的情况下可以更好地PDF光栅化。但是到目前为止我还没有成功。
3)如果有任何工具支持,我可以将SVG中的字体转换为路径。
任何意见或其他解决方案都非常欢迎!谢谢!
找到了一个值得分享的解决方案:
蜡染光栅化器使用AWT GlyphVector(Java)进行字体渲染,这似乎无法正确渲染字距-至少对于这种字体。
我通过batik ttf2svg将ttf字体转换为svg字体,使其按预期工作。其他工具不起作用——至少与蜡染光栅化器结合使用。
我使用以下命令来转换字体:
java -jar /path/to/batik/batik-1.8/batik-ttf2svg-1.8.jar diehl_deco.ttf -o diehl_deco.svg -id DiehlDeco -l 32 -h 20000`
在我输入的转换为pdf的svg中,我通过@font-face引用了字体。上面命令中的id与字体url末尾的id相同:#DiehlDeco
<defs><style type="text/css"><![CDATA[
@font-face {
font-family: 'diehl_deco';
src: url('https://path/to/diehl_deco.svg#DiehlDeco') format('svg');
font-weight: normal;
font-style: normal;
}
]]></style></defs>
选项-l 32
是必不可少的-至少对于这种字体-因为前32个unicode字符与蜡染光栅化器不兼容。如果您的字体根本没有呈现svg字体中的单个字符可能是问题所在。