|
AcroForm Support
Tổng quan
Từ HotPDF v2.5.0, thư viện có thể tạo biểu mẫu tương tác (AcroForm) theo mục 12.7 của PDF 1.7 ISO 32000-1. Mỗi trường được tạo dưới dạng annotation Widget được gộp với field dictionary và tự động được đăng ký với tài liệu, nhờ đó mục toàn cục /AcroForm sẽ được thêm vào Catalog khi tài liệu được hoàn tất bằng EndDoc
Các loại trường được hỗ trợ
- Trường văn bản (
/FT /Tx) qua THPDFPage.AddTextField. Hỗ trợ một dòng, nhiều dòng, mật khẩu, comb, chọn tệp, rich-text, cuộn và kiểm tra chính tả thông qua THPDFFormFieldFlags
- Ô chọn (
/FT /Btn, không có bit Pushbutton/Radio) qua THPDFPage.AddCheckBox với tên giá trị xuất và trạng thái đánh dấu ban đầu có thể cấu hình
- Nút radio (
/FT /Btn /Ff Radio) qua THPDFPage.AddRadioButton. Nhiều lần gọi cùng tên nhóm sẽ được gộp dưới một field cha dùng chung với mảng /Kids, đúng như yêu cầu của 12.7.4.2
- Hộp chọn thả xuống (
/FT /Ch /Ff Combo) qua THPDFPage.AddComboBox. Truyền vào một mảng tùy chọn mở
- Hộp danh sách (
/FT /Ch) qua THPDFPage.AddListBox. ffMultiSelect bật chọn nhiều
- Nút bấm (
/FT /Btn /Ff Pushbutton) qua THPDFPage.AddPushButton với chú thích tùy chọn (/MK /CA). Từ HotPDF v2.31.0, THPDFPage.AddPushButtonWithAction gắn một PDF action dictionary vào widget để khi bấm nút sẽ chạy /SubmitForm (gửi giá trị field tới URL, PDF 1.2 12.7.5.2), /ResetForm (PDF 1.2 12.7.5.3), /JavaScript (chạy một đoạn JS, PDF 1.3 12.6.4.16) hoặc /URI (mở URL trong trình duyệt hệ thống, PDF 1.1 12.6.4.7)
- Trường giữ chỗ chữ ký (
/FT /Sig) qua THPDFPage.AddSignatureField từ HotPDF v2.12.0. Dictionary AcroForm tự động nhận /SigFlags 3 (SignaturesExist + AppendOnly) khi có ít nhất một field chữ ký. Field này được để chưa ký để các công cụ bên ngoài (Adobe Acrobat, Foxit, thư viện ký CMS / PKCS#7 chuyên dụng) có thể gắn chữ ký mật mã thực sau khi tệp được lưu
- Quy trình ký tại chỗ qua
THPDFPage.AddSignedSignatureField + THotPDF.PreparePDFForSigning + THotPDF.InsertSignatureHex từ HotPDF v2.23.0. Lần gọi đầu tiên dành sẵn một signature dictionary /V với các chỗ giữ cho /ByteRange và /Contents. Sau khi lưu tài liệu, ứng dụng host gọi PreparePDFForSigning để vá /ByteRange và biết các vùng tệp cần băm. Sau khi tạo chữ ký tách rời CMS / PKCS#7 bên ngoài (Windows CryptoAPI, OpenSSL, thư viện ký chuyên dụng), nó gọi InsertSignatureHex để chèn chuỗi hex chữ ký vào chỗ giữ mà không làm xáo trộn bất kỳ byte nào khác trong tệp
Kiểm tra và cập nhật field đã nạp
Từ HotPDF v2.121.9, ứng dụng có thể nạp một tài liệu AcroForm có sẵn bằng THotPDF.LoadFromFile, liệt kê các field, đọc tên, kiểu và giá trị của chúng, đổi giá trị field, bật hoặc tắt cờ chỉ đọc, rồi lưu lại object graph đã nạp bằng THotPDF.SaveLoadedDocument Luồng này dành cho các chỉnh sửa bền vững trên một tài liệu đã nạp sẵn; đừng gọi BeginDoc / EndDoc chỉ để lưu các thay đổi giá trị field đã nạp
Các helper của field gồm GetFormFieldCount, GetFormFieldName, GetFormFieldType, GetFormFieldValue, SetFormFieldValue, và SetFormFieldReadOnly. Việc tra cứu field chấp nhận cả chỉ số field bắt đầu từ 0 lẫn tên field đầy đủ. Các giá trị THPDFLoadedFormFieldType trả về là lfftText, lfftButton, lfftChoice, lfftSignature, hoặc lfftUnknown
Loaded-field Pascal example
HPDF.LoadFromFile('InputForm.pdf');
for I := 0 to HPDF.GetFormFieldCount - 1 do
Writeln(HPDF.GetFormFieldName(I), ' = ', HPDF.GetFormFieldValue(I));
HPDF.SetFormFieldValue('CustomerName', 'Bob');
HPDF.SetFormFieldValue('Plan', 'Premium');
HPDF.SetFormFieldReadOnly('CustomerName', True);
HPDF.SaveLoadedDocument('UpdatedForm.pdf');
Hành động bổ sung cho field
Các wrapper AttachFieldKeyStrokeAction, AttachFieldFormatAction, AttachFieldValidateAction, và AttachFieldCalculateAction gắn JavaScript vào dictionary /AA của field cho các trigger PDF /K, /F, /V, và /C. Hãy dùng chúng sau khi tạo hoặc nạp field khi cần lọc phím gõ, định dạng hiển thị, kiểm tra hợp lệ hoặc cập nhật field tính toán gắn với chính field chứ không phải với một nút bấm
Tạo appearance
Mặc định, dictionary /AcroForm được xuất ra sẽ đặt /NeedAppearances true và giao việc dựng appearance stream cho trình xem PDF sử dụng tài liệu đó (Adobe Reader, Foxit, Chrome, trình duyệt, Apple Preview). Hãy đặt THotPDF.AutoFormAppearances thành true trước khi thêm field và HotPDF sẽ dựng sẵn các Form XObject /AP /N (PDF 1.7 8.10) cho mọi text field, push button, choice (combo / list) và các trạng thái Yes / Off của mọi checkbox / radio kid. Khi đó AcroForm dictionary sẽ mang /NeedAppearances false và một mục tài nguyên mặc định /DR tham chiếu 14 font cơ sở chuẩn (Helv Helvetica, ZaDb ZapfDingbats), nhờ vậy các trình render bỏ qua /NeedAppearances vẫn hiển thị nội dung field đúng. Có từ HotPDF v2.28.0
Tham chiếu cờ field (THPDFFormFieldFlags)
ffReadOnly, ffRequired, ffNoExport — các cờ chung trong Table 227 áp dụng cho mọi kiểu field
ffMultiline, ffPassword, ffFileSelect, ffDoNotSpellCheck, ffDoNotScroll, ffComb, ffRichText — riêng cho Tx (Table 228)
ffEdit, ffSort, ffMultiSelect, ffDoNotSpellCheck, ffCommitOnSelChange — riêng cho Ch (Table 230)
Pascal example
HPDF.BeginDoc;
HPDF.AddPage;
HPDF.CurrentPage.AddTextField('Name', '', Rect(50, 100, 250, 120));
HPDF.CurrentPage.AddCheckBox('Agree', 'Yes', Rect(50, 130, 70, 145), True);
HPDF.CurrentPage.AddRadioButton('Color', 'Red', Rect(50, 160, 70, 175), True);
HPDF.CurrentPage.AddRadioButton('Color', 'Green', Rect(80, 160, 100, 175));
HPDF.CurrentPage.AddRadioButton('Color', 'Blue', Rect(110, 160, 130, 175));
HPDF.CurrentPage.AddComboBox('Country', 'CN',
['CN', 'US', 'JP'], Rect(50, 190, 250, 210));
HPDF.EndDoc;
Giới hạn
- Bộ tạo
AutoFormAppearances hiện chỉ dàn trang được các giá trị ASCII / WinAnsi-encodable; với các field có /V chứa văn bản nhiều byte (UTF-8), /AP được lưu sẽ hiển thị thành một hình chữ nhật rỗng cho đến khi trình xem chủ động tạo lại appearance
- Các trạng thái con Down (
/D) và rollover (/R) không được tạo; chỉ trạng thái normal (/N) được sinh ra
- Tính duy nhất của tên field là trách nhiệm của bên gọi; HotPDF không ép buộc điều này
Xem thêm
|