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

时间:2015-01-23 02:05:26

标签: java fonts pdf-generation itext

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

大多数字体都可以正常运行,如

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

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

2 个答案:

答案 0 :(得分:2)

来自Acrobat Help

  

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

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

答案 1 :(得分:2)

Flying Saucer是一款建立在iText之上的产品。虽然iText公司不赞同使用飞碟,但我会例外并回答这个问题(我是iText软件的首席执行官)。

您指的是以前称为Base 14字体的字体。今天,这些字体被称为标准类型1字体。

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

  1. Adob​​e字体指标(AFM)文件。此文件包含使用字体而不嵌入字体所需的所有指标。
  2. 打印机字体二进制(PFB)文件。此文件包含在字体中绘制每个字形所需的语法。这是嵌入字体时您需要的文件。
  3. 根据PDF规范的定义,每个查看器都应该能够呈现14种标准类型1字体。这就是为什么人们通常不嵌入它们(除非有特定的理由嵌入字体.PDF / A合规是其中一个原因)。

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