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 中获取颜色信息

获取PDFBox中字符的字体高度

如何使用 pdfbox 用特定字体填写 PDF 表单?

基于pdfbox实现的pdf添加文字水印工具

使用Apache pdfbox: 从Linux安装字体到log4j设置日志级别

如果在 PDF 表单中多次出现,Java PDFBox 不会保持字段的字体外观