Artículo técnico

PDFium: form-field navigation and viewer validation

Esta versión localizada revisa PDF Form Field Navigation in Delphi (PDFium Component) tomando como referencia el artículo base en inglés ya actualizado para equipos que trabajan con Delphi, PDF y software documental

La página convierte la versión base actualizada en puntos de control prácticos para diseño, implementación y validación

Contenido sincronizado desde la versión base

El artículo base se amplió con contexto práctico, decisiones técnicas y ejemplos concretos, por lo que esta página debe leerse como una guía de trabajo y no como un resumen breve

Puntos importantes de la versión actualizada:

  • Trabaje primero con archivos de entrada pequeños y reproducibles
  • Mantenga intactos nombres de producto, API, archivos y valores literales
  • Guarde la salida del validador y las versiones junto con el archivo de prueba generado

Decisiones prácticas de implementación

Empiece por el tipo de archivo, el resultado esperado y el error que debe ver el usuario. Después vincule cada llamada API con un resultado verificable para que validación, registros y soporte puedan reproducir el caso del cliente

  • Trabaje primero con archivos de entrada pequeños y reproducibles
  • Mantenga intactos nombres de producto, API, archivos y valores literales
  • Guarde la salida del validador y las versiones junto con el archivo de prueba generado

Código y puntos API

Los ejemplos de código se conservan sin cambios para poder compararlos directamente con proyectos Delphi, C++Builder y Lazarus/FPC

Pdf.FileName := FormPath;
Pdf.FormFill := True;   // enable before Active; required for any field access
Pdf.Active := True;

case Pdf.FormType of
  ftNone:
    DisableFormPanel('This document has no interactive form');
  ftAcroForm:
    BuildFieldList;     // full field navigation and editing available
  ftXfaFull:
    ShowXfaNotice;      // XFA renders from its own XML template;
                        // treat field editing as limited
end;
procedure TFormViewer.HandleTabKey(Shift: TShiftState);
begin
  if ssShift in Shift then
    PdfView.FocusPreviousFormField
  else
    PdfView.FocusNextFormField;
  UpdateFieldStatus;  // e.g. "Field 4 of 17: InvoiceDate"
end;
procedure TFormViewer.FillAndSave(const Values: array of WString;
  const OutputPath: string);
var
  i: Integer;
begin
  for i := 0 to Pdf.FormFieldCount - 1 do
    Pdf.FormField[i] := Values[i];   // writes /V only

  // Rebuild the /AP appearance streams; without this the form
  // looks blank in Acrobat until each field is clicked
  Pdf.GenerateFormAppearances;

  Pdf.SaveAs(OutputPath);
end;

Comprobación antes de publicar

Revise el archivo de salida con las mismas herramientas que usará el cliente o el archivo documental. Registre versión del componente, datos de prueba, versión del validador y resultado observado