Pro 版本
字型工具
NextPDF Pro 會檢視嵌入的字型程式、依標準命名慣例識別子集字型,並產生一份帶有預估大小影響的結構化去子集化計畫。
供應狀況與授權
標題為「供應狀況與授權」的區段此能力隨 NextPDF Pro(nextpdf/pro)出貨,並以 Pro 等級的授權封套啟用。缺少該授權的部署不會載入此能力的類別。比較各版本並取得授權。
沒有任何逐功能的授權旗標閘控此模組。只要安裝了 nextpdf/pro,Font Tools 的類別即隨時可用。
composer require nextpdf/pro:^3概念總覽
標題為「概念總覽」的區段PDF 中的子集字型只嵌入文件所使用的字形。依慣例,它們的 /BaseFont 名稱會帶有一個由六個大寫字母組成的標記再接 +,例如 ABCDEF+Arial。NextPDF Pro:
- 偵測子集。
FontDesubsetter會在原始 PDF 資料中掃描/BaseFont項目、辨識子集前綴樣式,並將每個項目回報為一個SubsetInfo值物件,內含原始字族名稱、子集字形數、完整字形數,以及編碼。 - 規劃去子集化。
DesubsetPlan會收集鎖定要以完整字型程式替換的子集字型,並回報一個預估的位元組大小增量,讓你在動作前決定去子集化是否值得付出檔案大小的成本。
Font Tools 是一個分析與規劃層。它描述存在哪些內容、以及去子集化會付出多少成本;它本身不會改寫字型程式。
為何如此設計
標題為「為何如此設計」的區段改寫嵌入的字型程式才是困難且高風險的部分。字形輪廓、hinting 與 cmap 表都必須維持一致,一個失誤就會讓算繪損毀。因此 NextPDF Pro 將便宜、安全的工作 —— 盤點與成本推估 —— 與那個昂貴的改寫拆開。掃描器只讀取位元組;它從不解析或執行字型程式,因此保持確定性且無副作用。字形數與大小增量刻意標示為啟發值,讓一個能量判斷保持誠實,而非信任模組無法量測的數字。這讓你能在採購完整字型程式之前,先權衡去子集化是否值得付出成本。
設計背景:字型:困難的部分。
API 介面
標題為「API 介面」的區段| 類別 | 職責 |
|---|---|
FontDesubsetter | 掃描 PDF 資料並回報子集字型項目。 |
SubsetInfo | 對一個已偵測子集的不可變描述。 |
DesubsetPlan | 鎖定的子集加上預估大小增量。 |
程式碼範例 —— 快速上手
標題為「程式碼範例 —— 快速上手」的區段use NextPDF\Pro\FontTools\FontDesubsetter;
$subsets = (new FontDesubsetter())->analyzeSubsets($pdfBytes);foreach ($subsets as $info) { echo $info->baseFont . ': ' . $info->subsetGlyphCount . " glyphs\n";}程式碼範例 —— 正式環境
標題為「程式碼範例 —— 正式環境」的區段use NextPDF\Pro\FontTools\FontDesubsetter;
$desubsetter = new FontDesubsetter();$subsets = $desubsetter->analyzeSubsets($pdfBytes);$logger->info('fonttools.scan', ['subset_count' => count($subsets)]);邊界案例與陷阱
標題為「邊界案例與陷阱」的區段- 對於不含六字母前綴的
/BaseFont,掃描器會將其回報為非子集項目,而非加以略過。 - 預估大小增量是一個以每字形平均位元組數為基礎的啟發值,而非實際量測值。
- 偵測作用於
/BaseFont項目的位元組表示;經加密或高度壓縮的物件流可能需要先解碼。
子集掃描與 PDF 位元組長度呈線性關係。規劃與已偵測子集的數量呈線性關係。
安全注意事項
標題為「安全注意事項」的區段Font Tools 只讀取結構中繼資料。它不執行字型程式,也不解析外部字型參照。
一致性
標題為「一致性」的區段| 行為 | 參照 | 狀態 |
|---|---|---|
| 子集字型命名慣例 | ISO 32000-2 §9.9.2 | 已對齊(改寫) |
行為合約
標題為「行為合約」的區段FontDesubsetter::analyzeSubsets()會在原始 PDF 資料中掃描/BaseFont項目、辨識「六個大寫字母加+」的子集前綴,並將每個項目以一個不可變的SubsetInfo回傳,內含原始字族名稱、子集字形數、完整字形數,以及編碼。- 不含子集前綴的
/BaseFont會被回報為非子集項目,而非加以略過。 DesubsetPlan會收集鎖定要替換的子集,並回報一個以每字形平均位元組數為基礎的預估位元組大小增量 —— 一個啟發值,而非量測值。- 這是一個分析與規劃層。它回報存在哪些內容、以及去子集化會付出多少成本;它不改寫字型程式、不執行字型程式,也不解析外部字型參照。
Enterprise 邊界註記
標題為「Enterprise 邊界註記」的區段Enterprise 不會改變 Font Tools 的行為。Enterprise 新增更高等級的功能,另行記載;它們對於子集偵測或去子集規劃並非必要。
Core 回退/替代方案
標題為「Core 回退/替代方案」的區段NextPDF Core 的開源字型管線負責基底字型嵌入。子集核算與去子集規劃是 Pro 的新增功能。請參閱 /modules/font/。
發佈邊界
標題為「發佈邊界」的區段本頁僅描述外部可觀察的行為,以及受支援的公開 API 介面。內部命名空間路徑、輔助類別、機制表、runbook 檔名與工單前綴皆不在範圍內。
另請參閱
標題為「另請參閱」的區段- Font Tools —— 深入參考 —— API 合約、行為與失敗模式。
- Optimizer —— 檔案大小最佳化。
- Core 字型模組 —— 開源字型處理。