使用iText

时间:2015-09-08 11:58:46

标签: pdf fonts itext partial

我被要求将部分字体包含在pdf中。 我想我会使用iText,我发现如何嵌入字体,但我发现没有关于部分嵌入的线索。

有人知道部分嵌入是否是自动的?或者iText可能没有此功能?

谢谢。

1 个答案:

答案 0 :(得分:2)

iText何时嵌入完整字体,子集或无字体?

在这个答案中,假设您使用BaseFont类和Font类,如下所示:

BaseFont bf = BaseFont.createFont(pathToFont, encoding, embedded);
Font font = new Font(bf, 12);

在此片段中:

  • pathToFont是字体文件的路径(.ttf,.ttc,otf,.afm),
  • encoding是一种编码,例如“winansi”,BaseFont.IDENTITY_H,......
  • embedded是布尔值:truefalse

iText是否会嵌入字体?

embedded参数决定:

  • 如果是false,则不会嵌入字体。
  • 如果是true,则嵌入字体,标准类型1字体类型1字体之外的缺少.pfb文件或CJK字体。

关于例外情况:

  • 标准类型1字体是4种口味的Helvetica(常规,粗体,斜体,粗体斜体),4种口味的Times Roman(...),4种口味的Courier(... 。),符号和Zapfdingbats。 iText附带14个Adobe字体指标(AFM)文件。这些文件包含计算字形和单词宽度所需的度量标准。 iText没有嵌入字体所需的打印机字体二进制(PFB)文件。
  • 类型1字体存储在两个文件中:AFM文件和PFB文件。如果您提供AFM文件,iText将在同一目录中查找PFB文件。如果iText找不到任何PFB文件,则无法嵌入字体。
  • CJK代表一系列可下载字体包中的中文,日文和韩文字体。这是一种特殊的亚洲字体;可以嵌入.ttf.otf.ttc文件中的亚洲字体。

iText是否会对字体进行子集化?

如果您提供Type 1字体(AFM和PFB文件),iText将始终尝试嵌入字体的子集,而不是整个字体,。如果提供了Type 1字体,则嵌入完整字体。

iText可以嵌入完整的字体吗?

是的,您可以通过添加以下行来强制iText嵌入完整字体:

bf.setSubset(false);

但是,如果您使用编码Identity-H,则会忽略此值,因为这是ISO-32000-1中描述的方式。 iText只会将存储在PDF中的完整字体嵌入为简单字体(256个字符); iText永远不会嵌入存储为复合字体的字体(最多65,535个字符)。