Compliance: ตัววาลิเดเตอร์ PDF/R-1, ไวยากรณ์ Arlington และเครื่องมือจัดการวงจรชีวิต
ภาพรวมโดยสังเขป
หัวข้อที่มีชื่อว่า “ภาพรวมโดยสังเขป”NextPDF\Compliance มีตัววาลิเดเตอร์ระดับไบต์สตรีมและการตรวจสอบไขว้ทางไวยากรณ์ที่อ่านไฟล์ Portable Document Format (PDF) ที่เสร็จสมบูรณ์แล้ว และรายงานจุดที่ไฟล์เบี่ยงเบนจากข้อสัญญาเชิงบรรทัดฐาน เมื่อตัววาลิเดเตอร์คืนค่าข้อค้นพบเป็นศูนย์รายการ ผลลัพธ์จะถูก ตรวจสอบแล้ว เทียบกับข้อกำหนดที่ตัววาลิเดเตอร์นั้นนำมาใช้เท่านั้น ไม่ใช่ใบรับรองแบบครอบคลุมทั้งหมด
การติดตั้ง
หัวข้อที่มีชื่อว่า “การติดตั้ง”composer require nextpdf/core:^3ภาพรวมเชิงแนวคิด
หัวข้อที่มีชื่อว่า “ภาพรวมเชิงแนวคิด”โมดูลนี้ประกอบด้วยสามส่วน
PdfRValidator ตรวจสอบความถูกต้องของไบต์สตรีมที่เป็นตัวเลือก ISO 23504-1:2020 (PDF/R-1) ตัววาลิเดเตอร์นี้ทำงานกับไบต์ดิบ ไม่ใช่สถานะภายในของตัวเขียน จึงเป็นการตรวจสอบขั้นสุดท้ายที่จับการเบี่ยงเบนระหว่างสิ่งที่ตัวเขียนตั้งใจส่งออกกับสิ่งที่ข้อกำหนดต้องการ ชุดข้อกำหนดที่นำมาใช้คือคลัสเตอร์ v5.1.0 ได้แก่ §5 ความคิดเห็นระบุเวอร์ชัน, §6.2.2/§6.2.3 รายการที่อนุญาตของส่วนหัว, §6.2.4 ข้อห้ามเรื่อง generation-0 และ object-stream, §6.5.7 รายการที่อนุญาตของตัวดำเนินการ content-stream (เฉพาะ q, Q, cm, Do), §6.6.1 รายการที่อนุญาตของคีย์ image XObject, §6.4.3 รายการที่อนุญาตของคีย์ Info-dictionary และ §6.3 รายการที่อนุญาตของคีย์ Catalog ส่วน §6.7 การอัปเดตแบบเพิ่มหน่วยและ §6.8 การเข้ารหัสลับอยู่นอกขอบเขตของคลัสเตอร์เริ่มต้นอย่างชัดเจน และระบุไว้เช่นนั้นใน claims.json ตัววาลิเดเตอร์ไม่หยุดที่ข้อค้นพบแรก แต่รวบรวมทุกความเบี่ยงเบนในการตรวจสอบรอบเดียวเพื่อให้คุณเห็น diff ทั้งหมด
PdfRConformancePolicy คือนโยบายแบบเปลี่ยนแปลงไม่ได้สำหรับแถบ แนะนำแต่เป็นเชิงให้ข้อมูล รอบ PDF/R-1 พื้นฐานเชิงบรรทัดฐาน §6 ไม่สามารถกำหนดค่าได้เลย นโยบายควบคุมเฉพาะคำแนะนำเรื่องขีดจำกัดการนำไปใช้ §A.5 การไม่รองรับ multi-strip ตาม §6.6.1 และข้อกำหนด XMP Extensible Metadata Platform (XMP) ตาม §A.6 สำหรับการจัดประเภทใหม่เป็น PDF/A ในขั้นปลายน้ำ
ArlingtonValidator รันโมเดล Arlington PDF ต้นทางของ PDF Association ในโหมดรายงานเท่านั้น ตัววาลิเดเตอร์เป็นเชิงให้คำแนะนำตลอดรอบปัจจุบัน: validateReportOnly() ไม่เคยโยนข้อยกเว้น ตัววาลิเดเตอร์ถอยกลับผ่านสามโหมด เมื่อมีไบนารีของตัวตรวจสอบอ้างอิงพร้อมใช้งาน ตัววาลิเดเตอร์จะแยกวิเคราะห์ข้อค้นพบแบบมีโครงสร้าง เมื่อมีเฉพาะไวยากรณ์ที่ปักหมุดไว้ ตัววาลิเดเตอร์จะส่งออกข้อค้นพบ info หนึ่งรายการเพื่อพิสูจน์ว่าหมุดของไวยากรณ์ถูกโหลดแล้ว เมื่อไวยากรณ์ไม่พร้อมใช้งาน ตัววาลิเดเตอร์จะคืนค่ารายการว่าง WaiverRegistry ช่วยให้ตัวประสานงานระงับความไม่สอดคล้องที่ทราบว่ายอมรับได้ ขณะยังคงเก็บร่องรอยการตรวจสอบไว้
กฎความซื่อตรงนี้สอดคล้องกับเมทริกซ์การรองรับ Cascading Style Sheets (CSS) และโมดูล conformance ข้อกำหนดจะเป็น Verified ก็ต่อเมื่อมีการทดสอบที่ผ่านอยู่ และมีการอ้างอิงข้อกำหนดเชิงบรรทัดฐานนั้น ข้อกำหนดที่นำมาใช้แต่ไม่มีฟิกซ์เจอร์ที่ผ่านโดยเฉพาะถือเป็น Claimed ข้อกำหนดที่อยู่นอกขอบเขตจะถูกระบุไว้อย่างชัดเจน ไม่ปล่อยให้คลุมเครือ ผลลัพธ์ PdfRValidator ที่ไม่มีข้อค้นพบยืนยันเฉพาะข้อกำหนดที่ตัววาลิเดเตอร์ตรวจสอบเท่านั้น ตัววาลิเดเตอร์ไม่กล่าวอ้างใด ๆ เกี่ยวกับ §6.7 หรือ §6.8 ซึ่งตัววาลิเดเตอร์ไม่ได้นำมาใช้
พื้นผิว API
หัวข้อที่มีชื่อว่า “พื้นผิว API”| ชนิด | ประเภท | สมาชิกสำคัญ |
|---|---|---|
NextPDF\Compliance\Validator\PdfRValidator | final class | validate(string $pdfBytes): list<PdfRValidationFinding> |
NextPDF\Compliance\Validator\PdfRValidationFinding | final readonly class | string $clause, 'error'|'warning'|'info' $severity, string $message |
NextPDF\Compliance\Profile\PdfRConformancePolicy | final readonly class | __construct(bool $enforceA5ImplementationLimits = true, bool $rejectMultiStripPages = false, bool $requireXmpForA6Compatibility = false); lax(), strictArchival() |
NextPDF\Compliance\Validator\ArlingtonValidator | final class | validateReportOnly(string $pdfPath): list<ArlingtonFinding> |
NextPDF\Compliance\Validator\WaiverRegistry | final class | isWaived(string $validator, string $ruleId, string $scopeKey): bool |
ตัวอย่างโค้ด — เริ่มต้นใช้งานอย่างรวดเร็ว
หัวข้อที่มีชื่อว่า “ตัวอย่างโค้ด — เริ่มต้นใช้งานอย่างรวดเร็ว”<?php
declare(strict_types=1);
use NextPDF\Compliance\Validator\PdfRValidator;
$validator = new PdfRValidator();$findings = $validator->validate(file_get_contents('candidate.pdf'));
if ($findings === []) { // Zero divergences from the §6 clauses PdfRValidator implements. // This is NOT a PDF/R-1 certificate — §6.7 and §6.8 are not checked. echo "No PDF/R-1 §6 divergences detected (implemented clause set).\n";} else { foreach ($findings as $f) { echo "[{$f->severity}] §{$f->clause}: {$f->message}\n"; }}ตัวอย่างโค้ด — การใช้งานจริง
หัวข้อที่มีชื่อว่า “ตัวอย่างโค้ด — การใช้งานจริง”<?php
declare(strict_types=1);
use NextPDF\Compliance\Validator\ArlingtonValidator;use NextPDF\Compliance\Validator\ArlingtonGrammarLoader;use NextPDF\Compliance\Validator\WaiverRegistry;
$validator = new ArlingtonValidator( waivers: new WaiverRegistry(/* loaded waiver entries */), grammar: new ArlingtonGrammarLoader(/* pinned submodule path */), adapter: null, // grammar-only mode when the reference checker is absent);
// Advisory by contract — never throws on findings.$findings = $validator->validateReportOnly('artifact.pdf');
foreach ($findings as $finding) { // Each finding pins the Arlington grammar commit SHA for provenance. logger()->info('arlington', [ 'rule' => $finding->ruleId, 'severity' => $finding->severity, 'grammarSha' => $finding->grammarSha, ]);}กรณีขอบและจุดที่ต้องระวัง
หัวข้อที่มีชื่อว่า “กรณีขอบและจุดที่ต้องระวัง”PdfRValidatorอิงตาม regex ไม่ใช่ตัวแยกวิเคราะห์แบบเต็มรูปแบบ โดยมุ่งเป้าไปที่เอาต์พุตเชิงกำหนดได้ของNextPDF\Writer\PdfRWriterใช้ตัววาลิเดเตอร์นี้เป็นตัวตรวจจับการเบี่ยงเบนสำหรับตัวเขียนนั้น ไม่ใช่ตัวแยกวิเคราะห์ PDF ทั่วไป- ศูนย์ข้อค้นพบ ≠ การสอดคล้อง PDF/R-1 อย่างสมบูรณ์ §6.7 (การอัปเดตแบบเพิ่มหน่วย) และ §6.8 (การเข้ารหัสลับ) ไม่ได้ถูกนำมาใช้ในคลัสเตอร์ v5.1.0 และถูกประกาศว่าอยู่นอกขอบเขตใน
claims.jsonให้ถือว่าผลลัพธ์ที่สะอาดหมายถึง “ไม่มีการเบี่ยงเบนในชุดข้อกำหนดที่นำมาใช้” เท่านั้น และไม่มีอะไรมากไปกว่านั้น - Arlington เป็นเชิงให้คำแนะนำ ในรอบปัจจุบัน
validateReportOnly()ไม่เคยทำให้บิลด์ล้มเหลว Continuous integration (CI) ใช้อาร์ติแฟกต์นี้ แต่ไม่ใช้เป็นเงื่อนไขกั้น - การตรวจสอบ PDF/A International Color Consortium (ICC) ไม่ได้อยู่ที่นี่ การตรวจสอบ OutputIntent ICC ตาม ISO 19005-4:2020 §6.2.2 อยู่ใน
PdfAManagerระดับ Enterprise (nextpdf/pro) ไม่ใช่ในโมดูล Compliance ของ Core พื้นผิว PDF/A ของ Core เป็นเพียงตัวจำแนกConformanceMode - การยกเว้นรักษาร่องรอยการตรวจสอบไว้ กฎที่ถูกยกเว้นจะถูกระงับออกจากรายการข้อค้นพบ แต่รายการยกเว้นยังคงบันทึก เหตุผล ไว้เสมอ
ประสิทธิภาพ
หัวข้อที่มีชื่อว่า “ประสิทธิภาพ”PdfRValidator::validate() เป็นการตรวจสอบเชิงเส้นรอบเดียวด้วยการเดิน regex แบบมีขอบเขตจำกัดบนไบต์สตรีม ต้นทุนปรับตามขนาดของเอกสารและยังคงอยู่ในงบประมาณของโมดูลอย่างชัดเจน ในโหมดไวยากรณ์เท่านั้น ArlingtonValidator มีความซับซ้อน O(grammar-rule-count) สำหรับข้อค้นพบที่พิสูจน์การโหลด เส้นทางตัวตรวจสอบอ้างอิงทำงานเป็นกระบวนการย่อยและถูกจำกัดโดยเครื่องมือต้นทาง ไม่ใช่โดย NextPDF จึงเป็นขั้นตอน CI แบบนอกแถบ
หมายเหตุด้านความปลอดภัย
หัวข้อที่มีชื่อว่า “หมายเหตุด้านความปลอดภัย”ตัววาลิเดเตอร์เหล่านี้อ่านไบต์ PDF ที่ไม่น่าเชื่อถือ PdfRValidator ตัดลิเทอรัลที่อยู่ในวงเล็บและลิเทอรัล hex ออกก่อนสกัดคีย์ ดังนั้นสตริง Creator ที่ถูกสร้างขึ้นเป็นพิเศษจึงไม่สามารถแทรกคีย์ /Name ปลอมได้ (การจัดการ escape ตาม ISO 32000-1:2008 §7.3.4.2) อะแดปเตอร์ Arlington รันตัวตรวจสอบต้นทางเป็นกระบวนการย่อยแบบมีขอบเขตจำกัด อะแดปเตอร์ถือว่าการหมดเวลาหรือข้อผิดพลาดในการดำเนินการเป็น “ไม่มีข้อค้นพบ” แทนที่จะเชื่อถือเอาต์พุตบางส่วน ดูแบบจำลองภัยคุกคามของโครงการสำหรับพื้นผิวการโจมตีในการแยกวิเคราะห์ PDF
การสอดคล้องตามมาตรฐาน
หัวข้อที่มีชื่อว่า “การสอดคล้องตามมาตรฐาน”| มาตรฐาน | ข้อกำหนด | สิ่งที่โมดูล Compliance ทำ | สถานะ |
|---|---|---|---|
| ISO 23504-1:2020 (PDF/R-1) | §6.5.7 | PdfRValidator บังคับใช้รายการที่อนุญาตของตัวดำเนินการ {q,Q,cm,Do} สำหรับ content-stream | Verified (ผ่านการทดสอบ unit + standards-profile + integration) |
| ISO 23504-1:2020 (PDF/R-1) | §6.4.3 | PdfRValidator บังคับใช้รายการที่อนุญาตของคีย์ Info-dictionary | Verified (มีการทดสอบรองรับ) |
| ISO 23504-1:2020 (PDF/R-1) | §6.7, §6.8 | ไม่ได้นำมาใช้ในคลัสเตอร์ v5.1.0 | การไม่ครอบคลุมอย่างชัดเจน (ประกาศไว้ใน claims.json) |
| ISO 32000-2:2020 (PDF 2.0) | §7.5.2 | การเดินรายการที่อนุญาตของคีย์ Catalog | Claimed (การเดิน regex; เชิงโครงสร้าง) |
| ISO 19005-4:2020 (PDF/A-4) | §6.7.3 | การรับรู้สคีมาการระบุตัวตนผ่านโมดูล Conformance | การอ้างอิงไขว้ (ดู /specifications/pdfa4/) |
การรองรับไม่ใช่การสอดคล้อง การรัน PdfRValidator ที่คืนค่าไม่มีข้อค้นพบพิสูจน์เพียงว่าอินพุตไม่เบี่ยงเบนจากข้อกำหนด §6 ที่ตัววาลิเดเตอร์นำมาใช้ เท่านั้น การรันนี้ไม่ยืนยันว่าไฟล์เป็นไฟล์ PDF/R-1 ที่สอดคล้อง: §6.7 และ §6.8 ไม่ได้ถูกตรวจสอบ การตรวจสอบไขว้ Arlington เป็นเชิงให้คำแนะนำและไม่เคยยืนยันการสอดคล้อง สำหรับ PDF/A-4 veraPDF เป็นตัววาลิเดเตอร์ที่มีอำนาจและทำงานแบบนอกแถบ ดู โมดูล conformance สำหรับ veraPDF oracle และการกั้นแบบ opt-in
การอ้างอิงต่าง ๆ ถอดความมาจากคลังเอกสาร compliance digest ของ NextPDF โดยบันทึก reference_id 64 อักขระแบบเต็มไว้ทั้งใน front-matter ของหน้าและใน _normative-evidence-conf.md
ดูเพิ่มเติม
หัวข้อที่มีชื่อว่า “ดูเพิ่มเติม”- โมดูล Conformance — การกำหนดเส้นทางของ
ConformanceModeและ veraPDF oracle - โมดูล Audit — ร่องรอยการตรวจสอบและพื้นผิวการรับรอง
- การแมปข้อกำหนด PDF/A-4 — การครอบคลุมและการไม่ครอบคลุมของ ISO 19005-4
- โมดูล Security — แบบจำลองภัยคุกคามในการแยกวิเคราะห์ PDF