PDFBox 2.0 和 TTC 字体
Posted
技术标签:
【中文标题】PDFBox 2.0 和 TTC 字体【英文标题】:PDFBox 2.0 and TTC Fonts 【发布时间】:2016-01-07 17:52:40 【问题描述】:由于 TTC 支持的可用性,我正在尝试使用 PDFBox 2.0(20151009 的快照)。但是我还没有找到任何关于如何使用这个功能的文档。 我在这里找到了一张票 https://issues.apache.org/jira/browse/PDFBOX-2752 并找到了如何加载 TTC 文件:
InputStream is = MyClass.class.getResourceAsStream("font.ttc");
TrueTypeCollection coll = new TrueTypeCollection(is);
但我不知道如何将 TrueTypeFont 嵌入到我的 PDDocument 中。 在 PDFBox 1.8 中,我使用了类似于以下内容的内容:
public String addFont(String key, PDFont font)
PDResources res = pdfForm.getDefaultResources();
if (res == null)
res = new PDResources();
String fontName = res.addFont(font);
pdfForm.setDefaultResources(res);
return fontName;
但知道我有一个 TrueTypeFont 而不是 PDFont。如何将 TrueTypeFont “转换”为 PDFont ?还是我用错了东西?
谢谢
【问题讨论】:
这有点令人困惑......你提到的问题是关于在计算机上使用 TTC 文件来改进渲染。你在文中的问题是不同的,它询问如何使用 TT 字体。后来它询问如何转换字体。所以这是三个不同的问题,我不知道你真正想做什么。如果要嵌入普通的 TT 字体(.ttf 文件),请参见 EmbeddedFonts.java 示例。 对不起,如果我误导了。我有一个 TTC 文件,我想将这组 TTF 文件嵌入到 PDDocument 中。 您不能嵌入整个文件,因为 PDF 本身没有 TTC 的概念。 (参见adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/… 中的 9.5)。我尝试的是:获取 TrueTypeCollection.getFonts(),选择字体名称,然后使用 getOriginalData() 返回它的 inputStream。然后,PDType0Font.load() 可以使用那个。但是它没有用,我得到 IOException: head is required :-( 所以你的 B 计划是***.com/questions/15455895/… issues.apache.org/jira/browse/PDFBOX-3018 带来了改进,您现在可以将 TrueTypeFont 传递给 PDType0Font.load()。请在此处提供反馈,它是如何为您工作的。 现在还有一个方便的方法 TrueTypeCollection.getFontByName(fontName)。请提供一些对您有用的反馈。 【参考方案1】:这是全新的 (https://issues.apache.org/jira/browse/PDFBOX-3018),将在即将发布的 2.0 版本中(但不在 RC1 中)。下面是windows的示例代码:
PDFont font = PDType0Font.load(document, new TrueTypeCollection(new File("c:/windows/fonts/MSGothic.ttc")).getFontByName().get("MS-Gothic"), true);
【讨论】:
以上是关于PDFBox 2.0 和 TTC 字体的主要内容,如果未能解决你的问题,请参考以下文章
PDFBox 2.0:在 TextStripper 中获取颜色信息