2015-08-28 67 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? –