自動 XFA rich 標題
單元:HPDFXFA、HPDFXFAHeadless 與 HPDFHeadlessAppearance
HPDFXFAWriteHeadlessPDF 直接從已儲存的 XDP 消耗生效的核取方塊與選擇鈕標題值,建立帶內嵌字型的實際原生外觀 Forms
生效的標題內容
純量標題值與 exData XHTML body 內容會成為原生文字;body 必須使用 http://www.w3.org/1999/xhtml 命名空間
部分的重複執行個體表單疊層會改變對應範本元素的文字與屬性,同時保留未變更的範本兄弟節點及其 XHTML 命名空間
成功的 exData.loadXML 整包取代,會提供實際匯入的 body,而不是把過時的範本內容合併回標題
註解與處理指示保留在原始已儲存的 XDP 中,但會從 render 用的副本中略過,因此其內容永遠不會變成可見的標題文字
render 副本限制為 4096 個節點、深度 64、65536 步疊層工作與 1 MiB 計費的來源與序列化 XHTML;原生解碼器與外觀建構器保留自己的 run、glyph 與位元組限制
真實字型字體與樣式
請提供CaptionFontFamilies 以取得實際的 regular、bold、italic、bold-italic 程式與具名家族
既有的原生 XHTML 解碼器會解析行內樣式、段落邊界、家族清單、顏色、尺寸、底線與刪除線格式;純量標題的字型尺寸、字重、姿態、字體與填色提供預設樣式
要求的字體或 glyph 缺少時,準備會失敗;這個消費端不會偽造 bold 或 italic 外觀,也不會搜尋外部字型
量測與放置
標題的量測與繪製使用同一套原生 rich 版面與提供的字型程式,包括實際的 glyph advance、樣式專屬的 ascent 與 descent、共用行基線與自動換行
固定的 left 或 right 預留會約束文字寬度;正的 top 或 bottom 預留允許在可用欄位寬度內換行
省略 reserve、為零或結構描述預設的 -1 時,使用自然標題範圍且不自動換行;明確的段落邊界仍是斷行,超出固定欄位矩形的文字會被裁切
自動 left 與 right 標題使用其自然寬度;行內標題在量測與放置時都忽略明確的 reserve
標題邊距會縮小實際文字區域,標題的水平與垂直對齊控制最終外觀的放置位置
reserve 行為遵循XFA 3.3 標題 reserve 定義
自然高度包含最後一行字型度量的範圍,加上兩側各兩點的原生內距;最終行後未使用的行距不計入
hidden 與 inactive 標題不消耗區域;invisible 標題保留量測到的區域,但不繪製也不計費標題 glyph
同一 widget 的 off、on 與 neutral 狀態共用一份實際標題 Form;重複執行個體保留獨立的內容與樣式圖
段落 margin 與自訂 line-height CSS、標題影像與其他非文字標題內容、按鈕 rich 標題,以及之後的互動式外觀重建,仍是另外的消費端工作
交易與驗收
成功的原生 property 事件可以先儲存並重新載入,再進行自動 PDF 建立;腳本失敗會還原精確的原生 XML 位元組,準備預算或取消失敗會保留目的地位元組、長度與位置
對目的地的寫入只在完整候選成功後才開始;呼叫端自己的串流寫入發生錯誤時,遵循該串流自身的語意,對任意不可回溯的目的地無法回復
Tests/Linux/XFAHeadlessRichCaptionTests.pas 產生實際帶樣式、換行、家族選取與不可見標題的 PDF;XFAHeadlessRichCaptionRuntimeTests.pas 涵蓋重複疊層、整包 XML 取代與回復
XFAHeadlessRichCaptionBudgetTests.pas 演練真實的資源失敗與選定的取消邊界,HeadlessTextExtentTests.pas 則公開量測到的原生行範圍
Verify-XFAHeadlessRichCaptions.py 檢查已儲存的 PDF 圖形、精確提供的字型程式位元組、共用參考、Unicode 文字、原始文字矩陣、fontTools 度量與 MuPDF render 像素,全程不開啟閱讀器 UI