Кернинг шрифтов OpenType с помощью itext - PullRequest
2 голосов
/ 24 октября 2011

Я использую itext и ColdFusion (java) для записи текстовых строк в PDF-документ. У меня есть шрифты trueType и openType, которые мне нужно использовать. Шрифты TrueType, кажется, работают правильно, но кернинг не используется ни для одного файла шрифтов, заканчивающегося на .otf. Код ниже пишет «Строка 1 текста» в Airstream (OpenType), но кернинг между «T» и «e» отсутствует. Когда этот же шрифт используется в других программах, он имеет кернинг. Я также скачал более новую версию itext, но кернинг все еще не работал. Кто-нибудь знает, как заставить кернинг работать со шрифтами otf в itext?

<cfscript>
pdfContentByte = createObject("java","com.lowagie.text.pdf.PdfContentByte");
BaseFont= createObject("java","com.lowagie.text.pdf.BaseFont");
bf = BaseFont.createFont("c:\windows\fonts\AirstreamITCStd.otf", "" , BaseFont.EMBEDDED);
document = createobject("java","com.lowagie.text.Document").init();
fileOutput = createObject("java","java.io.FileOutputStream").init("c:\inetpub\test.pdf");
writer = createobject("java","com.lowagie.text.pdf.PdfWriter").getInstance(document,fileOutput);
document.open();    
cb = writer.getDirectContent(); 
cb.beginText();
cb.setFontAndSize(bf, 72);
cb.showTextAlignedKerned(PdfContentByte.ALIGN_LEFT,"Line 1 of Text",0,72,0);
cb.endText();
document.close();

bf.hasKernPairs(); //returns NO
bf.getClass().getName(); //returns "com.lowagie.text.pdf.TrueTypeFont"
</cfscript>

Ответы [ 2 ]

1 голос
/ 17 мая 2012

в соответствии с так называемой спецификацией: http://www.microsoft.com/typography/otspec/kern.htm Шрифты OpenType ™, содержащие контуры CFF, не поддерживаются таблицей 'kern' и должны использовать таблицу макетов OpenType 'GPOS'.

Я проверилисточник, реализация IText только проверяет ядро ​​на наличие шрифта TrueType, но не читает таблицу GPOS, поэтому внутренние ядра должны быть пустыми, а hasKernPairs должен возвращать false.

Итак, есть 2 способа решения:

  • избавьтесь от используемого вами otf:)
  • исправьте истинный шрифт, прочитав таблицу GPosition
  • подождите, я обрабатываю содержимое cff, ноPDF не является обязательным из моих :), но не исключает возможности:)
0 голосов
/ 27 октября 2011

Посмотрите на эту тему о Как использовать шрифты открытого типа в Java . Здесь указано, что otf не поддерживается Java (даже с iText). Поддержка Otf зависит от версии SDK и ОС.

В качестве альтернативы вы можете использовать FontForge , который преобразует otf в ttf.

...