THotPDF.RegisterDocumentJavaScript

THotPDF

 

AcroForm 支援

在 Catalog 的 /Names /JavaScript 名稱樹中登錄文件層級、具名的 JavaScript 函式(ISO 32000-1 §7.7.4.4 + §12.6.4.16)。AcroForm widget 動作、開啟文件動作以及其他 JavaScript 內容,都可以透過 viewer’s JavaScript engine(Adobe Acrobat、Foxit 及其他相容檢視器),依名稱呼叫已登錄的函式

 

Delphi 語法:

procedure RegisterDocumentJavaScript(const Name, Body: AnsiString);

 

Parameters

Name 是 JS source 儲存在 name tree 下的 unique key。依 PDF 1.7 §7.9.6,大小寫有別。Empty Name 會擲回

Body 是原始的 JavaScript 原始碼。HotPDF 不會解析或驗證這段 JS – 語法是否正確由呼叫端負責。一般做法是傳入完整的函式宣告(function GreetUser() { app.alert("hello"); })。Body 為空會引發例外

 

說明

每次呼叫都會把一組(key、間接字典)加入 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

任何 non-empty PDFACompliance setting 下都會擲回(ISO 19005-1 §6.6.1 / ISO 19005-2 §6.5.1 / ISO 19005-3 §6.5.1 禁止所有 PDF/A levels 的 JavaScript actions)。任何 non-empty PDFXCompliance setting 下也會擲回(ISO 15930 prepress workflows 拒絕 interactive scripting)。需要時會自動將 document Version 提升到 PDF 1.3;若 StrictVersionLock 啟用且選定 version 早於 PDF 1.3,則會拒絕

 

Example

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;

 

Availability

HotPDF v2.119.14. PDF 1.3+ feature; HotPDF auto-bumps the document Version unless StrictVersionLock is set.

 

請參閱: AcroForm 支援, THPDFActionScriptType