2015-08-28 2 views
1

Я использую Apache Batik rasterizer (Java, Oracle JRE 7 на Ubuntu) для преобразования SVG в PDF. SVG содержит текст и ссылки TTF шрифтов, который работает хорошо, но шрифт Diehl Deco не делает, как и ожидалось:Почему Rasterizer Apache Batik визуально отображает шрифт TrueType?

Ожидаемые:

enter image description here

Неправильно:

enter image description here

Как вы можете увидеть, что «R» втекает в «A», поэтому кернинг не интерпретируется правильно, так как сам шрифт содержит эту информацию (thx к комментарию от @Jongware): R A -> -660, T E -> -61

Возможные решения:

1) Я думаю, что если бы мы могли обменять шрифт рендеринга батика, чтобы использовать FreeType он может работать, как он правильно делает в моем Libre Office Writer, которая использует FreeType.

2) Я мог бы преобразовать шрифт ttf в шрифт SVG, который мог бы работать лучше в этом случае при растрировании SVG в PDF. Но пока я не увенчался успехом.

3) Я мог бы преобразовать шрифты внутри SVG в пути, если какие-либо инструменты поддерживают эту функцию.

Любые комментарии или другие решения приветствуются! Благодаря!

+1

Скорее всего, поскольку средство визуализации шрифтов Ubuntu не поддерживает определенные * функции * шрифта. Я не совсем уверен, что эти функции официально называются, но то, что вы смотрите, - это нечто вроде условного кернинга, в котором некоторым комбинациям букв допускается другое. – deceze

+0

Похоже, что кернинг совершенно не прав, предположительно потому, что любой механизм рендеринга текста, на который вы полагаетесь, не имеет полного понимания того, как анализировать и отображать шрифты OpenType. Узнайте, какой текстовый движок вы используете, и измените его для чего-то лучшего. –

+0

Thx guys, ubuntu 14 использует freetype 2, который является тем же самым osx использует afaik. –

ответ

1

Найденный стоит совместного решения:

Батик растеризации использует AWT GlyphVector (Java) для шрифта рендеринга, который не кажется, способен оказывать кернинг правильно - по крайней мере, для этого шрифта.

Я получил работу как ожидалось, преобразовывая шрифт ttf в шрифт svg через batik ttf2svg. Другие инструменты не работали - по крайней мере, в сочетании с ратификатором батика.

Я использовал следующую команду, чтобы преобразовать шрифт:

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 я ссылкой шрифта через @ шрифт-грани. Идентификатор в команде выше такой же, как тот, в конце 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 юникод символов не совместимы с батик растеризатор. Если ваш шрифт не отображается вообще, единственным символом в шрифте svg может быть проблема.

+0

Есть ли способ поддержать, все Unicode в заданных шрифтах? –

Смежные вопросы