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

Tuân thủ: định tuyến ConformanceMode và ranh giới của xác thực

NextPDF\Conformance là yếu tố phân biệt duy nhất cho writer biết một tệp Portable Document Format (PDF) nhắm đến hợp đồng nào của Tổ chức Tiêu chuẩn hóa quốc tế (ISO). Thư viện phát ra các cấu trúc do hợp đồng đó định nghĩa. Nó không, và cũng không thể, chứng nhận rằng tệp kết quả là tuân thủ. Chỉ trình xác thực bên ngoài mới có thể chứng nhận sự tuân thủ.

Terminal window
composer require nextpdf/core:^3

Mô-đun Conformance cung cấp hai kiểu công khai. ConformanceMode là enum có kiểu nền, dùng để đặt tên cho hợp đồng đích (Plain, PdfUa1, PdfUa2, PdfA2, PdfA3, PdfA3b, PdfA3u, PdfA4, PdfA4e, PdfA4f). ConformancePolicy là một value object bất biến, kết hợp một chế độ với các công tắc nghiêm ngặt độc lập.

Chế độ này là nguồn chân lý duy nhất cho các cổng kiểm soát phía writer ở hạ nguồn. Trước khi enum này tồn tại, công cụ suy ra việc một tài liệu có được gắn thẻ theo đặc tả hay không từ những cờ rải rác. ConformanceMode::isTagged(), isAccessibility(), isArchival(), pdfaPart(), pdfaConformanceLetter(), và requiresPdf17() mỗi hàm đều trả về một câu trả lời có kiểu để writer đọc trực tiếp. Catalog, /MarkInfo, dòng dõi tiêu đề tệp, và các dấu hiệu pdfaid của Extensible Metadata Platform (XMP) luôn nhất quán với ý định đã khai báo.

Hãy hiểu ranh giới hỗ trợ theo đúng nghĩa đen. NextPDF Core phát ra các cấu trúc mà những tiêu chuẩn này định nghĩa. ISO 19005-4:2020 §6.7.3 quy định lược đồ định danh ghi lại biến thể PDF/A mà một tệp tuyên bố. ISO 19005-4:2020 nêu rằng sự tuân thủ được xác định theo quy định trong Điều 5 của nó: đối chiếu với các yêu cầu quy chuẩn bằng một công cụ kiểm tra, chứ không phải bằng thư viện tạo ra tệp. ISO 14289-2:2024 §6 định nghĩa sự phù hợp là một thuộc tính mà một tệp thỏa mãn. Đặt một chế độ NextPDF là đầu vào cần thiết cho một tệp tuân thủ. Tự thân việc đó không phải là một kết quả tuân thủ.

Điều này tuân theo cùng nguyên tắc Đã xác minh so với Đã tuyên bố như ma trận hỗ trợ Cascading Style Sheets (CSS). Một khả năng chỉ ở mức Đã xác minh khi vừa có một lần chạy kiểm thử hoặc oracle đạt yêu cầu, vừa có một điều khoản được trích dẫn. Mọi thứ khác là những gì thư viện phát ra: hữu ích, nhưng không phải là bảo đảm tuân thủ. Sự tuân thủ thuộc về tệp cuối cùng và trình xác thực, không thuộc về lời hứa của thư viện. Hãy xác thực đầu ra bằng veraPDF (xem “Tuân thủ” bên dưới).

Một ranh giới thứ hai rất quan trọng với công việc lưu trữ. Việc soạn thảo PDF/A-4, bao gồm dictionary OutputIntent, hồ sơ International Color Consortium (ICC) được nhúng, và lược đồ mở rộng XMP, được cung cấp trong tiện ích mở rộng nextpdf/pro, chứ không nằm trong Core. Trong bản cài đặt chỉ có Core, Document::enablePdfA() phát sinh InvalidConfigException vì khả năng security.pdfa chưa được đăng ký. Core vẫn sở hữu yếu tố phân biệt ConformanceMode, nên việc nội suy và lộ trình gắn thẻ PDF/Universal Accessibility (PDF/UA-2) vẫn hoạt động, nhưng bản thân Core không soạn thảo tệp PDF/A-4.

KiểuLoạiThành viên chính
NextPDF\Conformance\ConformanceModeenum: stringPlain, PdfUa1, PdfUa2, PdfA2, PdfA3, PdfA3b, PdfA3u, PdfA4, PdfA4e, PdfA4f; isTagged(), isAccessibility(), isArchival(), requiresPdfUa2PageTabs(), pdfaPart(): ?int, pdfaConformanceLetter(): string, requiresPdf17(): bool
NextPDF\Conformance\ConformancePolicyfinal readonly class__construct(ConformanceMode $mode = PdfUa2, bool $strictUa2 = false, bool $rejectUnvalidatedLang = false, …); lax(), strictUa2(), withUax9IsolateSupport(), withoutAstShadowMode(), withBlackPointCompensation(), withStrictOcspProducedAtTolerance(), withAllowStaleOcsp()

ConformancePolicy thực thi một bất biến trong constructor của nó: các công tắc PDF/UA-2 nghiêm ngặt chỉ áp dụng khi chế độ là PdfUa2, và strictUa2 = true buộc rejectUnvalidatedLang = true. Những tổ hợp không nhất quán sẽ ném InvalidConfigException thay vì âm thầm suy giảm.

<?php
declare(strict_types=1);
use NextPDF\Conformance\ConformanceMode;
$mode = ConformanceMode::PdfA4f;
// Introspect the declared contract — these drive writer-side gates.
$mode->pdfaPart(); // 4
$mode->pdfaConformanceLetter(); // 'F'
$mode->requiresPdf17(); // false (PDF/A-4 is PDF 2.0 lineage)
$mode->isArchival(); // true

Lộ trình đi kèm với Core và thực thi một hợp đồng tuân thủ từ đầu đến cuối là tuyến gắn thẻ PDF/UA-2. Ví dụ có thể chạy là examples/31-pdfua2-tagged.php. Đây cũng là mục tiêu oracle cho hồ sơ PDF/UA-2 nghiêm ngặt.

<?php
declare(strict_types=1);
use NextPDF\Core\Document;
$doc = Document::createStandalone();
// Set the tagged-PDF contract BEFORE writing content so the HTML pipeline
// wires the TaggedContentEmitter at parser-construction time.
$doc->enableTaggedPdf(lang: 'en');
$doc->setTitle('Accessible report');
// … write content …
$doc->save(__DIR__ . '/out/report-ua2.pdf');
// The library has now emitted PDF/UA-2 structures. It has NOT asserted
// conformance. Verify the file with the pinned veraPDF oracle:
//
// php oracle/run.php pdfua.strict
//
// (Requires the veraPDF Docker image — opt-in; see "Conformance" below.)
  • Soạn thảo PDF/A-4 là tính năng Premium. Trong bản cài đặt chỉ có Core, Document::enablePdfA() ném InvalidConfigException (security.pdfa không khả dụng). Core sở hữu yếu tố phân biệt, không phải phần phát ra OutputIntent/ICC/XMP. Xem /specifications/pdfa4/.
  • Trường hợp tổng quát so với trường hợp biến thể. PdfA4 là trường hợp tổng quát và báo cáo một pdfaConformanceLetter() rỗng. ISO 19005-4:2020 §6.7.3 chỉ định rằng tệp không tuân thủ cả PDF/A-4e lẫn PDF/A-4f thì không cung cấp pdfa:conformance. Chỉ dùng PdfA4e / PdfA4f cho các biến thể Phụ lục B / Phụ lục A.
  • PDF/UA-2 nghiêm ngặt là tùy chọn bật. ConformancePolicy::lax() là giá trị mặc định tương thích ngược. strictUa2() buộc /MarkInfo /Marked true và từ chối Best Current Practice (BCP) 47. Bật nó ở chế độ không phải PdfUa2 sẽ ném ngoại lệ.
  • isTagged() nhận biết theo biến thể. Plain, PdfA2, PdfA3b, và PdfA4e báo cáo là không gắn thẻ. Writer không được suy ra cây cấu trúc chỉ dựa trên chế độ lưu trữ.
  • Một chế độ đạt yêu cầu không đồng nghĩa với một tệp đạt yêu cầu. Đặt PdfA4 không làm cho đầu ra trở thành tệp PDF/A-4 hợp lệ. Hãy chạy một trình xác thực.

ConformanceModeConformancePolicy là các kiểu giá trị thuần. Việc phân giải trường hợp enum và điều phối match là O(1), không cấp phát thêm ngoài đối tượng policy bất biến. Chúng không tạo ra chi phí đáng kể cho lộ trình ghi. Chính writer, chứ không phải yếu tố phân biệt, chiếm phần lớn ngân sách của mô-đun (wall_ms: 1500). Oracle veraPDF là một bước tích hợp liên tục (CI) ngoài luồng, không thuộc quá trình tạo tài liệu.

Các công tắc nghiêm ngặt trên ConformancePolicy kiểm soát hành vi bảo mật fail-closed: securityPkiRfc5280Strict (xác thực đường dẫn Request for Comments (RFC) 5280 §6), strictOcspProducedAtTolerance (cửa sổ sai lệch thời gian RFC 6960 §4.2.2.1), và allowStaleOcsp (mặc định false; từ chối các phản hồi Open Certification Status Protocol (OCSP) thiếu nextUpdate). Các giá trị mặc định này mang tính thận trọng và sẽ chuyển sang nghiêm ngặt trong một phiên bản chính tương lai theo chiến lược tương thích ngược đã được ghi lại. Xem mô-đun bảo mật và mô hình mối đe dọa của dự án để biết chi tiết về lộ trình chữ ký.

NextPDF không chứng nhận sự tuân thủ. Nó phát ra các cấu trúc do những tiêu chuẩn dưới đây định nghĩa. Một trình xác thực riêng biệt mới quyết định một tệp có tuân thủ hay không.

Tiêu chuẩnĐiều khoảnNextPDF Core làm gìTrạng thái
ISO 14289-2:2024 (PDF/UA-2)§6Phát ra cây cấu trúc, /MarkInfo /Marked true (nghiêm ngặt), /Lang, XMP pdfuaid qua lộ trình gắn thẻ của CoreHồ sơ Đã xác minh: pdfua.strict được oracle veraPDF xác thực (php oracle/run.php pdfua.strict) khi có sẵn tệp nhị phân veraPDF (cổng tùy chọn bật)
ISO 19005-4:2020 (PDF/A-4)§6.7.3Phát ra yếu tố phân biệt pdfaid:part / pdfa:conformance qua ConformanceModeĐã tuyên bố (phát ra yếu tố phân biệt, đã kiểm thử đơn vị); việc soạn thảo tệp PDF/A-4 chỉ có ở Premium
ISO 32000-2:2020 (PDF 2.0)§7.5.2Cấu trúc catalog/document cơ sởĐã tuyên bố (hành vi của công cụ cơ sở)

Hỗ trợ không phải là tuân thủ. NextPDF Core phát ra các cấu trúc định danh PDF/UA-2 và PDF/A-4, với bằng chứng triển khai trong tests/Unit/Conformance/. Chỉ trình xác thực chạy hồ sơ phù hợp mới có thể khẳng định một tệp tuân thủ PDF/A-4 hoặc PDF/UA-2. Theo Điều 5 của ISO 19005-4:2020, việc xác định sự tuân thủ là nhiệm vụ của trình xác thực, chứ không phải của thư viện tạo ra tệp.

Cổng kiểm soát veraPDF minh bạch về yêu cầu của nó. Oracle (oracle/run.php, oracle/lib/OracleRunner.php) gọi ra một ảnh Docker veraPDF được ghim phiên bản. Khi không có Docker hoặc ảnh, trình chạy thoát với mã 2 (lỗi hạ tầng) và không xác minh gì. Do đó, hồ sơ pdfua.strict là một cổng tuân thủ tùy chọn bật. Nó chỉ chứng minh sự tuân thủ trên những máy có sẵn tệp nhị phân veraPDF. NextPDF không đi kèm trình xác thực nhúng và không đưa ra tuyên bố tuân thủ nào khi thiếu nó.

Các trích dẫn được diễn giải lại từ kho tài liệu tuân thủ của NextPDF. Bản tóm tắt reference_id đủ 64 ký tự được ghi trong frontmatter của trang và trong _normative-evidence-conf.md.