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