|
在 Catalog 的 /Names /JavaScript 名称树中注册一个文档级的具名 JavaScript 函数(ISO 32000-1 §7.7.4.4 + §12.6.4.16)。AcroForm widget 动作、文档打开动作以及其他 JavaScript 代码,都可以通过阅读器的 JavaScript 引擎(viewer’s JS engine;如 Adobe Acrobat、Foxit 及其他兼容的阅读器)按名称调用已注册的函数
Delphi 语法:
procedure RegisterDocumentJavaScript(const Name, Body: AnsiString);
参数
Name 是 JS 源码在名称树中存储的唯一键。依 PDF 1.7 §7.9.6 区分大小写。空的 Name 会抛出异常。
Body 是原始的 JavaScript 源码。HotPDF 不会解析或验证这段 JS – 语法是否正确由调用方负责。通常传入完整的函数声明(function GreetUser() { app.alert("hello"); })。Body 为空时会抛出异常
说明
每次调用都会向 Catalog 的 /Names /JavaScript 名称树添加一对(键,间接字典),在 EndDoc 时写出。每个注册的 Body 都会成为独立的间接 << /S /JavaScript /JS (body) >> 字典,可从其他任何动作或 JS 上下文中按名称引用。适合在众多 widget 之间共享一组验证、格式化或计算辅助函数,无需在每个 /A 动作里重复源码
Registering the same Name twice raises so callers do not silently lose their first definition.
Compliance gates
只要设置了非空的 PDFACompliance 就会抛出异常(ISO 19005-1 §6.6.1 / ISO 19005-2 §6.5.1 / ISO 19005-3 §6.5.1 在各 PDF/A 级别中都禁止一切 JavaScript 动作)。只要设置了非空的 PDFXCompliance 也会抛出异常(ISO 15930 印前工作流不接受交互式脚本)。必要时会自动把文档 Version 提升到 PDF 1.3;如果所选版本早于 PDF 1.3,则在 StrictVersionLock 下拒绝执行
示例
PDF := THotPDF.Create(nil);
PDF.FileName := 'form.pdf';
PDF.BeginDoc;
PDF.RegisterDocumentJavaScript('GreetUser',
'function GreetUser() { app.alert("Hello"); }');
PDF.RegisterDocumentJavaScript('ValidateNumber',
'function ValidateNumber(v) { if (isNaN(v)) app.alert("Not a number"); }');
// ... AcroForm widget /A action can then call: ValidateNumber(this.value);
PDF.EndDoc;
可用性
HotPDF v2.119.14. PDF 1.3+ feature; HotPDF auto-bumps the document Version unless StrictVersionLock is set.
另请参阅: AcroForm 支持, THPDFActionScriptType
|