我正在使用itext和ColdFusion (java)将文本字符串写入PDF文档。我需要使用trueType和openType字体。Truetype字体似乎工作正常,但字距调整未用于任何以.otf结尾的字体文件。下面的代码在Airstream (OpenType)中编写了“第1行文本”,但是缺少"T“和"e”之间的字距调整。当在其他程序中使用相同的字体时,它具有字距调整。我还下载了一个更新版本的itext,但字距调整仍然不起作用。有人知道如何在itext中使用字距调整来处理otf字体吗?
<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>发布于 2012-05-17 05:49:03
根据所谓的规范:'kern‘表不支持包含CFF轮廓的http://www.microsoft.com/typography/otspec/kern.htm OpenType字体,必须使用'GPOS’OpenType布局表。
我检出了源代码,IText实现只检查内核中的the类型字体,根本不读取GPOS表,因此内部内核必须为空,并且hasKernPairs必须返回false。
因此,有两种方法可以解决问题:
发布于 2011-10-27 21:58:36
看看这篇关于How to use Open Type Fonts in Java的帖子。这里说明java不支持otf (甚至iText也不支持)。Otf支持取决于sdk版本和操作系统。
或者,您可以使用FontForge,它将otf转换为ttf。
https://stackoverflow.com/questions/7880714
复制相似问题