Windows 原始輸入富文字表單填寫

Windows 檔案作業與 hpdf_document_execute_json_v1 接受在 forms.fill 請求中同時攜帶 richTextRuns 與一般文字、選擇欄位和按鈕更新;所有欄位共用同一份經認證的候選 PDF

原始輸入的 run 直接進入原生外觀組合器;AP 產生不必透過序列化的 RV 色彩表示往返;一般 V、標準富文字 RV 與實際 AP 會一起準備

請求

{
  "schemaVersion": 1,
  "type": "forms.fill",
  "fontFamilies": ["DejaVu Sans", "DejaVu Serif Condensed"],
  "fields": [
    {"name": "Input", "richTextRuns": [
      {"text": "Original typed precision", "fontFamily": "DejaVu Sans",
       "fontStyle": "regular", "fontSize": 12.123456,
       "color": [0.123456, 0.234567, 0.345678]},
      {"text": "Another paragraph", "fontFamily": "DejaVu Serif Condensed",
       "fontStyle": "boldItalic", "fontSize": 14.125,
       "paragraphBreakBefore": true, "alignment": "center",
       "underline": true, "strikeOut": false}
    ]},
    {"name": "Plain", "value": "Changed scalar"},
    {"name": "Choice", "values": ["B", "C"]},
    {"name": "Check", "value": "Yes"}
  ]
}

每個欄位提供 richTextRuns 或純量 value / values;richTextRuns 旁若有選填的 value,必須與原生衍生的純文字完全一致,包括輸入段落之間的換行字元;序列化的 richText 並不是帶型別 run 的輸入來源

每個 run 必須有 text,可接受 fontStyle、fontSize、color、underline、strikeOut、paragraphBreakBefore 與 alignment;fontStyle 為 regular、bold、italic 或 boldItalic;alignment 為 left、center 或 right;RGB 分量是 0 到 1 之間的有限數值

run 的字號必須為正且不超過 4096 points;未提供大小時使用欄位的 fontSize 或 12 points;原生 PDF 數值格式化規則仍然適用,而標準 RV 的 CSS 會把色彩序列化為八位元分量

欄位外觀選項包括 fontSize、padding、characterSpacing、wordSpacing 與 paintWhiteBackground;必須真正產生 AP,因此 appearance=false 為無效設定

實際字型程式

欄位的 fontFamilies 陣列覆寫作業層陣列;設定的陣列包含一到十六個非空的有效字族標籤;比對時 ASCII 大小寫視為相同,其他 Unicode 字元則精確比較;run 明確指定的 fontFamily 必須符合某個已設定的標籤,run 未指定標籤時選用第一個字族

不提供 fontFamilies 時,原本的單一字族路徑仍然可用;字型回呼的標籤依序取自欄位 fontFamily、作業 fontFamily 或 DejaVu Sans;原始單字族 run 省略 run 層級的 fontFamily

檔案作業額外提供 input、output 與 fonts;fonts 把每個設定的字族標籤對應到 regular、bold、italic 與 boldItalic 的檔案路徑;只會載入實際用到的樣式,以及純量外觀所需的 regular 字面;檔案路徑不得與輸出互為別名

版本化 C ABI 的呼叫端沿用既有的 hpdf_form_data_operation_v1 擴充,並在字型回呼中回傳可讀取的 hpdf_io_v1 表格;字族標籤為 UTF-8,樣式值為 0 到 3;所有實際字型程式會先複製進有邊界的自有 bytes,再進行外觀組合

原始的 V1 符號、基礎結構大小與選填擴充偏移量維持不變;字族與樣式資源會在同一個請求內快取,並跨欄位共用,不會重複計入相同的自有配置

選填 fallbackFontFamilies=true 時,會在實際提供的字族之間套用整個 grapheme 層級的 fallback;輸入的 run 可以保留有序的 fontFamilyCandidates 陣列,宣告的候選會排在設定順序之前考量;請求繼承與四樣式回呼載入的細節見 Windows 提供字族的富文字 fallback

當前圖形與發布

未提供 InputIO 時,C ABI 使用自有的已載入修訂版與實際 pending graph;選填的 InputIO 提供替換用的 PDF,在任何字型回呼之前先私下複製並認證;借用的輸入不會被改動,替換失敗也不會影響已提交的內容

OutputIO 與 ResultIO 為必要;實際候選 PDF 與結果 JSON 都必須成功完成,並通過最後的取消檢查點,C ABI 才會交換文件與來源

失敗的回呼可能已經收到候選 bytes;回傳狀態非零時,呼叫端必須捨棄這些 bytes;先前提交的程式庫內容保持不變

檔案作業會先備妥完整候選與有邊界的回覆,再原子式取代要求的輸出;字型缺失、政策失敗、取消或容量不足都會保留現有目標

政策與結果

既有的簽章完整性、DocMDP P1/P2/P3、FieldMDP 鎖、唯讀旗標與 AES 表單填寫權限都由原生認證引擎強制執行;signaturePolicy 接受與 Windows 表單匯入相同的明確信任、時間戳記與撤銷設定

唯讀欄位的同輸入更新只有在實際 AP 運算元、字型、資源與欄位值都等價時才會成功;支援壓縮的 AP stream 與非正規但等價的 RV;真正的樣式變更仍然是變更,即使其 RV 色彩量化後得到相同的 CSS 值

真正未變更的請求會在政策認證後,發布備妥當前修訂版的精確 bytes;pending graph 的編輯會在比較之前具現化到該當前修訂版

成功的回覆包含來自實際備妥候選的 typedRichText=true、typedRichProfile=original-typed-runs-v1、updated、fieldCount、fontBytes 與 fields;formDataExchange.typedRichFill 說明這些已實作的進入點

fields 的每個項目保留一般的名稱、純量值與 fieldType 摘要;由陣列支撐的 choice 在此摘要中純量值為空,完整選擇仍保留在儲存的 PDF 與後續的 FDF/XFDF 匯出中

直接的 ExecuteLoadedOperation 作業門面與舊式 HPDFDocRunJob handle/字型回呼擴充仍屬獨立工作;此綁定不加入註解、內嵌檔案、action 或增量 FDF 交換

相關主題

FillTypedData, Windows 交易, 原生混合輸入更新, Windows FDF/XFDF 交換