Bỏ qua để đến nội dung

Tuân thủ: trình xác thực PDF/R-1, ngữ pháp Arlington và công cụ vòng đời

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.

Terminal window
composer require nextpdf/core:^3

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.

KiểuLoạiThành viên chính
NextPDF\Compliance\Validator\PdfRValidatorfinal classvalidate(string $pdfBytes): list<PdfRValidationFinding>
NextPDF\Compliance\Validator\PdfRValidationFindingfinal readonly classstring $clause, 'error'|'warning'|'info' $severity, string $message
NextPDF\Compliance\Profile\PdfRConformancePolicyfinal readonly class__construct(bool $enforceA5ImplementationLimits = true, bool $rejectMultiStripPages = false, bool $requireXmpForA6Compatibility = false); lax(), strictArchival()
NextPDF\Compliance\Validator\ArlingtonValidatorfinal classvalidateReportOnly(string $pdfPath): list<ArlingtonFinding>
NextPDF\Compliance\Validator\WaiverRegistryfinal classisWaived(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 dự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ủa NextPDF\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 PdfAManager bả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ệt ConformanceMode.
  • 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.

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.

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.

Tiêu chuẩnĐiều khoảnModule Compliance làm gìTrạng thái
ISO 23504-1:2020 (PDF/R-1)§6.5.7PdfRValidator thực thi danh sách cho phép toán tử {q,Q,cm,Do} cho luồng nội dungVerified (kiểm thử đơn vị + standards-profile + tích hợp đều vượt qua)
ISO 23504-1:2020 (PDF/R-1)§6.4.3PdfRValidator thực thi danh sách cho phép khóa từ điển InfoVerified (có kiểm thử hỗ trợ)
ISO 23504-1:2020 (PDF/R-1)§6.7, §6.8Không được triển khai trong cụm v5.1.0Không bao phủ rõ ràng (được khai báo trong claims.json)
ISO 32000-2:2020 (PDF 2.0)§7.5.2Quét danh sách cho phép khóa CatalogClaimed (quét regex; theo cấu trúc)
ISO 19005-4:2020 (PDF/A-4)§6.7.3Nhận biết lược đồ nhận dạng thông qua module ConformanceTham 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.