自動 XFA 原生 PDF 建立

單元:HPDFXFAHeadless

HPDFXFAWriteHeadlessPDF 直接從 XDP 位元組與應用程式提供的 TrueType 字型建立全新的原生 PDF,不需要輸入 PDF 或預先備妥的欄位槽位

adapter 消耗既有的 XFA 繫結、重複執行個體與分頁版面 callback,建立帶真實內嵌字型外觀串流的的原生頁面與 AcroForm 物件圖

文字、數字、日期與密碼欄位、按鈕、下拉與清單選擇、核取方塊與選擇鈕群組、靜態文字,以及 rectangle、line、arc 與行內 PNG 或 JPEG 影像 draw 都已支援;簽章與更多 draw 消費端仍需進一步的 adapter 整合

選擇與布林建立保留分開的顯示與匯出值、可編輯與多選行為、原生外觀狀態,以及互相獨立的重複選擇鈕群組

布林樣式與標題消耗實際的向量標記、尺寸、外框顏色與粗細、Unicode 標題區域與核取方塊第三狀態

原生圖形與影像消耗實際的向量路徑、PNG 取樣格式與透明、baseline 或 progressive JPEG、實體 aspect 與仿射放置

密碼欄位使用遮罩外觀,同時保留原生欄位值;文件層級的 Editable 與生效的 XFA readOnly 存取決定原生欄位旗標

XFA 點座標以左上為原點,一次性轉換成原生 widget 矩形與 draw 平移;分開的重複出現個體由版面引擎取得不同的原生欄位名稱

原生 /AP、/DR 與 /DA 資源以提供的字型與生效的尺寸、顏色、對齊產生;每個欄位都使用提供的字體,因此這個階段的字體選擇與多樣式字體屬於應用程式的職責

文件需要這些事件時,請用 TXFAWidgetRuntime 執行生命週期或互動事件,並在建立前儲存產生的 XDP;adapter 的 ScriptOptions 控制 flatten 引擎的 calculate 與 validate 處理

準備與限制

TXFAHeadlessPDFOptions 限制 XDP 與字型位元組、輸出與物件位元組、物件與頁數、欄位數與彙總 UTF-16 glyph 單位

物件、頁面與 glyph 預算在對應配置前檢查;內嵌檢查約束彙總的字型與影像串流,影像解碼器約束自己的工作緩衝,原生序列化強制物件與完整候選位元組限制

圖形建立、外觀產生與序列化全程檢查取消;所有準備失敗都會讓目的地串流的位置、長度與既有位元組保持不變

完整候選先在記憶體中備妥,再一次 WriteBuffer 寫入目的地;目的地 I/O 錯誤會往外傳播,可能依呼叫端串流行為留下部分寫入

輸出是一份新的未簽署文件;保留匯入的加密、既有簽章與來源修訂屬於原生文件匯入與修訂 API

驗收

Tests/Linux/XFAHeadlessCreationTests.pas 產生實際的重複、分頁與全域唯讀文件、一份事件變更後的已存 XDP 文件,以及一份帶樣式 Unicode draw 的文件,全程不開啟閱讀器 UI

Tests/Linux/Verify-XFAHeadlessCreation.py 以 pypdf 獨立驗證原生值、欄位旗標、頁面所有權、/AP 與內嵌字型資源,並以 MuPDF 驗證實際文字與 render 後的外觀像素

Tests/Linux/XFAHeadlessChoiceTests.pas 與 Verify-XFAHeadlessChoice.py 加入實際的選擇值與旗標、選擇鈕父節點與重複範圍識別、保留的匯出狀態、執行階段儲存/重新載入與回復,以及 render 後的選取像素

TXFAHeadlessPDFResult 回報實際的原生圖形與序列化計數