首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用itext调整OpenType字体字距

使用itext调整OpenType字体字距
EN

Stack Overflow用户
提问于 2011-10-25 03:18:36
回答 2查看 2.7K关注 0票数 2

我正在使用itext和ColdFusion (java)将文本字符串写入PDF文档。我需要使用trueType和openType字体。Truetype字体似乎工作正常,但字距调整未用于任何以.otf结尾的字体文件。下面的代码在Airstream (OpenType)中编写了“第1行文本”,但是缺少"T“和"e”之间的字距调整。当在其他程序中使用相同的字体时,它具有字距调整。我还下载了一个更新版本的itext,但字距调整仍然不起作用。有人知道如何在itext中使用字距调整来处理otf字体吗?

代码语言:javascript
复制
<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>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-17 05:49:03

根据所谓的规范:'kern‘表不支持包含CFF轮廓的http://www.microsoft.com/typography/otspec/kern.htm OpenType字体,必须使用'GPOS’OpenType布局表。

我检出了源代码,IText实现只检查内核中的the类型字体,根本不读取GPOS表,因此内部内核必须为空,并且hasKernPairs必须返回false。

因此,有两种方法可以解决问题:

  • 去掉你使用的otf:)
  • 通过读取GPosition表来修补真字体
  • 等待我,我正在处理cff内容,但PDF是可选的,但不排除这种可能性:)
票数 1
EN

Stack Overflow用户

发布于 2011-10-27 21:58:36

看看这篇关于How to use Open Type Fonts in Java的帖子。这里说明java不支持otf (甚至iText也不支持)。Otf支持取决于sdk版本和操作系统。

或者,您可以使用FontForge,它将otf转换为ttf。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7880714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档