|
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
|