2015-08-28 69 views
1

我使用Apache Batik rasterizer(Ubuntu上的Java,Oracle JRE 7)将SVG转换为PDF。该SVG包含文本和TTF字体的引用,效果很好,但字体Diehl Deco预期不会呈现:为什么Apache Batik Rasterizer渲染TrueType字体不正确?

预计:

enter image description here

错误:

enter image description here

由于您可以看到“R”流入“A”,因此字距无法正确解释,因为字体本身包含此信息(thx来自@Jongware的评论): R A -> -660T E -> -61

可能的解决方案:

1)我想如果我们能够交换的字体渲染蜡染使用的FreeType它可以工作,因为它在我的自由报办公室作家,其采用的FreeType正确呈现的引擎。

2)我可以将ttf字体转换为SVG字体,在SVG转换为PDF光栅化的情况下可以更好地工作。但到目前为止,我还没有成功。

3)如果有任何工具支持,我可以将SVG内的字体转换为路径。

任何意见或其他解决方案,非常欢迎!谢谢!

+1

很可能是因为Ubuntu的字体渲染器不支持字体的某些* features *。我不完全确定这些功能是正式调用的,但是您所看到的是有条件的字距调整,其中一些字母组​​合可以不同地改变。 – deceze

+0

看起来它会让字距完全错误,大概是因为无论您使用的文本渲染引擎如何解析和显示OpenType字体都没有完全理解。找出您正在使用的文本引擎,并将其更改为更好的内容。 –

+0

Thx们,ubuntu 14确实使用了freetype 2,这与osx使用afaik是一样的。 –

回答

1

找到一个解决方案值得分享:

蜡染光栅使用AWT GlyphVector中(爪哇),用于字体呈现,这似乎不能够呈现字距调整正确的 - 至少对于该字体。

我得到它按预期工作,通过蜡染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` 

以我输入SVG以转换为PDF我引用经由@字体面的字体。在上面的命令的ID是相同的所述一个在所述字体URL的末尾:#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字体中的所有单个字符都可能是问题。

+0

有没有什么办法可以支持给定字体中的所有Unicode? –