|
ลงทะเบียนฟังก์ชัน JavaScript ระดับเอกสารที่มีชื่อ ใน name tree ของ /Names /JavaScript ใน Catalog (ISO 32000-1 §7.7.4.4 + §12.6.4.16) action ของ AcroForm widget, document-open action และโค้ด JavaScript อื่นเรียกฟังก์ชันที่ลงทะเบียนไว้ตามชื่อผ่าน JavaScript engine ของ viewer ได้ (Adobe Acrobat, Foxit และ viewer ที่เข้ากันได้อื่น)
procedure RegisterDocumentJavaScript(const Name, Body: AnsiString);
พารามิเตอร์
Name คือ key ที่ไม่ซ้ำกันซึ่งใช้เก็บ JS source ใต้ name tree โดย case-sensitive ตาม PDF 1.7 §7.9.6 Empty Name จะ raise
Name คือคีย์เฉพาะที่ใช้เก็บซอร์ส JS ใน name tree แยกตัวพิมพ์ใหญ่เล็กตาม PDF 1.7 §7.9.6 ถ้า Name ว่างจะ raise
Body คือซอร์ส JavaScript ดิบ HotPDF ไม่ parse หรือตรวจ JS – ผู้เรียกรับผิดชอบความถูกต้องเชิงไวยากรณ์เอง โดยทั่วไปผู้เรียกส่ง function declaration สมบูรณ์ (function GreetUser() { app.alert("hello"); }) ถ้า Body ว่างจะ raise
คำอธิบาย
แต่ละการเรียกเพิ่มคู่ (key, indirect dict) เข้า name tree /Names /JavaScript ของ Catalog ตอน EndDoc Body ที่ลงทะเบียนแต่ละตัวกลายเป็น dict indirect ของตัวเอง << /S /JavaScript /JS (body) >> พร้อมให้อ้างด้วยชื่อจาก action หรือบริบท JS อื่นใดก็ได้ เหมาะกับการแชร์ชุด helper ตรวจความถูกต้อง จัดรูปแบบ หรือคำนวณ ให้ widget หลายตัวใช้ร่วมกันโดยไม่ต้องคัดลอกซอร์สซ้ำใน action /A แต่ละตัว
การลงทะเบียน Name เดิมซ้ำจะ raise exception เพื่อไม่ให้ผู้เรียกเสียนิยามแรกโดยไม่รู้ตัว
ประตูกันความเข้ากันได้ (Compliance gates)
raise exception ภายใต้ PDFACompliance ที่ไม่ว่างทุกกรณี (ISO 19005-1 §6.6.1 / ISO 19005-2 §6.5.1 / ISO 19005-3 §6.5.1 ห้าม JavaScript action ทุกระดับของ PDF/A) และภายใต้ PDFXCompliance ที่ไม่ว่างทุกกรณี (workflow สิ่งพิมพ์ ISO 15930 ปฏิเสธ scripting เชิงโต้ตอบ) bump Version ของเอกสารเป็น PDF 1.3 ให้อัตโนมัติเมื่อจำเป็น ถ้า StrictVersionLock เปิดอยู่และเวอร์ชันที่เลือกเก่ากว่า PDF 1.3 จะปฏิเสธ
ตัวอย่าง
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+ โดย HotPDF bump เวอร์ชันเอกสารให้เอง เว้นแต่ตั้ง StrictVersionLock ไว้
ดูเพิ่มเติม: AcroForm Support, THPDFActionScriptType
|