Lewati ke konten

Memecahkan masalah kegagalan validasi PDF/A dan PDF/UA

Entri berikut membahas kegagalan yang dilaporkan mesin saat dokumen harus tetap sesuai dengan profil Portable Document Format/Archive (PDF/A) atau Portable Document Format/Universal Accessibility (PDF/UA). Nomor klausul di bawah ini berasal dari kode sumber dan pesan exception mesin. Halaman ini menyajikannya sebagai parafrasa. Mesin melaporkan kegagalan profil yang terdeteksi; mesin tidak memberikan sertifikasi kesesuaian dokumen. Gunakan validator eksternal dengan rangkaian aturan tersendiri untuk memperoleh putusan kesesuaian yang otoritatif.

  • Gejala. NextPDF\Security\Exception\IncompatiblePdfAModeException dengan pesan yang menyatakan bahwa operasi enkripsi dilarang dalam mode PDF/A.
  • Kemungkinan penyebab. Pipeline mengaktifkan mode PDF/A sekaligus meminta enkripsi. Mesin mengutip International Organization for Standardization (ISO) 19005-{1,2,3,4} §6.1.3: kunci Encrypt tidak boleh ada dalam trailer berkas PDF/A. Mesin menolak kombinasi ini secara mutlak, terlepas dari urutan pemanggilannya.
  • Bukti / diagnosis. getContext() mengembalikan pdfa_mode dan encryption_operation. Pengujian jalur kegagalan tests/SecurityScenarios/PdfAEncryptionRefusalTest.php menegaskan bahwa penolakan dipicu baik saat Anda mengaktifkan PDF/A sebelum maupun sesudah pemanggilan enkripsi.
  • Penyelesaian.
    1. Tentukan kebutuhan dokumen: kesesuaian arsip atau enkripsi.
    2. Untuk dokumen arsip, hapus pemanggilan enkripsi.
    3. Untuk dokumen terenkripsi, hapus pemanggilan yang mengaktifkan PDF/A.
    4. Jalankan kembali pipeline.
  • Terkait. Enkripsi dan izin.
  • Gejala. Pdf14FeatureRejectedException saat citra dimasukkan, dengan pesan yang menyebut /JPXDecode atau /JBIG2Decode serta klausul ISO 19005-1:2005 §6.1.13.
  • Kemungkinan penyebab. Build PDF/A-1 menyertakan citra yang menggunakan filter yang diperkenalkan setelah PDF 1.4. PDF/A-1 menargetkan kumpulan fitur PDF 1.4, sehingga PdfA1FeatureGuard menolak Joint Photographic Experts Group (JPEG) 2000 (/JPXDecode) dan JBIG2 (/JBIG2Decode).
  • Bukti / diagnosis. src/Writer/PdfA1FeatureGuard.php memuat daftar filter terlarang dan melaporkan klausul yang dikutip. Komponen ini menolak filter tersebut hanya pada profil PDF/A-1; profil PDF/A-2, PDF/A-3, dan PDF 2.0 mengizinkannya.
  • Penyelesaian.
    1. Enkode ulang citra sumber tanpa JPEG 2000 atau JBIG2. Misalnya, simpan ulang sebagai JPEG baseline atau citra yang dikompresi dengan Flate.
    2. Sebagai alternatif, targetkan PDF/A-2 atau PDF/A-3, yang mengizinkan filter tersebut.
    3. Jalankan kembali build.
  • Terkait. Rujukan kesesuaian.
  • Gejala. Build PDF/A gagal saat validasi font, atau validator eksternal melaporkan font yang tidak disematkan.
  • Kemungkinan penyebab. Ada glif yang digambar dengan font yang programnya tidak disematkan. Kontrak manager PDF/A menyatakan bahwa setiap font harus disematkan dan tidak ada font standard-14 yang diizinkan tanpa penyematan.
  • Bukti / diagnosis. src/Contracts/PdfAManagerInterface.php mendeklarasikan validateFont(string $fontName, bool $isEmbedded, array $cmapForward) dan mendokumentasikan aturan tersebut: setiap font harus disematkan, dan tidak ada font standard 14 yang diizinkan tanpa penyematan. Implementasi penegakan konkret disertakan dalam nextpdf/pro.
  • Penyelesaian.
    1. Identifikasi font yang dilaporkan tidak disematkan.
    2. Konfigurasikan font tersebut dengan berkas program yang dapat disematkan, alih-alih mengandalkan rupa huruf standard-14 bawaan.
    3. Untuk interaksi dengan substitusi Base 14, baca entri font dan penandaan.
    4. Jalankan kembali build dan validasi ulang.
  • Terkait. Font dan penandaan.

Entri: JavaScript ada dan validasi PDF/A gagal

Bagian berjudul “Entri: JavaScript ada dan validasi PDF/A gagal”
  • Gejala. Build PDF/A gagal saat validasi JavaScript, atau validator eksternal melaporkan adanya aksi JavaScript.
  • Kemungkinan penyebab. Dokumen atau salah satu field formulir memuat aksi JavaScript. Kontrak manager PDF/A mengutip ISO 19005-4:2020 §6.7.1, yang melarang aksi JavaScript.
  • Bukti / diagnosis. PdfAManagerInterface::validateNoJavaScript() dan validateNoJavaScriptActions() keduanya mengutip §6.7.1 dalam docblock-nya.
  • Penyelesaian.
    1. Hapus aksi JavaScript dari dokumen atau field formulir.
    2. Jika aksi tersebut diperlukan untuk perilaku tertentu, dokumen tidak dapat menjadi PDF/A. Buat varian non-PDF/A untuk penggunaan tersebut.
    3. Jalankan kembali build dan validasi ulang.
  • Terkait. Rujukan kesesuaian.

Entri: keluaran bertanda tidak mendeklarasikan PDF/UA-2

Bagian berjudul “Entri: keluaran bertanda tidak mendeklarasikan PDF/UA-2”
  • Gejala. Dokumen yang dibuat dengan penandaan aktif tidak dikenali sebagai PDF/UA-2, atau klaim PDF/UA-2 tidak muncul.
  • Kemungkinan penyebab. Pohon struktur kosong. Mesin tidak mendeklarasikan PDF/UA-2 untuk dokumen yang tidak memiliki struktur bertanda, karena pohon struktur yang kosong tidak memenuhi profil tersebut.
  • Bukti / diagnosis. Pengujian jalur kegagalan tests/Integration/Accessibility/EmptyTaggedPdfDoesNotAdvertisePdfUa2Test.php menegaskan bahwa dokumen bertanda yang kosong tidak mendeklarasikan PDF/UA-2. Ini adalah perilaku mesin yang terdokumentasi, bukan cacat.
  • Penyelesaian.
    1. Pastikan konten dihasilkan melalui jalur penandaan, sehingga pohon struktur terisi, bukan kosong.
    2. Verifikasi bahwa rangkaian marked-content terpetakan ke elemen struktur.
    3. Jalankan kembali build dan periksa ulang status PDF/UA-2.
  • Terkait. Font dan penandaan.

Entri: PDF/UA-2 gagal karena bahasa hilang atau tidak valid

Bagian berjudul “Entri: PDF/UA-2 gagal karena bahasa hilang atau tidak valid”
  • Gejala. Pemeriksaan PDF/UA-2 gagal karena entri bahasa hilang atau bukan tag valid.
  • Kemungkinan penyebab. Dokumen atau salah satu elemen struktur tidak memiliki bahasa yang valid. PDF/UA-2 mensyaratkan deklarasi bahasa alami; nilai Lang yang hilang atau berformat salah akan gagal pada pemeriksaan ketat.
  • Bukti / diagnosis. Pengujian jalur kegagalan tests/Unit/Conformance/PdfUa2Section844LangStrictTest.php menguji persyaratan bahasa yang ketat. Tag bahasa divalidasi melalui src/Accessibility/Bcp47Validator.php; tag yang tidak valid memunculkan src/Accessibility/InvalidBcp47TagException.php.
  • Penyelesaian.
    1. Tetapkan bahasa pada tingkat dokumen sebagai tag Best Current Practice (BCP) 47 yang valid, misalnya en-US atau zh-Hant-TW.
    2. Jika suatu bagian teks menggunakan bahasa yang berbeda, tetapkan bahasa pada elemen struktur tersebut.
    3. Jalankan kembali build dan validasi ulang.
  • Terkait. Font dan penandaan.
  • Penolakan PDF/A dan PDF/UA yang dijelaskan di sini berasal dari dalam mesin. Penolakan ini independen dari putusan validator eksternal dan tidak menggantikannya. Jalankan validator seperti veraPDF untuk memperoleh hasil yang otoritatif.
  • Writer konkret untuk objek wajib PDF/A (aliran metadata Extensible Metadata Platform (XMP), output intent dengan profil International Color Consortium (ICC)) ditentukan saat runtime dari nextpdf/pro. Jika hanya paket core yang terpasang, objek-objek tersebut tidak dikeluarkan; build core-saja bukanlah penghasil PDF/A yang lengkap.
  • Penolakan enkripsi bersifat mutlak dan tidak bergantung pada urutan; mengaktifkan PDF/A setelah pemanggilan enkripsi tetap memunculkan penolakan tersebut.

Glosarium: output intent · pohon struktur