跳到內容
getnextpdf.com

Pro 版本

字型工具

NextPDF Pro 會檢視嵌入的字型程式、依標準命名慣例識別子集字型,並產生一份帶有預估大小影響的結構化去子集化計畫。

此能力隨 NextPDF Pronextpdf/pro)出貨,並以 Pro 等級的授權封套啟用。缺少該授權的部署不會載入此能力的類別。比較各版本並取得授權

沒有任何逐功能的授權旗標閘控此模組。只要安裝了 nextpdf/pro,Font Tools 的類別即隨時可用。

Terminal window
composer require nextpdf/pro:^3

PDF 中的子集字型只嵌入文件所使用的字形。依慣例,它們的 /BaseFont 名稱會帶有一個由六個大寫字母組成的標記再接 +,例如 ABCDEF+Arial。NextPDF Pro:

  • 偵測子集。 FontDesubsetter 會在原始 PDF 資料中掃描 /BaseFont 項目、辨識子集前綴樣式,並將每個項目回報為一個 SubsetInfo 值物件,內含原始字族名稱、子集字形數、完整字形數,以及編碼。
  • 規劃去子集化。 DesubsetPlan 會收集鎖定要以完整字型程式替換的子集字型,並回報一個預估的位元組大小增量,讓你在動作前決定去子集化是否值得付出檔案大小的成本。

Font Tools 是一個分析與規劃層。它描述存在哪些內容、以及去子集化會付出多少成本;它本身不會改寫字型程式。

改寫嵌入的字型程式才是困難且高風險的部分。字形輪廓、hinting 與 cmap 表都必須維持一致,一個失誤就會讓算繪損毀。因此 NextPDF Pro 將便宜、安全的工作 —— 盤點與成本推估 —— 與那個昂貴的改寫拆開。掃描器只讀取位元組;它從不解析或執行字型程式,因此保持確定性且無副作用。字形數與大小增量刻意標示為啟發值,讓一個能量判斷保持誠實,而非信任模組無法量測的數字。這讓你能在採購完整字型程式之前,先權衡去子集化是否值得付出成本。

設計背景:字型:困難的部分

類別職責
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 不會改變 Font Tools 的行為。Enterprise 新增更高等級的功能,另行記載;它們對於子集偵測或去子集規劃並非必要。

NextPDF Core 的開源字型管線負責基底字型嵌入。子集核算與去子集規劃是 Pro 的新增功能。請參閱 /modules/font/

本頁僅描述外部可觀察的行為,以及受支援的公開 API 介面。內部命名空間路徑、輔助類別、機制表、runbook 檔名與工單前綴皆不在範圍內。