跳到內容

PDF 2.0 基準:NextPDF 在 ISO 32000-2 中實作的條款

邊界聲明。 NextPDF 僅說明其實作所引用的條款;並未將完整的 ISO 32000-2 符合性作為概括性主張。

ISO 32000-2:2020 是 PDF 2.0 的基礎標準。NextPDF Core 的預設輸出(ConformanceMode::Plain)是不受約束的 PDF 2.0:包含一個 %PDF-2.0 標頭、一份文件目錄、一套交互參照結構,以及一個符合規範的尾段。本頁說明 NextPDF 實作的基準條款,並明確界定限制範圍。本函式庫只主張其實作所引用的條款,並未提出「完整符合 ISO 32000-2」這種概括性主張。所謂符合規範的檔案,是指符合規範的閱讀器能依照標準處理的檔案。這項結果由驗證工具判定,而不是由本函式庫的旗標決定。

Terminal window
composer require nextpdf/core:^3

PDF 2.0 基準輸出是 Core 的預設值,不需要啟用任何設定檔。ConformanceMode::Plain 是預設值;PDF/A-4、PDF/UA-2、PDF/X 與 ZUGFeRD 等設定檔,都是建立在這層基準上的受限子集。

在套用任何設定檔之前,每一份 NextPDF 文件本身就是一個 PDF 2.0 檔案。寫入器滿足 ISO 32000-2 對符合規範檔案所要求的結構性義務:

  • 文件目錄 — §7.7.2:尾段 /Root 所參照的根物件,每一份輸出都會包含。
  • 交互參照結構 — §7.5.8:用來定位每一個物件的交互參照表或交互參照串流。
  • 尾段 — §7.5.5:符合規範的檔案必須帶有尾段字典,其中含有檔案的 /ID 識別碼。這個 /ID 對每個檔案都是唯一的,比對時會先透過正規化移除它。這正是為什麼大多數多物件輸出屬於 reproducibility_profile: structural,而不是逐位元組相同。
  • 邏輯結構 — §14.7.2:啟用標記模式時,這就是 PDF/UA-2 設定檔所依據的 StructTreeRoot 基準。
  • 版本擴充 — §7.12:宣告開發者擴充時,使用 Extensions 字典/開發者前綴機制。

NextPDF 實作上述條款,但並未執行完整的 ISO 32000-2 符合性評估;那是外部驗證工具的職責(例如 Arlington 文法檢查器或 veraPDF)。NextPDF\Compliance 隨附位元組串流交叉檢查(ArlingtonValidator),用來凸顯結構上的歧異。這些檢查有助於驗證,但不是合格證明。

符號效果
ConformanceMode::Plain預設值 — 不受約束的 PDF 2.0 輸出。
ConformanceMode::requiresPdf17(): bool對 PDF 2.0 模式回傳 False;寫入器會輸出 %PDF-2.0 標頭。
NextPDF\Compliance\Validator\ArlingtonValidator對照 Arlington PDF 模型進行文法交叉檢查(協助驗證)。
<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;
$out = getenv('NEXTPDF_COOKBOOK_OUTPUT') ?: __DIR__ . '/baseline.pdf';
$doc = Document::createStandalone(); // ConformanceMode::Plain — PDF 2.0
$doc->setTitle('PDF 2.0 baseline');
$doc->writeHtml('<h1>Hello PDF 2.0</h1><p>Unconstrained baseline output.</p>');
$doc->save($out);
echo "Wrote {$out} (%PDF-2.0). Validate structure with an external checker.\n";

基準輸出在正式環境中的做法,是在 CI 中針對代表性輸出執行外部結構驗證工具(Arlington/veraPDF),並以其報告作為把關依據。本函式庫負責輸出結構;是否符合規範由檢查工具裁定。本函式庫並未提出任何概括性的符合性主張。

  • /ID 對每個檔案都是唯一的。 含有尾段 /ID/CreationDate 或字型子集前綴的基準輸出,並非逐位元組穩定。請以結構性設定檔(qpdf-normalize)進行比對,而不是直接比對原始的 sha256。
  • Plain ≠ 封存等級。 ConformanceMode::Plain 並不是 PDF/A。它不帶任何 OutputIntent 或 pdfaid 標記。請勿把它當成封存等級的檔案。
  • 實作 ≠ 完整符合。 本頁列出 NextPDF 實作的條款。這並不等於聲明每一份文件都滿足每一條 ISO 32000-2 條款;那必須由逐份文件的驗證工具裁定。
  • 擴充採用命名空間。 開發者擴充會搭配已註冊的前綴,使用 §7.12 的 Extensions 字典。未加前綴的私有 Index(索引)鍵,屬於基準偏差。

基準輸出是引擎的核心路徑。對於典型文件,預算為牆鐘時間 ≤ 1500 ms、尖峰記憶體 ≤ 64 MB。基準寫入器支援向後相容性矩陣(PHP 8.1–8.4)。

PDF 2.0 基準輸出不帶任何加密或簽章,除非明確加上。加密處理的是機密性(另有範例說明)。ISO 權限位元仰賴閱讀器配合,並不是存取控制。基準輸出不提供任何安全性保證。

主張規範條款參考 ID
符合規範的 PDF 2.0 檔案必須帶有符合規範的尾段/檔案結構。ISO 32000-2§7.5.5
每一個物件都可透過交互參照表或交互參照串流定位。ISO 32000-2§7.5.8
檔案以文件目錄作為其根物件。ISO 32000-2§7.7.2
符合性是以符合規範的寫入器與閱讀器來界定的。ISO 32000-2§7.2
版本擴充使用 Extensions 字典/開發者前綴。ISO 32000-2§7.12
標記輸出建立在 ISO 32000-2 的邏輯結構基準之上。ISO 32000-2§14.7.2

引用使用條款 ID 搭配 reference_id 指標,指向驗證語料庫。不重製任何標準正文;各條款均以 NextPDF 自己的文字摘要。