Soporte AcroForm

Descripción general

Desde HotPDF v2.5.0 la biblioteca puede emitir formularios interactivos (AcroForm) según PDF 1.7 ISO 32000-1 section 12.7. Cada campo de formulario se crea como una anotación Widget fusionada con el diccionario del campo y se registra automáticamente en el documento, de modo que la entrada global /AcroForm se agrega al Catalog cuando el documento se finaliza en EndDoc

Tipos de campo admitidos

  • Text fields (/FT /Tx) via THPDFPage.AddTextField. Supports single-line, multi-line, password, comb, file-select, rich-text, scroll and spell-check options through THPDFFormFieldFlags.
  • Check boxes (/FT /Btn, no Pushbutton/Radio bits) via THPDFPage.AddCheckBox with a configurable export value name and initial checked state.
  • Radio buttons (/FT /Btn /Ff Radio) mediante THPDFPage.AddRadioButton. Varias llamadas con el mismo nombre de grupo se fusionan bajo un campo padre compartido con un arreglo /Kids, exactamente como exige 12.7.4.2
  • Combo boxes (/FT /Ch /Ff Combo) via THPDFPage.AddComboBox. Pass an open array of options.
  • List boxes (/FT /Ch) via THPDFPage.AddListBox. ffMultiSelect enables multi-select.
  • Push buttons (/FT /Btn /Ff Pushbutton) mediante THPDFPage.AddPushButton con leyenda opcional (/MK /CA). Desde HotPDF v2.31.0, THPDFPage.AddPushButtonWithAction adjunta un diccionario de acción PDF al widget para que al hacer clic en el botón se ejecute /SubmitForm (publicar valores de campo en una URL, PDF 1.2 12.7.5.2), /ResetForm (PDF 1.2 12.7.5.3), /JavaScript (ejecutar un fragmento JS, PDF 1.3 12.6.4.16) o /URI (abrir una URL en el navegador del sistema, PDF 1.1 12.6.4.7)
  • Signature placeholder fields (/FT /Sig) mediante THPDFPage.AddSignatureField desde HotPDF v2.12.0. El diccionario AcroForm obtiene automáticamente /SigFlags 3 (SignaturesExist + AppendOnly) cuando hay al menos un campo de firma. El campo queda sin firmar para que herramientas externas (Adobe Acrobat, Foxit, bibliotecas dedicadas CMS / PKCS#7) puedan adjuntar la firma criptográfica real después de guardar el archivo
  • Flujo de firma in-place mediante THPDFPage.AddSignedSignatureField + THotPDF.PreparePDFForSigning + THotPDF.InsertSignatureHex desde HotPDF v2.23.0. La primera llamada reserva un diccionario de firma /V con placeholders /ByteRange y /Contenido. Después de guardar el documento, la aplicación host llama a PreparePDFForSigning para parchear /ByteRange y conocer qué rangos de archivo debe hashear. Después de producir externamente una firma detached CMS / PKCS#7 (Windows CryptoAPI, OpenSSL, bibliotecas de firma dedicadas), llama a InsertSignatureHex para colocar el hexadecimal de firma en el placeholder sin alterar ningún otro byte del archivo

Inspección y actualización de campos de formulario cargados

Desde HotPDF v2.121.9, las aplicaciones pueden cargar un PDF AcroForm existente con THotPDF.LoadFromFile, enumerar sus campos, leer sus nombres, tipos y valores, cambiar valores de campo, alternar la bandera de solo lectura y guardar el grafo de objetos cargado con THotPDF.SaveLoadedDocument Esta ruta está pensada para ediciones persistidas en un documento ya cargado; no llame a BeginDoc / EndDoc solo para guardar cambios de valores de campo cargados

Los helpers de campo son GetFormFieldCount, GetFormFieldName, GetFormFieldType, GetFormFieldValue, SetFormFieldValue y SetFormFieldReadOnly. La búsqueda de campo acepta un índice de campo basado en cero o el nombre de campo completamente calificado. Los valores THPDFLoadedFormFieldType devueltos son lfftText, lfftButton, lfftChoice, lfftSignature o lfftUnknown

Ejemplo Pascal para campos cargados

HPDF.LoadFromFile('InputForm.pdf');
for I := 0 to HPDF.GetFormFieldCount - 1 do
  Writeln(HPDF.GetFormFieldName(I), ' = ', HPDF.GetFormFieldValue(I));

HPDF.SetFormFieldValue('CustomerName', 'Bob');
HPDF.SetFormFieldValue('Plan', 'Premium');
HPDF.SetFormFieldReadOnly('CustomerName', True);
HPDF.SaveLoadedDocument('UpdatedForm.pdf');

Acciones adicionales de campo

AttachFieldKeyStrokeAction, AttachFieldFormatAction, AttachFieldValidateAction y AttachFieldCalculateAction adjuntan JavaScript al diccionario /AA del campo para los disparadores PDF /K, /F, /V y /C. Úselos después de crear o cargar un campo cuando el filtrado, el formato, la validación o el cálculo deban pertenecer al campo.

Generación de apariencias

De forma predeterminada, el diccionario /AcroForm emitido establece /NeedAppearances true y delega el renderizado de appearance streams al visor consumidor (Adobe Reader, Foxit, Chrome, navegadores, Apple Preview). Establezca THotPDF.AutoFormAppearances en true antes de agregar campos y HotPDF preconstruirá Form XObjects /AP /N (PDF 1.7 8.10) para cada campo de texto, botón push, opción (combo / lista) y los estados Yes / Off de cada hijo checkbox / radio. El diccionario AcroForm entonces lleva /NeedAppearances false y una entrada de recursos predeterminados /DR que referencia las 14 fuentes base estándar (Helv Helvetica, ZaDb ZapfDingbats), de modo que los renderizadores que ignoran /NeedAppearances aun así dibujen correctamente el contenido del campo Disponible desde HotPDF v2.28.0

Field flag reference (THPDFFormFieldFlags)

  • ffReadOnly, ffRequired, ffNoExport — common Table 227 flags applicable to every field type.
  • ffMultiline, ffPassword, ffFileSelect, ffDoNotSpellCheck, ffDoNotScroll, ffComb, ffRichText — Tx-specific (Table 228).
  • ffEdit, ffSort, ffMultiSelect, ffDoNotSpellCheck, ffCommitOnSelChange — Ch-specific (Table 230).

Pascal example

HPDF.BeginDoc;
HPDF.AddPage;
HPDF.CurrentPage.AddTextField('Name', '', Rect(50, 100, 250, 120));
HPDF.CurrentPage.AddCheckBox('Agree', 'Yes', Rect(50, 130, 70, 145), True);
HPDF.CurrentPage.AddRadioButton('Color', 'Red',   Rect(50, 160, 70, 175), True);
HPDF.CurrentPage.AddRadioButton('Color', 'Green', Rect(80, 160, 100, 175));
HPDF.CurrentPage.AddRadioButton('Color', 'Blue',  Rect(110, 160, 130, 175));
HPDF.CurrentPage.AddComboBox('Country', 'CN',
                             ['CN', 'US', 'JP'], Rect(50, 190, 250, 210));
HPDF.EndDoc;

Limitations

  • El generador AutoFormAppearances actualmente compone solo valores ASCII / codificables como WinAnsi; para campos cuyo /V contiene texto multibyte (UTF-8), la /AP almacenada renderiza un rectángulo vacío hasta que el visor host regenere la apariencia
  • Los subestados Down (/D) y rollover (/R) no se generan; solo se produce el estado normal (/N)
  • Field name uniqueness is the caller's responsibility; HotPDF does not enforce it.

Véase también