THotPDF.AddXFAPacket / ClearXFAPackets / XFAPacketCount

THotPDF trình chứa biểu mẫu XFA (v2.119.51)

 

RegisterAcroFormFont  AcroForm Support

Đăng ký một packet XFA (XML Forms Architecture) có tên để phát bên trong mục /XFA của AcroForm trong tài liệu. PDF 1.7 §12.7.6 + §12.7.8 cho phép AcroForm mang một mảng /XFA đi kèm với (hoặc thay cho) mảng tĩnh /Fields, qua đó hỗ trợ luồng làm việc AcroForm + XFA lai hoặc các biểu mẫu XFA động thuần túy

 

Cú pháp Delphi:

procedure AddXFAPacket(const PacketName: AnsiString; const XMLBytes: TBytes);

procedure ClearXFAPackets;

function XFAPacketCount: Integer;

 

Mô tả

Mỗi lần gọi AddXFAPacket sẽ đăng ký một packet có tên. Các tên điển hình (theo đặc tả XFA 3.3 và PDF 1.7 §12.7.8 Table 234):

 

template - form layout + scripts (the largest packet in most XFA documents).

datasets - data binding (the XML payload the template renders against).

config - viewer configuration.

connectionSet - external data connections.

localeSet - locale-specific formatting rules.

stylesheet - XSLT or CSS styling.

xfdf - XFDF form data overlay.

xmpmeta - XMP metadata.

signature - signature-related XFA data.

sourceSet - source-side data definitions.

 

Khi EndDoc được gọi, mỗi packet đã đăng ký trở thành một đối tượng stream gián tiếp được nén bằng FlateDecode, và mảng /XFA của AcroForm sẽ xen kẽ chuỗi PDF mang tên packet với tham chiếu stream theo đúng thứ tự đăng ký, nên bố cục là xác định theo byte. ClearXFAPackets xóa toàn bộ packet đã đăng ký (hữu ích khi tái sử dụng một thể hiện THotPDF qua nhiều tài liệu). XFAPacketCount trả về số lượng hiện tại

 

Chỉ hỗ trợ ở mức container

HotPDF không phân tích XFA XML, không cài đặt bộ máy bố cục động XFA, không thực thi FormCalc hay JavaScript bên trong template XFA, và không kiểm tra cấu trúc template. Bên gọi tự soạn XFA XML (thường qua Adobe LiveCycle Designer hoặc tự dựng theo đặc tả XFA 3.3) và HotPDF phát byte nguyên văn

 

Các trình đọc phía tiêu thụ có bộ máy XFA (Acrobat / Reader cũ, FormsCentral, một số sản phẩm kiosk) sẽ render biểu mẫu; các trình đọc không có bộ máy XFA (Adobe Reader DC từ 2017 trở đi, đa số trình đọc mã nguồn mở) sẽ hiển thị các trường AcroForm dự phòng nếu tài liệu là luồng AcroForm + XFA lai

 

Cửa kiểm tương thích PDF/A và PDF/X

ISO 19005-1 §6.4.2 / ISO 19005-2 §6.4.2 / ISO 19005-3 §6.4.2 đều cấm rõ ràng biểu mẫu XFA (bộ máy bố cục động không thể được lưu trữ theo cách xác định). Luồng prepress ISO 15930 loại bỏ hoàn toàn biểu mẫu tương tác. AddXFAPacket sẽ ném ngay khi PDFACompliance hoặc PDFXCompliance không rỗng, kèm tham chiếu đặc tả liên quan. Tên packet trùng lặp sẽ ném. PacketName rỗng hoặc XMLBytes rỗng sẽ ném. RequirePDFVersion(pdf15) tự nâng phiên bản tài liệu

 

Phát sinh từ điển AcroForm

Từ điển AcroForm được phát sinh khi hoặc /Fields có ít nhất một mục hoặc có ít nhất một packet XFA đã được đăng ký. Các bên gọi trước v2.119.51 không đăng ký packet nào vẫn giữ đầu ra /AcroForm giống hệt theo byte

 

Quy trình điển hình (biểu mẫu XFA động thuần túy)

 

PDF.BeginDoc;

TemplateBytes := TFile.ReadAllBytes('form-template.xml');

DataBytes     := TFile.ReadAllBytes('form-data.xml');

PDF.AddXFAPacket('xdp:xdp', BytesOf('<xdp:xdp xmlns:xdp="http://ns.adobe.com/xdp/">'));

PDF.AddXFAPacket('template', TemplateBytes);

PDF.AddXFAPacket('datasets', DataBytes);

PDF.AddXFASignaturePacket(SigBytes); { caller-generated XAdES }

PDF.AddXFAPacket('/xdp:xdp', BytesOf('</xdp:xdp>'));

PDF.EndDoc;

 

XDP wrapper, single-stream, XFA động và XFA đã ký

Biểu mẫu mảng /XFA phải mở và đóng bằng các packet wrapper xdp:xdp, như ví dụ hiện đã thể hiện (ISO 32000-1 §12.7.8). Các API XFA liên quan: SetXFADocument ghi toàn bộ tài liệu XFA/XDP thành một stream /XFA duy nhất, loại trừ lẫn nhau với AddXFAPacket; XFANeedsRendering đặt cờ Catalog /NeedsRendering (ISO 32000-1 §7.7.2) để trình xem tạo lại biểu mẫu XFA động khi mở lần đầu; AddXFASignaturePacket nhúng chữ ký XAdES / XML-DSig do bên gọi tạo dưới dạng packet signature. HotPDF không bao giờ tạo hay phân tích chữ ký - bên gọi tạo nó bằng thư viện mật mã XML trên dữ liệu XFA

 

Làm phẳng XFA sang AcroForm

ApplyXFAAsAcroForm ánh xạ byte XDP/XFA do bên gọi cung cấp lên trang hiện tại dưới dạng widget AcroForm gốc và đồ họa trang đơn giản. FlattenLoadedXFA thực hiện cùng phép chuyển đổi đó cho một PDF đã nạp sẵn packet /XFA nhúng. Truyền Editable=False để biến các widget được tạo thành chỉ đọc, và kiểm tra XFAFlattenWarnings cho những phần tử không thể ánh xạ

 

Xem thêm: AcroForm Support, THotPDF.RegisterAcroFormFont, THPDFPage.AddTextField