Tuân thủ: trình xác thực PDF/R-1, ngữ pháp Arlington và công cụ vòng đời
Tổng quan nhanh
Phần tiêu đề “Tổng quan nhanh”NextPDF\Compliance cung cấp các trình xác thực luồng byte và một phép đối chiếu chéo ngữ pháp, đọc một tệp Portable Document Format (PDF) đã hoàn thiện rồi báo cáo những điểm khác biệt so với hợp đồng quy chuẩn. Khi một trình xác thực trả về không có phát hiện nào, kết quả được kiểm tra theo các điều khoản mà nó triển khai. Đây không phải là chứng nhận toàn diện.
Cài đặt
Phần tiêu đề “Cài đặt”composer require nextpdf/core:^3Tổng quan khái niệm
Phần tiêu đề “Tổng quan khái niệm”Module này có ba phần.
PdfRValidator xác thực một luồng byte ISO 23504-1:2020 (PDF/R-1) ứng viên. Nó hoạt động trên byte thô, không dựa vào trạng thái nội bộ của trình ghi. Nó phát hiện sai lệch giữa nội dung trình ghi dự định phát ra và yêu cầu của đặc tả, đồng thời đóng vai trò là phép kiểm tra cuối cùng. Tập điều khoản được triển khai là cụm v5.1.0: §5 chú thích nhận dạng phiên bản, danh sách cho phép tiêu đề §6.2.2/§6.2.3, lệnh cấm generation-0 và luồng đối tượng §6.2.4, danh sách cho phép toán tử luồng nội dung §6.5.7 (chỉ q, Q, cm, Do), danh sách cho phép khóa image XObject §6.6.1, danh sách cho phép khóa từ điển Info §6.4.3, và danh sách cho phép khóa Catalog §6.3. Cập nhật gia tăng §6.7 và mã hóa §6.8 được nêu rõ là nằm ngoài phạm vi của cụm ban đầu và được khai báo như vậy trong claims.json. Trình xác thực không dừng ở phát hiện đầu tiên. Nó thu thập mọi sai lệch trong một lượt để bạn có thể thấy đầy đủ các điểm khác biệt.
PdfRConformancePolicy là một chính sách bất biến cho các dải được khuyến nghị nhưng có tính thông tin xung quanh PDF/R-1. Mức sàn quy chuẩn §6 không bao giờ có thể cấu hình. Chính sách chỉ kiểm soát các khuyến nghị về giới hạn triển khai §A.5, việc không khuyến khích nhiều dải §6.6.1, và yêu cầu XMP Extensible Metadata Platform (XMP) §A.6 để tái phân loại PDF/A ở hạ nguồn.
ArlingtonValidator chạy mô hình Arlington PDF của PDF Association ở thượng nguồn theo chế độ chỉ báo cáo. Nó mang tính tư vấn trong suốt chu kỳ hiện tại: validateReportOnly() không bao giờ ném ngoại lệ. Nó dự phòng qua ba chế độ. Khi tệp nhị phân của trình kiểm tra tham chiếu có sẵn, nó phân tích các phát hiện có cấu trúc. Khi chỉ có ngữ pháp đã ghim sẵn, nó phát ra một phát hiện info để chứng minh bản ghim ngữ pháp đã được nạp. Khi không có sẵn ngữ pháp, nó trả về danh sách rỗng. Một WaiverRegistry cho phép trình điều phối chặn các bất đồng đã biết là chấp nhận được, trong khi vẫn giữ nguyên dấu vết kiểm toán.
Quy tắc trung thực này khớp với ma trận hỗ trợ Cascading Style Sheets (CSS) và module tuân thủ (conformance). Một điều khoản chỉ ở trạng thái Verified khi có phép kiểm thử vượt qua và điều khoản quy chuẩn được trích dẫn. Một điều khoản đã được triển khai nhưng không có fixture vượt qua dành riêng thì ở trạng thái Claimed. Các điều khoản nằm ngoài phạm vi được nêu rõ ràng, không để mơ hồ. Một kết quả PdfRValidator không có phát hiện nào chỉ khẳng định những điều khoản mà nó kiểm tra. Nó không đưa ra tuyên bố nào về §6.7 hoặc §6.8, là những phần nó không triển khai.
Bề mặt API
Phần tiêu đề “Bề mặt API”| Kiểu | Loại | Thành viên chính |
|---|---|---|
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 |
Mẫu mã — bắt đầu nhanh
Phần tiêu đề “Mẫu mã — bắt đầu nhanh”<?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"; }}Mẫu mã — sản xuất
Phần tiêu đề “Mẫu mã — sản xuất”<?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, ]);}Trường hợp đặc biệt & lưu ý
Phần tiêu đề “Trường hợp đặc biệt & lưu ý”PdfRValidatordựa trên regex, không phải là một trình phân tích đầy đủ. Nó nhắm đến đầu ra mang tính tất định củaNextPDF\Writer\PdfRWriter. Hãy dùng nó như một bộ phát hiện sai lệch cho trình ghi đó, không phải như một trình phân tích PDF tổng quát.- Không có phát hiện ≠ tuân thủ PDF/R-1 đầy đủ. §6.7 (cập nhật gia tăng) và §6.8 (mã hóa) không được triển khai trong cụm v5.1.0 và được khai báo là nằm ngoài phạm vi trong
claims.json. Hãy coi một kết quả sạch là “không có sai lệch trên tập điều khoản đã triển khai”, và không gì hơn. - Arlington mang tính tư vấn. Trong chu kỳ hiện tại,
validateReportOnly()không bao giờ làm hỏng bản dựng. Tích hợp liên tục (CI) sử dụng artifact này nhưng không lấy nó làm điều kiện chặn. - Việc xác thực International Color Consortium (ICC) cho PDF/A không nằm ở đây. Việc xác thực ICC OutputIntent theo ISO 19005-4:2020 §6.2.2 nằm trong
PdfAManagerbản Enterprise (nextpdf/pro), không nằm trong module Compliance của Core. Bề mặt PDF/A của Core chỉ là bộ phân biệtConformanceMode. - Các miễn trừ giữ nguyên dấu vết kiểm toán. Một quy tắc được miễn trừ sẽ bị chặn khỏi danh sách phát hiện, nhưng mục miễn trừ vẫn là bản ghi lý do tại sao.
Hiệu năng
Phần tiêu đề “Hiệu năng”PdfRValidator::validate() là một lượt tuyến tính duy nhất với các bước quét regex có giới hạn trên luồng byte. Chi phí tăng theo kích thước tài liệu và nằm gọn trong ngân sách của module. Ở chế độ chỉ-ngữ-pháp, ArlingtonValidator là O(số-lượng-quy-tắc-ngữ-pháp) cho phát hiện chứng minh việc nạp. Đường dẫn trình kiểm tra tham chiếu chạy như một tiến trình con và bị giới hạn bởi công cụ thượng nguồn, không phải bởi NextPDF. Đây là một bước CI ngoài luồng.
Lưu ý bảo mật
Phần tiêu đề “Lưu ý bảo mật”Các trình xác thực này đọc byte PDF không đáng tin cậy. PdfRValidator loại bỏ các literal trong ngoặc đơn và literal hex trước khi trích xuất khóa, vì vậy một chuỗi Creator được tạo có chủ đích không thể chèn khóa /Name giả (xử lý ký tự thoát theo ISO 32000-1:2008 §7.3.4.2). Bộ điều hợp Arlington chạy trình kiểm tra thượng nguồn như một tiến trình con có giới hạn. Nó coi một lần hết thời gian hoặc lỗi thực thi là “không có phát hiện” thay vì tin vào đầu ra một phần. Xem mô hình mối đe dọa của dự án để biết bề mặt tấn công khi phân tích PDF.
Tuân thủ
Phần tiêu đề “Tuân thủ”| Tiêu chuẩn | Điều khoản | Module Compliance làm gì | Trạng thái |
|---|---|---|---|
| ISO 23504-1:2020 (PDF/R-1) | §6.5.7 | PdfRValidator thực thi danh sách cho phép toán tử {q,Q,cm,Do} cho luồng nội dung | Verified (kiểm thử đơn vị + standards-profile + tích hợp đều vượt qua) |
| ISO 23504-1:2020 (PDF/R-1) | §6.4.3 | PdfRValidator thực thi danh sách cho phép khóa từ điển Info | Verified (có kiểm thử hỗ trợ) |
| ISO 23504-1:2020 (PDF/R-1) | §6.7, §6.8 | Không được triển khai trong cụm v5.1.0 | Không bao phủ rõ ràng (được khai báo trong claims.json) |
| ISO 32000-2:2020 (PDF 2.0) | §7.5.2 | Quét danh sách cho phép khóa Catalog | Claimed (quét regex; theo cấu trúc) |
| ISO 19005-4:2020 (PDF/A-4) | §6.7.3 | Nhận biết lược đồ nhận dạng thông qua module Conformance | Tham chiếu chéo (xem /specifications/pdfa4/) |
Hỗ trợ không phải là tuân thủ. Một lần chạy PdfRValidator trả về không có phát hiện chỉ chứng minh rằng đầu vào không sai lệch khỏi các điều khoản §6 mà trình xác thực triển khai. Nó không khẳng định rằng tệp là một tệp PDF/R-1 tuân thủ: §6.7 và §6.8 không được kiểm tra. Phép đối chiếu chéo Arlington mang tính tư vấn và không bao giờ khẳng định sự tuân thủ. Đối với PDF/A-4, veraPDF là trình xác thực có thẩm quyền và chạy ngoài luồng. Xem module conformance để biết về veraPDF oracle và cơ chế chặn theo lựa chọn tham gia của nó.
Các trích dẫn được diễn giải lại từ kho ngữ liệu tuân thủ của NextPDF. Các bản tóm lược reference_id đầy đủ 64 ký tự được ghi lại trong front-matter của trang và trong _normative-evidence-conf.md.
Xem thêm
Phần tiêu đề “Xem thêm”- Module Conformance — định tuyến
ConformanceModevà veraPDF oracle - Module Audit — dấu vết kiểm toán và bề mặt chứng thực
- Ánh xạ đặc tả PDF/A-4 — phạm vi bao phủ và không bao phủ của ISO 19005-4
- Module Security — mô hình mối đe dọa của việc phân tích PDF