从 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
对象:
假设 fBytes
是 byte[]
,那么你有:
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);
是否可以从字节数组注册字体,而不是使用文件路径?
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
对象:
假设 fBytes
是 byte[]
,那么你有:
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);