2011-10-24 74 views
2

我使用的iText和ColdFusion(Java)來寫文本字符串到PDF文檔字距。我有我需要使用的trueType和openType字體。 TrueType字體似乎一切正常,但字距不被用於雜項文件結尾的任何字體文件。下面的代碼在Airstream的(的OpenType)寫道「文本的行1」,但「T」和「e」之間的字距丟失。當其他程序使用相同的字體時,它具有字距。我也下載了更新版本的itext,但字距依然不起作用。有誰知道如何在itext中使用otf字體進行字距調整?OpenType字體與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> 

回答

1

根據所謂的規範:http://www.microsoft.com/typography/otspec/kern.htm 包含CFF輪廓的OpenType™字體不被'kern'表支持,並且必須使用'GPOS'OpenType佈局表。

我檢查了源,iText的實現只檢查TrueType字體科恩,不讀GPOS表可言,因此內部kernings必須是空的,而hasKernPairs必須返回false。

因此,有有2個辦法solove:

  • 擺脫你使用:)
  • 通過讀取GPosition表
  • 等待我修補truetypefont的OTF的,我處理cff的內容,但PDF是永遠是我的選擇:)但不排除的可能性:)