THotPDF.RegisterAcroFormFont

THotPDF AcroForm /DR multi-font registration (v2.119.42)

 

AddXFAPacket  AcroForm 支持  SetFormUnicodeFontDict

注册一个额外的 Unicode(Type 0 / CID-keyed)字体,纳入 AcroForm Default Resources(/DR)字典。让单个 PDF 文档可同时向 AcroForm 控件暴露多个 Unicode 字体——典型用于多语言表单,例如同一表单里同时需要拉丁字体、CJK 字体和阿拉伯字体。

 

Delphi 语法:

procedure RegisterAcroFormFont(const FontResourceName: AnsiString;

  FontIndirectRef: THPDFObject);

 

说明

AcroForm 控件经 AcroForm 字典上的 Default Resources(/DR)字典引用字体,该字典是所有表单字段外观流的共享资源池。v2.119.42 之前,AcroForm /DR 只暴露一个 Unicode 字体(通常是经 SetFormUnicodeFontDict 注册的 helper-set Type 0 字体),限制了多语言表单工作流,因为每个控件都必须经同一字体程序渲染。

 

自 v2.119.42 起,调用方可以在任意资源名称下注册额外的 Unicode 字体。每个注册的字体都会成为一条 /DR /Font /<name> <indirect ref> 条目,位于 AcroForm 的 /DR 字典中,并在 EndDoc 时写出。之后,widget 外观流可以在其外观内容流中,通过自己的 /Tf <name> <size> 操作符引用任何已注册的名称

 

参数

FontResourceName - 外观流 /Tf 操作符引用的 PDF Name。约定是使用不带前导斜杠的短稳定标识符(如 'NotoSansArab'、'NotoSansCJK')。HotPDF 序列化时写入前导斜杠。

FontIndirectRef - 一个已有的间接 Type 0(CID-keyed)字体字典,通常是 CreateIndirectFontDict 作用于经 RegisterUnicodeTTF 注册的字体所得到的结果

 

典型工作流 (multilingual form)

 

PDF.RegisterUnicodeTTF('NotoSansArab', 'NotoSansArabic-Regular.ttf');

PDF.RegisterUnicodeTTF('NotoSansJP'  , 'NotoSansJP-Regular.otf');

ArabRef := PDF.CreateIndirectFontDict('NotoSansArab');

JPRef   := PDF.CreateIndirectFontDict('NotoSansJP');

PDF.RegisterAcroFormFont('NotoSansArab', ArabRef);

PDF.RegisterAcroFormFont('NotoSansJP'  , JPRef);

 

这样阿拉伯内容控件可用 /NotoSansArab 12 Tf 编写外观流,日语内容控件用 /NotoSansJP 12 Tf,共享同一个文档级 AcroForm /DR 资源池。

 

Coexistence with SetFormUnicodeFontDict

原有的单字体辅助方法(SetFormUnicodeFontDict)继续可用,适合 AcroForm /DR 中只需要一种 Unicode 字体的项目。RegisterAcroFormFont 是增量式的:调用方可以在 SetFormUnicodeFontDict 之外另行使用它,需要多种 Unicode 字体时也可以完全取代 SetFormUnicodeFontDict

 

另请参阅: THotPDF.SetFormUnicodeFontDict, THotPDF.CreateIndirectFontDict, AcroForm 支持, THPDFPage.AddTextField