PDFium Component Docs

GenerateFormAppearances 메서드

이 API 항목은 식별자, 시그니처, 코드 블록, PDF 용어를 원래 형태로 유지합니다.
컴포넌트: TPdf  ·  유닛: PDFium
각 page를 FPDF_FFLDraw로 렌더링하여 모든 page의 모든 form widget에 대한 /AP(appearance stream)를 다시 생성합니다. FormField[i] := value 할당과 함께 쓰는 것이 권장되며, 이 call이 없으면 form value가 field에 focus가 있을 때만 보일 수 있고 이후 flatten operation에서 값이 조용히 사라질 수 있습니다. 모든 FormField[] 할당 후, 그리고 SaveAs / FlattenPage / FlattenAllPages 전에 호출하세요

구문

procedure GenerateFormAppearances;

설명

GenerateFormAppearances는 로드된 document의 모든 page에 있는 모든 AcroForm widget에 대해 /AP(appearance stream) 항목을 다시 만듭니다. 각 page를 PDFium form-fill engine(FPDF_FFLDraw)으로 렌더링하여 현재 field value가 PDF file 안에 저장된 widget의 시각적 표현에 반영되도록 합니다

이 call은 FormField[i] := value 할당에 반드시 함께 써야 합니다. 이것이 없으면 form field의 value는 PDF data dictionary에 저장되지만 대응하는 appearance stream이 없습니다. PDF viewer는 보통 field에 input focus가 있을 때만 값을 보여주며, 다른 viewer는 아무것도 보여주지 않을 수도 있습니다. 더 중요한 점은, 사전에 appearance를 생성하지 않은 상태에서 FlattenPage 또는 FlattenAllPages를 호출하면 채워진 값이 빠진 출력이 조용히 만들어진다는 것입니다

form을 채우고 고정하는 올바른 workflow는 다음과 같습니다: 모든 FormField[] 값을 할당 → GenerateFormAppearances를 한 번 호출 → 필요하면 FlattenPage / FlattenAllPages 호출 → SaveAs 호출. flatten 없이 채운 form만 저장하려는 경우에도 third-party PDF viewer와의 호환성을 최대화하려면 GenerateFormAppearances를 권장합니다

이 procedure는 한 번의 call로 전체 document에 적용되며, page별 variant는 없습니다

예제

begin
  // Assign form field values
  Pdf1.FormField[0] := 'Alice Example';
  Pdf1.FormField[1] := 'alice@example.com';
  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;

참고 항목

FlattenPage, FlattenAllPages, FormField, SaveAs