Menghasilkan output arsip PDF/A-4
Ikhtisar
Bagian berjudul “Ikhtisar”Gunakan resep ini untuk menghasilkan output arsip PDF/A-4 (International Organization for Standardization (ISO) 19005-4) dengan PdfAManager edisi Pro. Saat Anda menyimpan dokumen, NextPDF menjadwalkan OutputIntent, profil International Color Consortium (ICC) tersemat, dan metadata identifikasi. NextPDF menghasilkan output yang ditargetkan agar sesuai; validator independenlah yang menentukan kesesuaiannya. Resep ini mengikuti examples/32-pdfa4-icc.php.
Instalasi
Bagian berjudul “Instalasi”composer require nextpdf/core:^3composer require nextpdf/proPDF/A-4 adalah fitur level Pro. Pada instalasi Core saja, enablePdfA() memunculkan InvalidConfigException. Pesan tersebut menyebutkan kapabilitas security.pdfa yang hilang dan menunjuk ke solusi composer require nextpdf/pro. Untuk verifikasi, Anda memerlukan validator PDF/A di PATH. Contoh-contoh ini menggunakan veraPDF dengan --flavour 4.
Tinjauan konseptual
Bagian berjudul “Tinjauan konseptual”PDF/A-4 adalah profil arsip ISO 19005-4 yang dibangun di atas ISO 32000-2 (PDF 2.0). Berkas yang sesuai bersifat mandiri dan deterministik untuk warna. Berkas tersebut mendeklarasikan OutputIntent yang merujuk ke profil tujuan ICC tersemat, sehingga warna dapat direproduksi tanpa sumber daya eksternal (§6.2.3). Setiap program fon disematkan (§6.2.10.4.1). Dokumen tersebut memuat metadata identifikasi pdfaid dalam Extensible Metadata Platform (XMP) (§6.7.3). Berkas tersebut tidak dienkripsi (§6.6.4 — PDF/A melarang kunci trailer Encrypt).
NextPDF memodelkan PDF/A dengan enum ConformanceMode bertipe. enablePdfA() membuat instans PdfAManager edisi Pro dan secara default menggunakan ConformanceMode::PdfA4. Selama save(), manajer menjadwalkan OutputIntent, aliran ICC, dan skema ekstensi XMP. Diskriminator pdfaPart() dan pdfaConformanceLetter() menjaga metadata pdfaid:part / pdfaid:conformance tetap selaras dengan varian yang dipilih (basis 4, 4e, 4f). Profil dasar tidak menuliskan huruf pdfa:conformance, sebagaimana disyaratkan oleh bagian tersebut.
Permukaan API
Bagian berjudul “Permukaan API”Permukaan application programming interface (API) dihasilkan dari PHPDoc. Gunakan titik masuk utama berikut:
\NextPDF\Core\Document::createStandalone(): DocumentDocument::enablePdfA(?object $version = null): static\NextPDF\Support\CapabilityRegistry::getInstance()->get('security.pdfa')->isAvailable(): bool\NextPDF\Conformance\ConformanceMode::PdfA4/PdfA4e/PdfA4fConformanceMode::pdfaPart(): 2|3|4|nulldanConformanceMode::pdfaConformanceLetter(): string
Contoh kode — Mulai cepat
Bagian berjudul “Contoh kode — Mulai cepat”<?php
declare(strict_types=1);
require_once __DIR__ . '/../vendor/autoload.php';
use NextPDF\Core\Document;use NextPDF\Support\CapabilityRegistry;
$out = __DIR__ . '/output/32-pdfa4-icc.pdf';
// Probe before activating a Pro-gated feature so a Core-only install// gets an actionable message instead of a stack trace.$registry = CapabilityRegistry::getInstance();if (!$registry->get('security.pdfa')->isAvailable()) { fwrite(STDERR, "PDF/A-4 requires nextpdf/pro. Run: composer require nextpdf/pro\n"); exit(1);}
$doc = Document::createStandalone();$doc->enablePdfA(); // defaults to ConformanceMode::PdfA4$doc->setTitle('Archival Record 2026-0042');$doc->setLanguage('en');$doc->addPage();$doc->setFont('helvetica', '', 12);$doc->cell(0, 10, 'This document targets PDF/A-4.', newLine: true);$doc->save($out); // PdfAManager emits OutputIntent + ICC + XMP here
echo "Created: output/32-pdfa4-icc.pdf\n";Contoh kode — Produksi
Bagian berjudul “Contoh kode — Produksi”Gunakan program mandiri ini di dalam harness. Di lingkungan produksi, jadikan putusan validator sebagai gerbang build. Keberhasilan save() membuktikan bahwa NextPDF telah menuliskan artefak; hanya validator yang membuktikan kesesuaian.
<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;use NextPDF\Exception\InvalidConfigException;use NextPDF\Support\CapabilityRegistry;
$out = getenv('NEXTPDF_COOKBOOK_OUTPUT') ?: (__DIR__ . '/archival.pdf');
if (!CapabilityRegistry::getInstance()->get('security.pdfa')->isAvailable()) { fwrite(STDERR, "PDF/A-4 requires nextpdf/pro. Run: composer require nextpdf/pro\n"); exit(1);}
try { $doc = Document::createStandalone(); $doc->enablePdfA(); // ConformanceMode::PdfA4
$doc->setTitle('Archival Record 2026-0042'); $doc->setLanguage('en'); $doc->addPage(); $doc->setFont('helvetica', '', 12); $doc->cell(0, 10, 'Long-term archival record. PDF/A-4 (ISO 19005-4).', newLine: true);
// Do NOT call setEncryption(): PDF/A prohibits the Encrypt key and // the call raises an incompatibility exception in either order. $doc->save($out);} catch (InvalidConfigException $e) { fwrite(STDERR, "PDF/A-4 activation failed: {$e->getMessage()}\n"); exit(1);}
$exitCode = 0;$report = [];exec('verapdf --flavour 4 ' . escapeshellarg($out), $report, $exitCode);
if ($exitCode !== 0) { fwrite(STDERR, "veraPDF FAILED — output is not PDF/A-4 conforming\n"); fwrite(STDERR, implode("\n", $report) . "\n"); exit(1);}
echo "veraPDF PASS — archival.pdf is reported PDF/A-4 conforming\n";Pada host yang memiliki nextpdf/pro terpasang dan verapdf melaporkan berkas tersebut sesuai, output standar (STDOUT) yang diharapkan adalah:
veraPDF PASS — archival.pdf is reported PDF/A-4 conformingPada host yang hanya memiliki Core, program keluar dengan kode bukan nol setelah menulis PDF/A-4 requires nextpdf/pro. Run: composer require nextpdf/pro ke standard error (STDERR). Jika verapdf melaporkan masalah, program keluar dengan kode bukan nol setelah veraPDF FAILED — output is not PDF/A-4 conforming. Pilihan kata tersebut mengaitkan putusan dengan veraPDF; NextPDF tidak menyatakan kesesuaian PDF/A-4.
Kasus tepi & jebakan
Bagian berjudul “Kasus tepi & jebakan”- Gerbang Pro. Pada instalasi Core saja,
enablePdfA()melemparkanInvalidConfigException. Pesan tersebut menyebutkansecurity.pdfadan solusicomposer require nextpdf/pro. Periksa registry terlebih dahulu untuk menampilkan pesan yang jelas bagi operator. - Konflik enkripsi. Jika Anda memanggil
setEncryption(),useAesGcm(), atausetPublicKeyEncryption()pada dokumen PDF/A, NextPDF memunculkan pengecualian ketidakcocokan apa pun urutan pemanggilannya. PDF/A-4 melarang kunci trailerEncrypt(ISO 19005-4 §6.6.4). - Varian kesesuaian. Berikan
PdfAVersionedisi Pro keenablePdfA()untuk4e(teknik, 3D) atau4f(lampiran berkas). Profil dasar tidak menuliskan hurufpdfa:conformance;4e/4fmenetapkanE/F. DiskriminatorConformanceModemenjagapdfaid:parttetap konsisten. - Penandaan bersifat independen. PDF/A-4 dasar memperlakukan penandaan sebagai opsional. Untuk hasil yang sekaligus aksesibel dan layak arsip, aktifkan mode tagged dan PDF/A secara terpisah; lihat resep PDF/UA-2.
- Gerbangnya adalah validator. Keberhasilan
save()berarti artefak telah dituliskan, bukan berarti berkas tersebut sesuai. Jangan menyatakan kesesuaian PDF/A-4 sebelum validator lulus.
Kinerja
Bagian berjudul “Kinerja”OutputIntent menambahkan satu aliran profil ICC (beberapa ratus KB untuk sRGB) ditambah paket XMP. Penyematan fon mendominasi ukuran ketika dokumen menggunakan fon non-base-14. Untuk dokumen arsip yang umum, resep ini tetap berada dalam anggaran 2000 ms / 128 MB. Profil reproduksibilitas semantik berlaku: bandingkan hasil yang berorientasi validator berdasarkan abstract syntax tree (AST) struktural beserta metadata, bukan byte mentah.
Catatan keamanan
Bagian berjudul “Catatan keamanan”Residensi data & mitigasi PII
Bagian berjudul “Residensi data & mitigasi PII”Output arsip dirancang agar berumur panjang dan mandiri. Data pribadi apa pun dalam konten akan bertahan selama masa hidup arsip. Profil ICC tersemat dan metadata juga menyertai berkas tersebut. Terapkan kebijakan retensi dan minimalisasi sebelum mengarsipkan. PDF/A-4 tidak menyediakan semantik redaksi.
Telemetri aman & pembersihan log
Bagian berjudul “Telemetri aman & pembersihan log”Resep ini hanya menulis satu baris progres yang tetap. Output veraPDF dapat menyertakan fragmen konten; jauhkan log validator dari sink log bersama untuk dokumen yang berisi konten sensitif.
Model ancaman
Bagian berjudul “Model ancaman”PDF/A-4 adalah profil fidelitas arsip, bukan kontrol integritas atau autentisitas. Profil ini tidak menandatangani berkas atau membuat manipulasi berkas menjadi terlihat. Kombinasikan dengan tanda tangan ketika provenans penting. Resep terpisah membahas tanda tangan. Enkripsi saling eksklusif dengan PDF/A menurut spesifikasi.
Perilaku mode FIPS
Bagian berjudul “Perilaku mode FIPS”Resep ini tidak melakukan operasi kriptografis apa pun. Mode Federal Information Processing Standards (FIPS) tidak mengubah perilaku resep ini. PDF/A-4 melarang enkripsi, sehingga tidak ada cipher yang dipilih.
Kesesuaian
Bagian berjudul “Kesesuaian”| Pernyataan | Spesifikasi | Klausa | reference_id |
|---|---|---|---|
| PDF/A-4 mensyaratkan OutputIntent yang merujuk profil ICC tersemat. | ISO 19005-4 | §6.2.3 | |
| Warna bersifat independen dari perangkat melalui profil tujuan output. | ISO 19005-4 | §6.2.4.3 | |
| Setiap program fon disematkan. | ISO 19005-4 | §6.2.10.4.1 | |
| Dokumen tersebut memuat identifikasi pdfaid dalam XMP. | ISO 19005-4 | §6.7.3 | |
| Enkripsi dilarang dalam PDF/A-4. | ISO 19005-4 | §6.6.4 | |
| Validator, bukan produsen, yang menentukan kesesuaian. | ISO 19005-4 | §6.7.3 |
NextPDF menghasilkan output yang ditargetkan agar sesuai dengan PDF/A-4. Dukungan bukanlah kesesuaian; profil yang teruji bukanlah sertifikasi. Resep ini tidak menyatakan kesesuaian; validator independen seperti veraPDF yang membuat penetapan tersebut. Jadikan putusannya sebagai gerbang build.