【问题标题】:ITextRenderer embedding font not working for base 14 fontsITextRenderer 嵌入字体不适用于 base 14 字体
【发布时间】:2015-03-22 00:30:36
【问题描述】:

我需要使用 Java 中的速度和 ITextRenderer 将所有字体嵌入到我的 pdf 中。

大多数字体都可以正常使用

renderer.getFontResolver().addFont(
getClass().getResource("fonts/tahoma.ttf").toExternalForm(), true);

我对 Times-Roman 和 Helvetica 有相同的代码,但是生成的 pdf 没有嵌入这两个。我确保字体名称与 PDF 文件属性中缺失字体的名称相匹配。

【问题讨论】:

    标签: java fonts pdf-generation itext


    【解决方案1】:

    飞碟是基于 iText 构建的产品。虽然 iText 公司不认可使用飞碟,但我会破例回答这个问题(我是 iText Software 的 CEO)。

    您指的是过去被称为 Base 14 字体的字体。今天,这些字体被称为 Standard Type 1 字体。

    与 TrueType 和 OpenType 字体相反,Type 1 字体在一组两个文件中进行描述。每种字体都有:

    1. Adobe Font Metrics (AFM) 文件。此文件包含在不嵌入字体的情况下使用字体所需的所有指标。
    2. 打印机字体二进制 (PFB) 文件。此文件包含在字体中绘制每个字形所需的语法。这是嵌入字体时需要的文件。

    根据 PDF 规范中的定义,每个查看器都应该能够呈现 14 种标准 Type 1 字体。这就是人们通常不嵌入字体的原因(除非有特定原因要嵌入字体。PDF/A 合规性就是其中之一)。

    对于 iText,iText 附带 14 个 AFM 文件。 iText 可以这样做,因为 AFM 文件的许可证允许这样做。 iText 不附带相应的 PFB 文件。如果是这样,那将是非法的,因为 PFB 文件不是免费提供的。因此,即使您将 embedded 参数设置为 true,iText 也永远不会嵌入 14 种 Standard Type 1 字体。嵌入字体(如 Helvetica)的唯一方法是提供字体程序。即:不仅是 iText 附带的 AFM 文件,还有知道如何绘制字形的 PFB 文件。

    使用飞碟时要非常小心:如果您将它与 iText 2 结合使用,则适用:https://stackoverflow.com/questions/25696851/can-itext-2-1-7-or-earlier-can-be-used-commercially 如果您将它与 iText 5 结合使用,那么如果您不根据 AGPL 分发自己的代码,则可能需要商业许可。

    【讨论】:

      【解决方案2】:

      来自Acrobat Help

      只有当字体供应商的设置允许嵌入时,才能嵌入字体。

      其他字体(不起作用)不允许嵌入。

      【讨论】:

        猜你喜欢
        • 2012-07-31
        • 2023-03-08
        • 1970-01-01
        • 2014-07-02
        • 1970-01-01
        • 2014-07-07
        • 2023-04-10
        • 1970-01-01
        • 2020-04-24
        相关资源
        最近更新 更多