Form alanlarını statik sayfa içeriğine düzleştirme
Bir bakışta
“Bir bakışta” başlıklı bölümBu tarifi, etkileşimli bir AcroForm’u düzleştirmek için kullanın. NextPDF, her alanın geçerli değerini sayfa içerik akışına sıradan grafikler olarak çizer ve ardından AcroForm sözlüğünü kaldırır. Sonuç, form desteği olmayan okuyucularda bile her yerde aynı görünen, alanların statik temsili olan etkileşimli olmayan bir formdur (ISO 32000-2 §12.7). Tarif, formu examples/30-form-fields.php dosyasından oluşturur ve ardından flattenForms() çağrısını yapar.
Kurulum
“Kurulum” başlıklı bölümcomposer require nextpdf/core:^3Kavramsal genel bakış
“Kavramsal genel bakış” başlıklı bölümDüzleştirme, her bileşeni bulunduğu sayfaya “basar”. Metin alanları BT … Tj … ET metnine dönüşür. Onay kutuları ve radyo düğmeleri çizilmiş yollara dönüşür. Seçim alanları, seçili öğelerini işler. İtme düğmeleri, düğmeye benzer statik bir kutu olarak işlenir. Bu davranış, alan içeriği önceden bilindiğinde statik olarak tanımlanmış görünüm için belirtilen spesifikasyon modeliyle eşleşir (ISO 32000-2 §12.7). NextPDF değerleri sayfaya gömdüğü için kullanımdan kaldırılan NeedAppearances mekanizmasına gerek yoktur.
Profil structural olarak ayarlanmıştır. Belge, bir fragman (trailer) /ID değeri taşır; bu değer, iki çalıştırma karşılaştırılmadan önce son geçişte normalleştirilir.
API yüzeyi
“API yüzeyi” başlıklı bölümNextPDF\Core\Concerns\HasFormFields::flattenForms(): static, belgede oluşturulan her alanı statik sayfa içeriğine düzleştirir ve AcroForm’u kaldırır. Hiç alan yoksa, hiçbir şey yapmaz. Dahili olarak işi NextPDF\Form\FormFlattener sınıfına devreder.
Formu alan oluşturucularıyla kurun. Ayrıntılı adımlar için bkz. PDF formu oluşturma ve önceden doldurma. Ardından flattenForms() işlevini save() çağrısından önce çağırın.
Kod örneği — hızlı başlangıç
“Kod örneği — hızlı başlangıç” başlıklı bölüm<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;
$doc = Document::createStandalone();$doc->setTitle('Flattened Form');$doc->addPage();
$doc->textField(name: 'full_name', x: 20, y: 30, w: 90, h: 8, default: 'Ada Lovelace');$doc->checkBox(name: 'agree', x: 20, y: 45, size: 5, checked: true);
// Bake the field values into the page; the AcroForm is removed.$doc->flattenForms();
$doc->save(__DIR__ . '/flattened.pdf');echo "Wrote flattened.pdf (no interactive fields)\n";Kod örneği — üretim
“Kod örneği — üretim” başlıklı bölümAşağıdaki tam örnek, çok bölümlü formu examples/30-form-fields.php dosyasından oluşturur. Formu önceden doldurur, düzleştirir ve test koşumu için NEXTPDF_COOKBOOK_OUTPUT değerine yazar.
<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;
$doc = Document::createStandalone();$doc->setTitle('Customer Registration — Flattened');$doc->addPage();
$doc->setFont('helvetica', 'B', 20);$doc->cell(0, 14, 'Customer Registration (read-only copy)', newLine: true);$doc->ln(4);
$leftMargin = 15.0;$fieldX = 70.0;$fieldW = 120.0;$fieldH = 8.0;$rowSpacing = 12.0;
$prefill = [ 'full_name' => 'Ada Lovelace', 'phone' => '+44 20 7946 0000', 'company' => 'Analytical Engines Ltd',];
$y = 40.0;$doc->setFont('helvetica', '', 10);foreach ($prefill as $name => $value) { $doc->setXY($leftMargin, $y); $doc->cell(50, $fieldH, ucwords(str_replace('_', ' ', $name)) . ':'); $doc->textField(name: $name, x: $fieldX, y: $y, w: $fieldW, h: $fieldH, default: $value); $y += $rowSpacing;}
$y += 6;$doc->setXY($leftMargin, $y);$doc->cell(0, 7, 'Newsletter');$doc->checkBox(name: 'newsletter', x: $leftMargin + 70, y: $y, size: 5, checked: true);
// Flatten: widgets become static page content; the AcroForm is dropped.$doc->flattenForms();
$out = getenv('NEXTPDF_COOKBOOK_OUTPUT');$doc->save($out !== false ? $out : __DIR__ . '/registration-flattened.pdf');
echo "Wrote flattened registration form\n";Beklenen çıktı:
Wrote flattened registration formÇıktı, etkileşimli alanlar olmadan aynı değerleri gösterir. Form desteği olmayan bir okuyucu da aynı şekilde işler.
Uç durumlar ve tuzaklar
“Uç durumlar ve tuzaklar” başlıklı bölüm- Düzleştirme geri alınamaz.
save()çağrısını yaptıktan sonra etkileşimli alanlar kaybolur. Daha sonra değerleri düzenlemeniz gerekebilirse, düzleştirilmemiş kaynağı saklayın. - Çağrı sırası.
flattenForms()işlevini, alanları oluşturduktan sonra vesave()öncesinde çalıştırın. Alan yokken çağrılması hiçbir işlem yapmaz; bu güvenlidir. - İmza alanları düzleştirilmez. Bir
/Sigalanının görsel yüzeyi, yeniden işlenebilir bir değer değil, kendi Cryptographic Message Syntax (CMS) SignedData yapısından üretilen bir görünümdür. Bu yüzeyi yeniden rasterleştirmek, artık doğrulanabilir hiçbir imzayla eşleşmeyen statik bir “hayalet” grafik oluşturur. Bu nedenle düzleştirici, imza alanlarını bilerek atlar. Formu imzalamadan önce düzleştirin, asla sonra değil. - Onay kutusu doğruluk değeri. Bir onay kutusu, değeri
Yes/On/1/trueolduğunda onay işaretini işler. Boş değer veyaOffdeğeri yalnızca kutuyu işler. - Düzleştirilmiş metnin yazı tipi. Düzleştirilmiş metin, geçerli yazı tipini kullanır. Yazı tipi ayarlanmamışsa Helvetica’ya geri döner. Çince, Japonca ve Korece (CJK) veya özel yazı tipi içeren alan değerleri için istediğiniz yazı tipini
flattenForms()öncesinde ayarlayın.
Performans
“Performans” başlıklı bölümDüzleştirme, alan sayısıyla doğrusal olarak ölçeklenir. Her alan için NextPDF, sınırlandırılmış bir içerik bloğu ekler ve ardından AcroForm nesnesini kaldırır. Tipik formlar, 1500 ms / 64 MB bütçesinin oldukça altında kalır.
Güvenlik notları
“Güvenlik notları” başlıklı bölümDüzleştirme, alan değerlerini normal okuyucularda düzenlenemez hale getirir. Bu, erişim denetimi değil, bir sunum değişikliğidir. Değerler sayfa içeriğinde görünür kalır ve herhangi bir metin aracı bunları çıkarabilir. Düzleştirmeyi, bir karartma (redaction) veya hassas değerler için koruma yöntemi olarak görmeyin. Gizlilik için İzinlerle şifreleme sayfasını kullanın. İzin bitleri de okuma kısıtlamalarını zorunlu kılmadığından, bu sayfadaki okuyucu iş birliğine dayalı uyarıyı da okuyun. İmzalanmış bir belgeyi asla düzleştirmeyin. Önce düzleştirin, sonra imzalayın.
Uygunluk
“Uygunluk” başlıklı bölüm| İfade | Spesifikasyon | Madde | reference_id |
|---|---|---|---|
| Düzleştirilmiş bir form, alanların etkileşimli olmayan (statik) bir temsilidir. | ISO 32000-2 | §12.7 | |
| Alan görünümü, içeriği önceden bilindiğinde statik olarak tanımlanır. | ISO 32000-2 | §12.7 | |
Gömülü görünümler, kullanımdan kaldırılan NeedAppearances bayrağını gereksiz kılar. | ISO 32000-2 | §12.7 |
NextPDF, alıntılanan maddelerde açıklanan statik yapıyı üretir. Genel bir ISO 32000-2 uygunluğu iddiasında bulunmaz.