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」這種概括性主張。所謂符合規範的檔案,是指符合規範的閱讀器能依照標準處理的檔案。這項結果由驗證工具判定,而不是由本函式庫的旗標決定。
composer require nextpdf/core:^3PDF 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),用來凸顯結構上的歧異。這些檢查有助於驗證,但不是合格證明。
API 介面
標題為「API 介面」的區段| 符號 | 效果 |
|---|---|
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 自己的文字摘要。