AcroForm desteği

Genel bakış

HotPDF v2.5.0'dan beri kitaplık, PDF 1.7 ISO 32000-1 bölüm 12.7 uyarınca etkileşimli formlar (AcroForm) yazabiliyor. Her form alanı, alan sözlüğüyle birleştirilmiş bir Widget ek açıklaması olarak oluşturulur ve otomatik olarak belgeye kaydedilir; böylece belge EndDoc içinde sonlandırılırken global /AcroForm girdisi Catalog'a eklenir.

Desteklenen alan türleri

  • Metin alanları (/FT /Tx), THPDFPage.AddTextField ile. THPDFFormFieldFlags üzerinden tek satır, çok satır, parola, comb, dosya seçimi, zengin metin, kaydırma ve yazım denetimi seçeneklerini destekler.
  • Onay kutuları (/FT /Btn; Pushbutton/Radio bitleri yok), THPDFPage.AddCheckBox ile; yapılandırılabilir export value adı ve başlangıç işaretli durumu destekler.
  • Radyo düğmeleri (/FT /Btn /Ff Radio), THPDFPage.AddRadioButton ile. Aynı grup adıyla yapılan çoklu çağrılar, /Kids dizili paylaşılan bir üst alan altında birleştirilir; 12.7.4.2'nin gerektirdiği tam olarak böyledir.
  • Açılır liste kutuları (/FT /Ch /Ff Combo), THPDFPage.AddComboBox ile. Seçeneklerden oluşan bir açık dizi geçirin.
  • Liste kutuları (/FT /Ch), THPDFPage.AddListBox ile. ffMultiSelect çoklu seçimi etkinleştirir.
  • İtme düğmeleri (/FT /Btn /Ff Pushbutton), isteğe bağlı başlıkla (/MK /CA) THPDFPage.AddPushButton üzerinden. HotPDF v2.31.0'dan beri THPDFPage.AddPushButtonWithAction, widget'a bir PDF eylem sözlüğü ekler; böylece düğmeye tıklamak /SubmitForm (alan değerlerini bir URL'ye gönder, PDF 1.2 12.7.5.2), /ResetForm (PDF 1.2 12.7.5.3), /JavaScript (bir JS parçası çalıştır, PDF 1.3 12.6.4.16) veya /URI (sistem tarayıcısında bir URL aç, PDF 1.1 12.6.4.7) çalıştırır.
  • İmza yer tutucu alanları (/FT /Sig), HotPDF v2.12.0'dan beri THPDFPage.AddSignatureField ile. En az bir imza alanı bulunduğunda AcroForm sözlüğü otomatik olarak /SigFlags 3 (SignaturesExist + AppendOnly) kazanır. Alan imzalanmamış bırakılır; böylece harici araçlar (Adobe Acrobat, Foxit, özel CMS / PKCS#7 imzalama kitaplıkları) dosya kaydedildikten sonra gerçek kriptografik imzayı ekleyebilir.
  • Yerinde imzalama iş akışı; HotPDF v2.23.0'dan beri THPDFPage.AddSignedSignatureField + THotPDF.PreparePDFForSigning + THotPDF.InsertSignatureHex. İlk çağrı, /ByteRange ve /Contents yer tutucuları içeren bir /V imza sözlüğü rezerve eder. Belgeyi kaydettikten sonra ana uygulama, /ByteRange'i yamalamak ve hangi dosya aralıklarının hash'leneceğini öğrenmek için PreparePDFForSigning çağırır. Harici olarak bir CMS / PKCS#7 detached imzası üretildikten sonra (Windows CryptoAPI, OpenSSL, özel imzalama kitaplıkları), InsertSignatureHex çağrısı imza onaltılığını yer tutucunun içine, dosyadaki başka hiçbir bayta dokunmadan bırakır.

Oluşturma zamanı alan sarmalayıcıları

HotPDF v2.292.12'den beri THPDFPage.CreateTextField, CreateCheckBox, CreateRadioButton, CreateComboBox ve CreateListBox yardımcıları; var olan Add... metotlarının oluşturduğu aynı AcroForm widget'larını oluşturur ve anında yapılandırma için hafif bir THPDFAcroFormField sarmalayıcısı döndürür

HotPDF v2.292.26'dan beri THotPDF.SetFormFieldTooltip; var olan Add... metotlarıyla oluşturulan alanlar için PDF /TU kullanıcı ipucunu alan adına göre atar ve sarmalayıcı düzeyindeki THPDFAcroFormField.SetTooltip iş akışıyla eşleşir

HotPDF v2.298.0'dan beri, oluşturma zamanı alan API'leri ve yüklenen belge alan oluşturma API'leri; yinelenen kök alan adlarını, herhangi bir widget kaydedilmeden tanısal bir istisnayla reddeder. Aynı grup adıyla tekrarlanan AddRadioButton çağrıları geçerli kalır; çünkü bunlar tek bir üst alanı paylaşır ve onun /Kids dizisi altına ek alt widget'lar ekler

Sarmalayıcı; /TU araç ipuçları, yaygın alan bayrakları (SetReadOnly, SetRequired, SetNoExport), /DA varsayılan görünüm dizeleri, /AA /K, /AA /F, /AA /V, /AA /C gibi alan düzeyi ek eylemler ve THPDFActionBuilder üzerinden widget fare ya da odak eylemleri için zincirlenebilir ayarlayıcılar ortaya koyar

Oluşturma zamanı sarmalayıcısı Pascal örneği

Field := HPDF.CurrentPage.CreateTextField('Email', '', Rect(50, 80, 250, 104));
Action := THPDFActionBuilder.JavaScript('event.rc = event.value.indexOf("@") > 0;');
try
  Field.SetTooltip('Email address');
  Field.SetRequired(True);
  Field.SetReadOnly(False);
  Field.SetAdditionalAction(fatValidate, Action);
finally
  Action.Free;
  Field.Free;
end;

Yüklenen form alanı incelemesi ve güncellemeleri

HotPDF v2.121.9'dan beri uygulamalar; var olan bir AcroForm PDF'ini THotPDF.LoadFromFile ile yükleyebilir, alanlarını listeleyebilir, adlarını türlerini ve değerlerini okuyabilir, alan değerlerini değiştirebilir, salt okunur bayrağını çevirebilir ve yüklenen nesne grafiğini THotPDF.SaveLoadedDocument ile kaydedebilir. Bu yol, hâlihazırda yüklenmiş bir belgede kalıcı düzenlemeler içindir; yüklenen alan değeri değişikliklerini kaydetmek için BeginDoc / EndDoc çağırmayın.

Alan yardımcıları şunlardır: GetFormFieldCount, GetFormFieldName, GetFormFieldType, GetFormFieldValue, SetFormFieldValue ve SetFormFieldReadOnly. Alan araması, sıfır tabanlı bir alan indeksini ya da tam nitelikli alan adını kabul eder. Döndürülen THPDFLoadedFormFieldType değerleri lfftText, lfftButton, lfftChoice, lfftSignature veya lfftUnknown'dur.

Yüklenen alan Pascal örneği

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');

Alan ek eylemleri

AttachFieldKeyStrokeAction, AttachFieldFormatAction, AttachFieldValidateAction ve AttachFieldCalculateAction sarmalayıcıları; PDF /K, /F, /V ve /C tetikleyicileri için bir alanın /AA sözlüğüne JavaScript ekler. Aynı tetikleyicinin JavaScript, ResetForm, SubmitForm, URI, Hide, ImportData veya zincirli bir /Next eylemi gibi yeniden kullanılabilir bir eylem zinciri çalıştırması gerektiğinde SetFormFieldAdditionalAction'ı ya da adlandırılmış THPDFActionBuilder sarmalayıcılarını kullanın. Widget düzeyi fare ve odak tetikleyicileri de SetFormFieldAnnotationAction ve adlandırılmış fare / odak yardımcılarıyla alan adına göre kurulabilir; eşleşen temizleme yardımcıları ise /AA sözlüğünün gerisine dokunmadan tek bir tetikleyiciyi kaldırır

Görünüm üretimi

Varsayılan olarak yazılan /AcroForm sözlüğü /NeedAppearances true ayarlar ve görünüm stream'i çizimini tüketen okuyucuya (Adobe Reader, Foxit, Chrome, tarayıcılar, Apple Preview) devreder. Alan eklemeden önce THotPDF.AutoFormAppearances'i true yapın; HotPDF her metin alanı, itme düğmesi, seçim (combo / list) ve her onay kutusu / radyo altının Yes / Off durumları için /AP /N Form XObject'lerini (PDF 1.7 8.10) önceden kurar. AcroForm sözlüğü bundan sonra /NeedAppearances false ve standart 14 temel yazı tipine (Helv Helvetica, ZaDb ZapfDingbats) başvuran bir /DR varsayılan kaynaklar girdisi taşır; böylece /NeedAppearances'i yok sayan çiziciler bile alan içeriğini doğru çizer. HotPDF v2.28.0'dan beri mevcut.

Alan bayrağı başvurusu (THPDFFormFieldFlags)

  • ffReadOnly, ffRequired, ffNoExport — her alan türüne uygulanabilen yaygın Tablo 227 bayrakları.
  • ffMultiline, ffPassword, ffFileSelect, ffDoNotSpellCheck, ffDoNotScroll, ffComb, ffRichText — Tx'ye özgü (Tablo 228).
  • ffEdit, ffSort, ffMultiSelect, ffDoNotSpellCheck, ffCommitOnSelChange — Ch'ye özgü (Tablo 230).

Pascal örneği

HPDF.BeginDoc;
HPDF.AddPage;
HPDF.CurrentPage.AddTextField('Name', '', Rect(50, 100, 250, 120));
HPDF.SetFormFieldTooltip('Name', 'Customer name');
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;

Sınırlamalar

  • AutoFormAppearances üreteci şu anda yalnızca ASCII / WinAnsi ile kodlanabilen değerleri diziyor; /V'si çok baytlı (UTF-8) metin içeren alanlarda saklanan /AP, ana okuyucu görünümü yeniden üretene dek boş bir dikdörtgen çizer.
  • Down (/D) ve rollover (/R) alt durumları üretilmez; yalnızca normal (/N) durum üretilir.
  • Yeni AcroForm widget'ları oluşturulurken alan adları, yinelenen kök girdileri açısından denetlenir; radyo üst / widget deseninin ötesindeki hiyerarşik kısmi ad oluşturma çağıranın sorumluluğunda kalır.

Ayrıca bakın