Lewati ke konten

Kesesuaian PDF/A-4: apa yang dihasilkan NextPDF untuk ISO 19005-4

Pernyataan batasan. NextPDF menghasilkan keluaran yang dimaksudkan agar sesuai dengan PDF/A-4. Pustaka ini tidak menyatakan kesesuaian; validator seperti veraPDF yang melakukannya.

PDF/A-4 adalah ISO 19005-4:2020, profil pengarsipan berbasis PDF 2.0. NextPDF Core menyediakan diskriminator ConformanceMode (PdfA4, PdfA4e, PdfA4f). Mesin Premium nextpdf/pro menghasilkan OutputIntent, profil ICC tertanam, dan skema identifikasi Extensible Metadata Platform (XMP) pdfaid selama save(). Pustaka ini menghasilkan artefak; veraPDF yang menentukan kesesuaiannya. ISO 19005-4 §6.7.3 menyatakan secara eksplisit bahwa properti pdfaid:part/pdfaid:rev “tidak dengan sendirinya menentukan kesesuaian”.

Terminal window
composer require nextpdf/core:^3
composer require nextpdf/pro # OutputIntent + ICC + XMP authoring

Core mendaftarkan kapabilitas security.pdfa, tetapi melaporkannya tidak tersedia tanpa nextpdf/pro. Dalam kasus tersebut, enablePdfA() melempar InvalidConfigException beserta jalur peningkatan, alih-alih menghasilkan berkas yang tidak sesuai.

Document::enablePdfA(?object $version = null) memetakan masukan enum PdfAVersion ke kasus ConformanceMode. Secara default, metode ini memilih ConformanceMode::PdfA4 untuk masukan yang tidak dikenali ('4e' → PdfA4e, '4f' → PdfA4f). Mode tersebut menetapkan tiga kewajiban keluaran untuk berkas yang sesuai:

  • OutputIntent + ICC — §6.2.3 mengizinkan berkas yang sesuai untuk menyatakan karakteristik warnanya dengan OutputIntent PDF/A-4 yang merujuk pada aliran ICC (International Color Consortium) DestOutputProfile. Menurut §6.2.4.1, ini adalah salah satu dari dua rute yang diizinkan untuk warna yang tidak bergantung pada perangkat (rute lainnya adalah menyatakan ruang warna yang tidak bergantung pada perangkat secara langsung). OutputIntent adalah rute yang digunakan NextPDF, bukan persyaratan tanpa syarat dari standar.
  • Identifikasi pdfaid — §6.7.3 mewajibkan skema identifikasi PDF/A dalam XMP pada tingkat dokumen (namespace pdfaid dari AIIM) dengan pdfaid:part/pdfaid:rev. PDF/A-4e dan PDF/A-4f juga menetapkan pdfa:conformance (E / F). §6.7.3 menyatakan bahwa berkas yang tidak sesuai dengan keduanya tidak boleh menyediakan nilai pdfa:conformance.
  • Penyematan fon — §6.2.10 mewajibkan semua fon yang digunakan untuk rendering agar disematkan.

NextPDF menghasilkan artefak ini. Pustaka ini tidak menjalankan penentuan kesesuaian §5. Itu adalah tugas veraPDF, dan §6.7.3 mengarahkan penentuan tersebut ke proses itu.

MetodeEfek
enablePdfA(?object $version = null): staticMerutekan ke ConformanceMode::PdfA4/PdfA4e/PdfA4f; menjadwalkan OutputIntent + ICC + XMP pada save(). Melempar InvalidConfigException|PageLayoutException|CompressionException jika nextpdf/pro tidak ada.
ConformanceMode::pdfaPart(): ?intMengembalikan bagian ISO 19005 untuk mode aktif (4 untuk PdfA4*).
ConformanceMode::pdfaConformanceLetter(): stringMengembalikan huruf pdfa:conformance (E / F) atau kosong.
<?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';
$registry = CapabilityRegistry::getInstance();
if (!$registry->get('security.pdfa')->isAvailable()) {
fwrite(STDERR, "PDF/A-4 requires nextpdf/pro.\n");
exit(1);
}
try {
$doc = Document::createStandalone();
$doc->enablePdfA(); // ConformanceMode::PdfA4
$doc->setTitle('Archival Record 2026-0042');
$doc->setLanguage('en');
$doc->writeHtml('<h1>Archival record</h1><p>Body.</p>');
$doc->save($out); // OutputIntent + ICC + XMP scheduled here
} catch (InvalidConfigException $e) {
fwrite(STDERR, $e->getMessage() . "\n");
exit(1);
}
echo "Wrote {$out} — validate: verapdf --flavour 4 {$out}\n";

Gunakan putusan validator sebagai gerbang build. Jalankan verapdf --flavour 4 pada keluaran, dan gagalkan build jika kode keluar bukan-nol. Putusan validator adalah gerbangnya; artefak yang dihasilkan pustaka adalah masukan untuk itu, bukan putusan itu sendiri. Lihat /cookbook/php/pdfa4-conformance-gate/ untuk alur proses lengkap dengan gerbang.

  • Aktifkan sebelum konten. Panggil enablePdfA() sebelum Anda menambahkan konten. Pengaktifan secara retroaktif tidak memproses ulang objek yang sudah ditulis.
  • Tanpa enkripsi. PDF/A melarang kunci Encrypt. Jangan panggil setEncryption() pada dokumen PDF/A. Enkripsi berkaitan dengan kerahasiaan, bukan integritas pengarsipan, dan keduanya saling eksklusif di sini.
  • pdfa:conformance bersifat kondisional. Hanya PDF/A-4e dan PDF/A-4f yang menetapkannya. Menghasilkannya pada berkas PDF/A-4 biasa itu sendiri merupakan pelanggaran kesesuaian (§6.7.3) — kasus ConformanceMode mencegah hal itu berdasarkan konstruksinya.
  • Lampiran PDF/A-4f. Berkas yang tertanam dalam berkas PDF/A-4f harus membawa kunci F dan UF (Desc disarankan) sesuai §6.7.5. Ini mendukung jalur hibrida ZUGFeRD/Factur-X.

Penyematan OutputIntent + ICC menambahkan aliran ICC berukuran tetap (profil ruang kerja) dan paket XMP pada save(). Anggarannya adalah waktu wall-clock ≤ 1500 ms dan memori puncak ≤ 128 MB untuk dokumen umum.

PDF/A-4 melarang enkripsi. Profil ini merupakan batasan untuk pengarsipan dan umur panjang, bukan kendali keamanan. Penyimpanan kunci dan kebijakan verifikator berada di luar lingkup profil ini; lihat pusat kepercayaan.

Pembuatan PDF/A-4 berjalan di dalam proses dan hanya menulis dokumen, profil ICC tertanam, dan paket XMP. Tidak ada konten yang meninggalkan proses. Informasi yang dapat diidentifikasi secara pribadi (PII) dalam konten sumber adalah tanggung jawab integrator. Profil ini tidak melakukan redaksi.

Contoh ini hanya menulis jalur keluaran dan perintah validator ke STDERR. Ia tidak mencatat byte dokumen apa pun. Resep ini menghormati NEXTPDF_COOKBOOK_OUTPUT dan tidak pernah mencetak PDF ke STDOUT.

Berkas PDF/A-4 tidak memiliki kontrol akses. Siapa pun yang memiliki berkas dapat membacanya. Profil ini mendukung umur panjang rendering, bukan kerahasiaan. Perlakukan aliran ICC OutputIntent sebagai publik.

Pembuatan PDF/A-4 tidak melakukan kriptografi. Tanda tangan digital pada berkas PDF/A-4 (PDF/A-4 §6.5 mengizinkan profil PAdES) dibahas dalam resep tanda tangan terpisah dan mewarisi postur FIPS dari resep tersebut. Halaman ini tidak membuat klaim penandatanganan.

KlaimSpesifikasiKlausulreference_id
Berkas PDF/A-4 boleh menyatakan karakteristik warnanya dengan OutputIntent PDF/A yang merujuk pada profil ICC DestOutputProfile.ISO 19005-4§6.2.3
Warna yang tidak bergantung pada perangkat boleh dinyatakan secara langsung atau tidak langsung melalui DestOutputProfile OutputIntent (salah satu dari dua rute yang diizinkan).ISO 19005-4§6.2.4.1
Versi PDF/A diidentifikasi melalui skema identifikasi PDF/A (pdfaid) dalam XMP dokumen.ISO 19005-4§6.7.3
pdfaid:part / pdfaid:rev tidak dengan sendirinya menentukan kesesuaian; penentuan dilakukan sesuai Klausul 5.ISO 19005-4§6.7.3
Berkas yang tidak sesuai dengan PDF/A-4e maupun PDF/A-4f tidak boleh menyediakan nilai pdfa:conformance.ISO 19005-4§6.7.3
Berkas yang tertanam dalam PDF/A-4f memerlukan kunci F dan UF (Desc disarankan).ISO 19005-4§6.7.5
Semua fon yang digunakan untuk rendering harus disematkan.ISO 19005-4§6.2.10
Penggunaan transparansi / warna bergantung pada OutputIntent yang dinyatakan.ISO 19005-4§6.2.9

Sitasi menggunakan id-klausul serta penunjuk reference_id ke korpus verifikasi. Tidak ada teks standar yang direproduksi; NextPDF meringkas klausul dengan kata-katanya sendiri.