从 iText 中的字节数组注册字体

Register font from byte array in iText

是否可以从字节数组注册字体,而不是使用文件路径?

FontFactory class 有两种注册字体的方法。两者都使用 file/folder 路径来注册字体:

我查看了 iText 源以寻找线索,但我不明白字体文件最终是如何出现在 PDF 文档中的。

有谁知道如何从字节数组注册和嵌入字体 (.ttf)? 我正在使用 iTextSharp。

提前致谢!

是的,您可以从 byte[] 创建 Font,但在那种情况下,您不能使用 FontFactory。相反,您需要使用 createFont 方法创建一个 BaseFont 实例,请参阅 http://api.itextpdf.com/itext/com/itextpdf/text/pdf/BaseFont.html 了解不同的选项。

一旦你有了一个 BaseFont 实例,你就可以轻松地创建一个 Font 对象:

假设 fBytesbyte[],那么你有:

BaseFont bf = BaseFont.createFont(
    "myFont", BaseFont.IDENTITY_H, BaseFont.EMBEDDED,
    true, fBytes, null);
Font font = new Font(bf, 12);

该方法接受两个 byte[] 参数,因为 Type 1 字体由两个文件组成:一个度量文件(AFM 或 PFM)和一个字体二进制文件 (PFB)。对于所有其他字体(TTF、OTF 等),第二个 byte[] 参数应为 null.

目前无法将这种字体作为 "registered font" 添加到 FontFactory

给字体命名时,需要在末尾添加.ttf,否则会出现以下错误:

无法识别 'Identity-H' 的字体 'myFont'。

添加 .ttf 为我修复了这个错误。

BaseFont bf = BaseFont.createFont(
    "myFont.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED,
    true, fBytes, null);
Font font = new Font(bf, 12);