|
THotPDF.AddXFAPacket / ClearXFAPackets / XFAPacketCount THotPDF XFA forms container (v2.119.51)
|
RegisterAcroFormFont AcroForm Support |
|
Регистрирует именованный XFA (XML Forms Architecture) packet для вывода внутри записи AcroForm /XFA документа. PDF 1.7 §12.7.6 + §12.7.8 разрешает AcroForm содержать массив /XFA вместе со статическим массивом /Fields или вместо него, что позволяет строить hybrid AcroForm + XFA workflows или чистые dynamic XFA forms
Delphi syntax: procedure AddXFAPacket(const PacketName: AnsiString; const XMLBytes: TBytes); procedure ClearXFAPackets; function XFAPacketCount: Integer;
Описание Каждый вызов AddXFAPacket регистрирует один именованный packet. Типовые имена согласно XFA 3.3 specification и PDF 1.7 §12.7.8 Table 234:
При EndDoc каждый зарегистрированный packet становится одним косвенным FlateDecode-compressed stream object, а массив AcroForm /XFA чередует PDF strings с именами packets и stream references в порядке регистрации, поэтому layout является byte-deterministic. ClearXFAPackets удаляет все зарегистрированные packets, что полезно при повторном использовании экземпляра THotPDF для нескольких документов. XFAPacketCount возвращает текущее количество
Container-level support only HotPDF не разбирает XFA XML, не реализует XFA dynamic-layout engine, не выполняет FormCalc или JavaScript внутри XFA template и не проверяет структуру template. Caller сам создает XFA XML (обычно через Adobe LiveCycle Designer или вручную по XFA 3.3 specification), а HotPDF выводит байты как есть
Consumer readers с XFA engine (старые Acrobat / Reader, FormsCentral, некоторые kiosk products) рендерят форму; readers без XFA engine (Adobe Reader DC с 2017 года и большинство open-source readers) показывают fallback AcroForm fields, если документ использует hybrid AcroForm + XFA workflow
PDF/A and PDF/X compliance gates ISO 19005-1 §6.4.2 / ISO 19005-2 §6.4.2 / ISO 19005-3 §6.4.2 явно запрещают XFA forms, потому что dynamic-layout engine не является детерминированно архивируемым. ISO 15930 prepress workflows полностью отвергают interactive forms. AddXFAPacket немедленно вызывает исключение при любом непустом PDFACompliance или PDFXCompliance с соответствующей ссылкой на спецификацию. Повторяющиеся packet names вызывают исключение. Пустые PacketName или XMLBytes вызывают исключение. RequirePDFVersion(pdf15) автоматически повышает версию документа
AcroForm dictionary emission AcroForm dict выводится, когда /Fields содержит хотя бы одну запись или зарегистрирован хотя бы один XFA packet. Callers до v2.119.51, которые не регистрируют packets, сохраняют byte-identical /AcroForm output
Typical workflow (pure XFA dynamic form)
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, dynamic, and signed XFA Массивная форма
Сведение XFA в AcroForm
См. также: AcroForm Support, THotPDF.RegisterAcroFormFont, THPDFPage.AddTextField |