原生 FreeText 預設外觀

原生 FreeText fallback 把有界的預設外觀狀態套用於產生的文字、排版、自動貼合與裝飾

已提供的 normal 外觀優先於從 FreeText 預設外觀與 rich text 產生

預設外觀運算子

運算子fallback 行為
Tf選擇原始字型資源與字型大小;字型大小為零時請求有界自動貼合
g rg k以灰階、RGB 或 CMYK 初始化文字填色
Tc Tw Tz把字元間距、字詞間距與水平文字縮放套用於繪製與排版測量
Ts TL套用文字抬升與明確的基線間距,包括零或負行距
Tm最多接受一個矩陣;其線性部分變換產生的文字,而註解排版決定放置位置
Tr從零到七選擇字形繪製與文字裁剪模式
G RG K w J j M d為文字與產生的裝飾初始化描邊顏色、寬度、線帽、連接、斜接與虛線狀態

矩陣平移運算元會被驗證,但不會取代 FreeText 在其註解矩形內的放置

水平縮放可以為零或負值;抬升、間距與線性矩陣會參與變換後的字形、advance 與裝飾幾何

這是一個有界的預設外觀 profile,不是通用 PDF content-stream 直譯器;不受支援的運算子、無效的運算元個數、畸形值與重複的文字矩陣會產生渲染錯誤

描邊顏色分量必須在零到一之間,線帽與連接值必須是從零到二的整數,寬度必須非負,斜接限制至少為一

虛線陣列最多包含 256 個非負有限值,非空陣列必須包含一個正值;空陣列選擇實線筆畫,奇數長度陣列會重複,phase 必須非負

排版、斷行與放置

FreeText 對齊使用可見 advance 做左、中、右放置;當產生的串流保留這些片段時,已編碼的尾隨空格與其來源映射保持原樣

字詞邊界斷行與硬段落斷行分別處理;不斷行空格不會變成一般 ASCII 軟分隔符

原始 raw-font 路徑保留其有界的空格與連字號斷行規則;該驗收集合不涵蓋所有 Unicode 斷行、雙向文字或複雜 shaping 用例

物理註解矩形、根 Form 邊界與內層裁剪保持固定;暫時子 Form 邊界計入完整的祖先與放置鏈

字形繪製與文字裁剪

Tr字形繪製裁剪貢獻
0填色無
1描邊無
2填色加描邊無
3無字形繪製無
4填色字形輪廓
5描邊字形輪廓
6填色加描邊字形輪廓
7無字形繪製字形輪廓

模式四到七在同一個文字物件內跨產生的 run 累積字形輪廓;累積的文字裁剪在該文字物件之後套用於後續產生的底線與刪除線裝飾

裁剪使用字形輪廓而非擴展的描邊輪廓;繪製狀態仍然特定於每個 run,外圍 graphics-state 範圍限制裁剪的生命週期

初始 DA 描邊狀態同時套用於根裝飾範圍與文字範圍;按 run 的覆寫與 graphics-state 儲存/還原保持原有意義

四個正向裁剪用例是單獨的驗收閘,使用手寫的雙 run 外觀、正向被裁剪的裝飾以及字形聯集之外的白色取樣

該閘還使用明確外觀的矩形填色見證來測試後端文字裁剪;該見證並不聲稱缺失外觀產生會發出矩形填色

正向 Tr4 到 Tr7 的獨立閱讀器驗證在官方 MuPDF 1.28.5 與 Poppler 上通過了四個有限的雙 run 用例,包括兩種字形內部、被裁剪的裝飾以及字形聯集之外的白色取樣

單獨的僅裁剪測試修訂版使用 Scale4 從未改變的頁面空間見證點選取完整像素單元;它保留原始顏色門檻,一般渲染保持在 Scale1

MuPDF 1.28.2 存在一個裁剪邊界相容性問題:當顏色變更在同一個文字物件中把前一個 run 在後一個 run 之前沖刷出來時,較早的 run 可能被排除在累積裁剪邊界之外

官方 MuPDF 1.28.5 CLI 與獨立釘選的 Poppler 接受了這些未改變的外觀;閱讀器版本與有限正向控制項不等同於對每個渲染 pipeline 的保證

自動貼合

DA 字型大小為零時,從初始產生排版開始有界的收縮與精煉搜尋,使用變換後的字形路徑、advance 與裝飾,而不只是未變換的行高

描邊擴展包含虛線方角線帽與斜接連接的保守變換支援

搜尋保留既有的 Cairo 與 FreeType 路徑量化;它不承諾數學上最大的理想字型大小,也不承諾各閱讀器間一致的 hinting

如果有界搜尋到達最小試探值之前沒有試探項可以放下,物理裁剪仍會約束發佈;超長內容不保證保持完全可見

原始字型與資源限制

原始內嵌的 Type1C、CIDFontType0C 與裸 Type1 fallback 已受支援;完整的 OpenType CFF 與 CFF2 default-instance 外觀路徑保留其已文件化的映射與嵌入規則

獨立的裸 CFF2 串流與非預設 variation 座標的選擇仍不在已發佈的 CFF2 路徑之內

token、物件、工作記憶體、操作、解碼資料與輸出限制適用於解析、暫時資源、貼合與發佈;取消會在有界工作期間被輪詢

失敗會保留來源圖形並允許同文件復原;達到限制不會把部分產生的外觀變成成功結果

可重現驗收與剩餘邊界

公開測試套件是 Tests/Linux/AnnotationDefaultAppearance/RunAnnotationDefaultAppearance.py,隨其資源與完整的封存 manifest 一起散布

其 normal 模式以最大通道差 2 執行 45 對 candidate/手寫 AP、七個原始限制群組,以及 epsilon 1e-6 下的獨立原始 AP 連續幾何

正向原始 AP 閱讀器渲染與已知的垂直像素單元觀察與連續幾何分開記錄;無論配對相等還是那些有限觀察都不能證明任意的產生候選幾何或任意變換後的點陣包絡

finite-AP 模式檢查六個保留的明確外觀仿射與虛線控制項;它不取代 normal 驗收、產生候選檢查或限制測試

保留的 45 個產生外觀在 epsilon 1e-6 下通過了獨立的連續幾何;其 90 張釘選的 MuPDF 與 Poppler 閱讀器影像也通過了獨立的全圖模型,涵蓋全部 3,168,000 個像素單元,最大通道差為零,沒有跳過的影像,也沒有排除的單元

該有限模型從原始手寫外觀與字型輪廓推導期望的字形、變換、裁剪、描邊與合成,使用每個閱讀器釘選的 FreeType 核心;它不從觀察到的影像學習期望像素

原始最大通道差保持為 2,墨量門檻保持為 245;這些通過涵蓋保留的語料庫與釘選的 pipeline,而非任意字型、所有渲染器建置或數學上最大貼合字型大小的證明

Linux 與 Windows FPC 目標要求 FPC 3.3.1 或更新版本;Windows FPC 使用單獨驗證的私有 NoGUI 依賴建置,且不啟動桌面閱讀器

相關主題:註解 fallback、註解裝飾、rich-text run 間距、原始 raw-font 外觀與 OpenType CFF2 default-instance 外觀