gpt4 book ai didi

java - ITextRenderer 嵌入字体不适用于 base 14 字体

转载 作者:行者123 更新时间:2023-11-29 03:13:15 24 4
gpt4 key购买 nike

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

大多数字体都可以正常工作,例如

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

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

最佳答案

Flying Saucer 是一款基于 iText 构建的产品。尽管 iText 公司不认可使用 Flying Saucer,但我会破例回答这个问题(我是 iText Software 的 CEO)。

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

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

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

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

至于 iText,iText 附带 14 个 AFM 文件。 iText 可以这样做,因为 AFM 文件的许可证允许这样做。 iText 不附带相应的 PFB 文件。如果这样做,那将是非法的,因为 PFB 文件不是免费提供的。因此,iText 永远不会嵌入 14 种标准 Type 1 字体,即使您将 embedded 参数设置为 true。嵌入字体(如 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 分发自己的代码,则可能需要商业许可。

关于java - ITextRenderer 嵌入字体不适用于 base 14 字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28101927/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com