PDFium Delphi Component Docs

GenerateFormAppearances 方法

元件: TPdf  ·  單元: PDFium
透過 FPDF_FFLDraw 算繪每一頁,為每一頁的每個表單元件重新產生 /AP(外觀串流)。這是 FormField[i] := value 指定的建議配套呼叫 — 沒有它,表單值可能只在欄位取得焦點時可見,且後續任何扁平化操作都會默默遺失這些值。請在所有 FormField[] 指定之後、SaveAs / FlattenPage / FlattenAllPages 之前呼叫

語法

procedure GenerateFormAppearances;

說明

GenerateFormAppearances 透過原生表單填寫編輯器重建可編輯文字與下拉式方塊外觀,並同步核取方塊與選項按鈕外觀狀態

原生文字與下拉式方塊指派會透過表單填寫編輯器提交外觀;原始字典編輯與原本缺少的外觀,在壓平之前仍可能需要此重新產生步驟,因為壓平使用儲存的外觀串流,而非即時編輯器的顯示

填寫並鎖定表單的正確流程是:指派所有 FormField[] 值 → 呼叫一次 GenerateFormAppearances → 視需要呼叫 FlattenPage / FlattenAllPages → 呼叫 SaveAs。即使只需要儲存已填寫表單而不壓平,仍建議呼叫 GenerateFormAppearances,以提升第三方 PDF 檢視器的相容性

此程序一次處理整份文件,沒有逐頁版本

範例

begin
  // Assign form field values
  Pdf1.FormField[0] := 'Alice Example';
  Pdf1.FormField[1] := '[email protected]';
  Pdf1.FormField[2] := '2026-05-20';
  
  // Bake appearance streams so values are visible in all viewers
  Pdf1.GenerateFormAppearances;
  
  // Flatten and save a non-editable copy
  Pdf1.FlattenAllPages;
  Pdf1.SaveAs('output_filled_flat.pdf');
end;

繼承 Widget 先經過暫時的原生編輯,再驗證還原原始父欄位值;不會在 Widget 寫入遮蔽值

繼承的唯讀欄位無法使用此編輯流程,會拋出錯誤;GenerateFormAppearances 不是交易式文件操作

另請參閱

FlattenPage, FlattenAllPages, FormField, SaveAs