原生 Linux Cairo 轉譯器

HPDFHeadlessCairoDevice 使用 Cairo image surface 與 FreeType,把已載入的 PDF 頁面轉譯成 RGB PNG,不需要顯示伺服器或 PDF 閱讀器

提供來自 THPDFHeadlessDocument.GetRenderAccess(PageIndex) 的序列借用視圖,並在轉譯回傳前保持該文件載入且不變

Document := THPDFHeadlessDocument.Create;
try
  Document.LoadFromFile('input.pdf');
  Options := THPDFHeadlessRenderOptions.Default;
  Info := HPDFRenderHeadlessPagePNGFile(
    Document.GetRenderAccess(0), 'page.png', Options);
finally
  Document.Free;
end;

執行期依賴

原生 Linux 使用 libcairo.so.2、libfreetype.so.6,以及標準字型提供者的 Fontconfig 依賴;請安裝合適的字型供 Helvetica、Times 與 Courier 替代

HOTPDF_CAIRO_LIBRARY 與 HOTPDF_FREETYPE_LIBRARY 可在第一次轉譯前選擇明確的相容程式庫路徑;成功的模組會保持載入,因為原生字型快取可能保留解構回呼

當那些原生快取可能保留 HotPDF 字型銷毀回呼時,host 必須保持其 HotPDF 執行檔、DLL 或套件程式碼載入;獨立於快取生命週期卸載 host 模組超出此設定檔範圍

Windows 透過同一橋接使用相容的 libcairo-2.dll 與 libfreetype-6.dll;執行期二進位檔及其授權由應用程式提供

ICCBased 色彩另載入 liblcms2.so.2;JPEG 使用 libturbojpeg.so.0,JPEG 2000 使用 OpenJPEG 2.5 相容的 libopenjp2.so.7;這些依賴只在對應輸入時載入

HOTPDF_LCMS_LIBRARY、HOTPDF_TURBOJPEG_LIBRARY 與 HOTPDF_OPENJPEG_LIBRARY 覆寫那些路徑;Windows 預設為 lcms2.dll、turbojpeg.dll 與 openjp2.dll

轉譯設定檔

支援的內容包括路徑建構與繪製、nonzero 與 even-odd 填滿規則、裁剪、巢狀圖形狀態、CTM 轉換、線條樣式、DeviceGray/RGB/CMYK 色彩、一般 alpha,以及帶自有資源、Matrix 與 BBox 的重複 Form XObject

線寬可以為零:0 w 或 ExtGState LW=0 要求的 PDF 髮絲線使用一像素裝置空間描邊;負寬度被拒絕

ExtGState D 與內容串流的 d 運算子共用有界的 dash 驗證:支援實心空模式、奇數長度重複、零長度條目、分數長度與帶正負號相位

dash 模式最多接受 256 個有限非負長度,最大到 1e9,非空時至少一個正長度,相位為絕對值不超過 1e9 的有限值;每個元素消耗作業工作量,暫存儲存計入 working-byte 准入

運算元陣列接受 PDF 註解,包括數值 dash 陣列與 TJ 文字陣列;格式錯誤的語彙值與缺少的右括號由共享掃描器保留並由轉譯器拒絕,不會無聲消失

水平文字使用共享字形直譯器處理文字矩陣、明確 PDF 寬度、標準 Helvetica/Times/Courier 推進量、字元與單字間距、水平縮放與 TJ 調整

內嵌受支援字型程式使用解析字形 ID 的 FreeType;Unicode ToUnicode 對應仍可透過文件文字 API 取得,標準字型點陣形狀則依賴已安裝的替代字型

複合文字支援 Identity-H、Identity-V、明確內嵌編碼 CMap 串流,以及內建 UniJIS、UniGB、UniCNS 與 UniKS 的 UCS2/UTF16 水平與垂直對應;不需要另外安裝 CMap 資源

垂直字形繪製遵循預設與明確的 DW2/W2 定位向量、文字抬升、水平縮放、文字與圖形矩陣以及 TJ 位移;UTF-16 對應接受增補字元碼

支援全部八種文字轉譯模式,包括在 ET 累積進裁剪的垂直 fill/stroke/invisible 輪廓;內嵌編碼 CMap 串流保留其 WMode 與非恆等 CID 對應

透明的 fill-and-stroke 合併操作使用物件 knockout 合成,重疊的填色不會透過描邊滲出;Type3 字形程序執行其自有有界資源與字型矩陣

影像接受 1/2/4/8/16 位元取樣與 Decode 陣列、stencil、明確、color-key 與 soft mask、不同尺寸遮罩與 Matte 還原;缺少 Interpolate 使用最近鄰取樣,true 選擇雙線性取樣

JPX codestream 接受最多 26 位元的帶號或無號來源分量,包括混合精度、子取樣與明確不透明度,並正規化成有界的 8 或 16 位元取樣;依 PDF 影像設定檔要求,JPX 影像忽略影像字典的 BitsPerComponent 與非 stencil 的 Decode 條目

支援索引調色盤與經驗證的 ICCBased profile-to-sRGB 轉換,適用於影像與路徑色彩;沒有設定檔的 DeviceCMYK 保留簡單裝置轉換

ICCBased 轉換接受 Gray、RGB、CMYK、Lab 與 XYZ 設定檔簽名,並嚴格驗證宣告的分量數與分量範圍

Lab 設定檔運算元使用實體 L a b 座標,預設範圍 [0 100 -128 127 -128 127];XYZ 運算元使用實體 X Y Z 座標,每分量預設無號 1.15 範圍 [0 65535/32768]

XYZ 設定檔輸入是原生相容性擴充,不代表封存 PDF 符合性;Lab 與 XYZ 來源設定檔不選擇受支援的透明混合空間

ICC 串流的 Range 要求每分量兩個有限有序值,並約束色彩運算元;原始影像 Decode 預設與 Indexed 查找值使用那些分量範圍

CalGray、CalRGB 與 Lab 支援路徑、文字、影像與 Indexed 調色盤基色;參數嚴格驗證,CalRGB Matrix 條目遵循 PDF 行序,Lab 分量與影像 Decode 預設使用宣告範圍

CIE 色彩使用 Bradford 色適應與相對 sRGB 輸出;BlackPoint 中繼資料會驗證,額外的黑點補償與渲染意圖狀態政策仍是獨立擴充

Separation 與 DeviceN 複合色彩保留一至三十二個 tint 分量,適用於路徑、文字、Indexed 基色與緊密封裝影像;裝置或 CIE 替代色彩使用有界的取樣、指數、拼接或計算器 tint 函式

ICCBased Lab/XYZ 與 CalGray/CalRGB/Lab 替代色彩來源在轉換進受支援透明群組前,於 tint 轉換中保留實體座標

多維取樣 tint 函式支援線性與三次內插、Domain、Encode、Decode、輸出 Range 與最多 32 位元的緊密封裝取樣深度;三次求值以張量積擴展既有純量四節點慣例,短維度退回線性,並有有界工作與取消

內插慣例與獨立的公式與閱讀器證據見 原生取樣色彩函式

Separation None 與只含 None 色料的 DeviceN 空間既不貢獻色彩也不貢獻 knockout 形狀;混合 None 分量仍會到達替代 tint 轉換

Separation All 對每個可用輸出色料套用其 tint,使用中性 RGB 頁面輸出,並在 CMYK 群組內保留每個印刷色分量

CMYK 群組在混合前接收原始四分量替代 tint 值;spot separation 分色版、NChannel 印刷色/色料選擇與混合提示模擬仍是獨立擴充

終端影像回呼在原生 JPEG、JPEG 2000、CCITT 或 JBIG2 解碼前保留文件解密與前置串流 filter;JBIG2 支援算術與 Huffman 文字、MMR 與共享全域字典

JPEG 2000 支援子取樣與帶號分量、推斷的色彩與取樣宣告、內嵌 ICC 設定檔、明確色彩空間覆寫,以及透過 SMaskInData 的獨立或關聯不透明度;其分量值正規化為八或十六位元,其影像 Decode 陣列被忽略

內嵌或明確 Lab/XYZ ICC 設定檔使用實體分量範圍;關聯不透明度在套用實體座標映射前,先從正規化儲存取樣中移除,保留 Lab 偏移通道

圖形狀態 SMask 支援 Alpha 與 Luminosity 群組、背景色、Form 矩陣、儲存狀態還原,以及取樣、指數、拼接與有界計算器轉換函式;影像自身的 soft mask 覆寫圖形狀態 soft mask

支援全部十六種標準 PDF 混合模式;Form 與頁面群組支援 isolated 與 nonisolated 合成、物件 knockout,以及 DeviceGray、DeviceRGB、DeviceCMYK、CalGray、CalRGB 或一、三、四分量 ICCBased 混合空間

校準群組在群組邊界前保留原生分量值,並透過逆校準轉換接受裝置或 Lab 來源色彩;Lab 本身不是合法混合空間

校準 Luminosity 遮罩保留其群組座標,並在套用轉換函式前求值 CIE XYZ-Y,包括群組不透明度與背景色

Knockout 合成把物件的幾何形狀與 soft-mask 不透明度分開;stencil 孔洞保留前置物件,而遮罩路徑在其繪製幾何整體上取代它們

巢狀 knockout 群組保留其子群組幾何形狀的聯集,包括零不透明度物件;nonisolated 子群組使用外包 knockout 群組的初始背景

CMYK 群組在各自有界的影像平面中保留互補的 CMY 與黑色分量,並在群組邊界轉換合併結果;不可分離混合模式依所選模式保留或取代黑色

Nonisolated 群組轉譯額外的有界不透明度 pass,移除初始背景貢獻,並一次性套用傳入群組 alpha 與混合模式;頁面透明群組在合成到頁面背景前使用 isolated surface

nonisolated Form 繼承其外包混合空間;明確的群組 CS 條目不會把初始背景切換到另一空間

既有的正常註解外觀從其轉換後 BBox 調適到 Rect;RenderAnnotations=false 在任一用途下省略外觀

Usage 預設 hruView,跳過 Hidden 與 NoView 註解,以及設有 Invisible 的未知註解類型;ISO 32000 標準註解類型(包括 PDF 2.0 RichMedia 與 Projection)在只設 Invisible 時,只要有受支援的正常外觀就保持可見

RichMedia 與 Projection 驗收涵蓋帶有效媒體資產或關聯預設 3D 視圖的既有靜態正常外觀;媒體播放與互動 3D 啟用不在此點陣路徑內

hruPrint 只繪製設有 Print 且未設 Hidden 的註解;Invisible 在任一用途下抑制未知註解類型,NoView 不抑制列印,NoZoom 不改變列印外觀尺寸

可見註解需要既有的受支援正常外觀串流;轉譯器不從註解中繼資料或欄位值合成外觀

對檢視輸出,註解 NoZoom 在保留 UserUnit 的同時,從外觀尺寸移除轉譯縮放;NoRotate 在任一用途下於頁面旋轉時保持調適外觀直立,兩者都保留轉換後的左上 Rect 錨點與頁面裁剪

帶既有正常外觀的文字註解在檢視輸出中無論其明確旗標為何,行為都如同 NoZoom 與 NoRotate;列印輸出保留其 NoRotate 行為但忽略 NoZoom

Usage 控制靜態點陣可見性與註解幾何;純互動旗標不會產生懸停或編輯行為,既有的抽取權限回呼仍為必要,且不授予列印權限

靜態輸出中的 optional content

轉譯消費 catalog 的預設 OCProperties/D 設定,從 BaseState 初始化群組狀態,套用 ON 與 OFF 覆寫,並在判定可見性時使用相符的 Intent 值

成員字典支援 AnyOn、AllOn、AnyOff 與 AllOff;遞迴 VE 運算式支援 And、Or 與單運算元 Not,VE 優先於較簡單的政策

Null、不可用與過期群組參照沒有成員效果;設定意圖之外的群組不控制可見性,沒有適用群組的成員或運算式讓內容保持可見

巢狀 /OC 標記內容、影像與 Form XObjects 以及註解都遵循最終狀態;隱藏的標記區段仍更新色彩、矩陣、裁剪與文字位置,而隱藏的整個 XObjects 與註解可以跳過

一般標記內容屬性字典仍可用,包括巢狀行內值;內容陣列在其組成串流之間保留標記內容狀態,子串流保持自己的標記內容巢狀

獨立的最終形式點陣化在檢視與列印模式都使用預設設定,不自動套用互動式 AS 用途建議,如 ISO 32000-1:2008 第 8.11.4.5 節所述;明確的 ViewerState 啟用 View、Print、Export、Zoom、Language 與 User 建議,並支援持久手動選取與暫時事件狀態

缺少 optional-content 屬性或 nil 借用 catalog 讓 optional-content 結構沒有可見性效果;格式錯誤的活動成員、運算式循環與設定的工作量、記憶體或遞迴上限會在 PNG 發布前失敗

仿射外觀矩陣與非零 BBox 原點在這些旗標下保留其正常調適;極小的轉譯縮放仍可能讓 Cairo 初始頁面矩陣在數值上不可逆

轉譯頁面使用 MediaBox/CropBox 交集、繼承頁面框與直角 Rotate,以及頁面的 UserUnit;縮放 1 產生每有效頁面點一像素,surface 尺寸向上取整

sh 運算子繪製函式式、軸向與放射狀 shading(ShadingTypes 1–3),支援雙輸入 domain、shading 矩陣、放射圓選擇、Extend 端點、BBox 與既有路徑裁剪

受支援的色彩函式與純量函式陣列透過裝置、校準、ICC Lab/XYZ 與 Separation/DeviceN 來源色彩轉換;目前填色不透明度、混合模式、圖形狀態 soft mask 與透明群組 knockout 套用於產生的 shading

保留目前路徑與色彩;shading Background 被 sh 忽略,AntiAlias 是帶像素中心取色的裝置提示

不支援的 ExtGState 條目與不支援的內容運算子仍在此設定檔之外

三角網格 shading

ShadingTypes 4 與 5 繪製自由形式與格點 Gouraud 三角網格,支援邊重用、任意格點幾何、位元組對齊頂點記錄、最多 32 位元座標精度與最多 16 位元分量精度

頂點分量在色彩轉換前於裝置像素中心內插;選填的單輸入函式或分量函式陣列求值內插參數,包括校準、ICC 與特殊色彩空間

Indexed 來源把內插索引四捨五入到最近的調色盤條目;十六進位查找字串只解碼一次,支援空白、混合大小寫數位與奇數末 nibble 補位,而 literal 查找字串保留其解碼 bytes

目前轉換、裁剪、BBox、填色不透明度、混合模式、soft mask、非繪製色料與群組 knockout 套用於完成的網格;保留的串流 bytes、暫存頁面 surface 與兩個格點列計入工作記憶體准入

頂點解析、三角光柵化與函式共用彙總操作與取消輪詢;格式錯誤或截斷的記錄與不完整格點列在輸出發布前失敗

聚焦驗收檢查封閉重心公式與獨立的 MuPDF 及 Poppler 輸出;證明記錄把來源閱讀器失敗與頂點補位、未用旗標位元與網格透明分開記錄,並對非繪製色彩與正規化 Indexed 值使用明確的替代閱讀器公式

Coons 與 tensor patch 網格

ShadingTypes 6 與 7 繪製三次 Coons 邊界與 tensor 控制網,支援前邊重用、位元組對齊記錄、低二位旗標語意,以及與三角網格相同的座標與分量精度

角落分量在選填函式與色彩轉換前於 patch 參數中雙線性內插;Coons 邊界升階為等效雙三次 Bernstein 網,其二階導數界限選擇細分,輸出像素幾何誤差不超過 0.125

多項式反演精煉像素參數;摺疊覆蓋選擇最大 v 參數,v 相同時再選最大 u 參數,而較晚的 patch 在完成的 shading 接收物件透明前取代較早的色彩

共享網格合成器套用裁剪、BBox、shading 圖樣、非繪製色料、不透明度、混合、soft mask 與群組 knockout;兩個細分列與每像素參數及階數陣列計入活動工作位元組准入

控制點解析、細分、光柵化與色彩函式共用操作上限與取消;聚焦驗收對摺疊 patch 使用獨立 Coons 與 tensor 公式及三次根,來源閱讀器失敗與一般 RGB 公式頁驗證分開記錄

繼承的文字狀態

Form、Type3 與 pattern 子串流從其初始圖形狀態繼承適用的字型物件、字型大小、字元間距、單字間距、水平縮放、行距、轉譯模式與抬升;同名稱的子資源字型在本地 Tf 選取前不會取代繼承字型

儲存的圖形狀態還原文字參數,TD 與雙引號運算子對後續子串流保留其行距與間距變更;每個子串流以自己的文字矩陣開始

獨立註解外觀從預設文字參數開始,不保留頁面內容的最終文字狀態

轉譯模式 3 的 Type3 文字不產生可見字形圖形;聚焦 Type3 巢狀文字證明把 MuPDF 的預設參數偏差與繼承狀態公式分開保留,而 Poppler 在那些 fixtures 中遵循繼承參數

Tiling 與 shading 圖樣

Pattern 色彩空間支援彩色與非彩色 tiling 圖樣、TilingType 1–3、shading 圖樣、PatternMatrix、cell BBox、正負間距、圖樣選取、儲存狀態還原,以及填色或描邊繪製

非彩色圖樣從受支援基色空間取得分量,並可繪製影像 stencil;非彩色定義內的明確色彩變更、彩色影像與直接 shading 是無效 PDF 內容,透過巢狀 Form 與 Type3 程序也一樣被拒絕

選取的圖樣保留解析其定義的內容串流預設座標空間;後續 cm 操作與 Form 內使用的繼承圖樣不會取代該原點

定義以父層初始受支援圖形狀態與預設透明參數開始;tiling 定義形成 nonisolated 非 knockout 群組,shading 定義使用物件 knockout

透明與重疊的 tiling cell 對目前背景求值;繪製完成圖樣時,傳入物件 alpha 與混合模式一次性套用,包括巢狀圖樣、文字、描邊與影像遮罩

Shading 圖樣 ExtGState 增補受支援 shading 參數,包括不透明度與 soft mask;Background 在 shading 前繪製,BBox 裁剪兩者貢獻,非繪製 None 色料既不貢獻色彩也不貢獻形狀

圖樣求值接受兩個頁面 surface 與解碼 cell 內容,把可見 cell 列舉限制在目前裁剪,並在轉譯 cell 與移除背景貢獻時輪詢取消

聚焦 fixtures 以原生像素與獨立閱讀器輸出比對封閉座標、色彩與合成公式;證明檔案保留繼承 Form 圖樣原點、shading 圖樣 ExtGState 不透明度與非繪製 None 色彩的閱讀器差異,那些案例有獨立的一般向量公式頁

CID 鍵值 CFF 字型

內嵌 CIDFontType0 字型在獨立與 OpenType 容器中解析真實 CFF CID,包括非恆等映射、CID 65535、內嵌 Encoding CMap、垂直 W2 原點、轉換輪廓與文字裁剪

獨立 CFF face 以 CID 載入,SFNT 包裝 face 以緊湊字形索引載入;橋接為 Linux LP64 與 Windows LLP64 使用正確的 FreeType face 版面

未映射的字元碼或缺席的請求 CID 先為原始碼查詢 notdefchar 與 notdefrange,替代缺席時使用強制的 CID 0 字形;範圍有常數 CID 目標且字元條目優先,而存在的字形保留其請求 CID

聚焦驗收對 28 個有效來源使用宣告的多邊形輪廓與原點公式,並有獨立的 MuPDF 與 Poppler 比較及一般 RGB 公式頁

證明檔案保留 CID 鍵值 OpenType 字形選取與省略 notdef 替代的來源閱讀器差異;省略替代另行量測,不取代必要的原生來源公式

界限與取消

精確的內建 Type0 編碼涵蓋全部 200 個隨附編碼名稱:Identity-H 與 Identity-V、十六個 UCS2 與 UTF16 對應,以及 182 個額外的舊式與 Unicode 對應,附扁平化的垂直字元覆寫

混合一到四位元組運算元使用逐位元組 codespace 界限與最長前綴無效碼復原;UTF8 與 UTF32 解碼與反向編碼保留增補 scalar 與有效的前導零 bytes

Encoding 與 ToUnicode 串流解析內文 usecmap 與字典 UseCMap 名稱或串流,字典優先,並有本地字元、範圍、Unicode 序列與 notdef 覆寫

每個子 CMap 保持自己的書寫模式,省略 WMode 時預設水平;明確垂直模式選擇繼承映射與字型垂直度量

CMap 繼承使用執行緒區域巢狀深度上限,不改變 THPDFCMapBounds 版面;循環、格式錯誤父層與超深在輸出發布前失敗,finally 區塊在取消或例外後還原上限

聚焦證明在沒有那些內建表的獨立閱讀器中保留具名 UTF8 與 UTF32 來源失敗,驗證分開的內嵌映射伴隨檔,並在多碼選同 CID 時記錄來源文字差異

Tests/Linux/Run-HeadlessLegacyCMapAcceptance.sh 在原生 Linux 建置並測試精確編碼區間、混合寬度來源 PDF、巢狀轉譯、執行緒隔離與取消復原

Tests/Linux/Run-HeadlessLegacyCMapWindowsAcceptance.py 執行相符的原生 Windows 執行檔,記錄來源、二進位、PNG 與診斷雜湊,然後把固定擷取傳送到原生 Linux 儲存,做獨立的 MuPDF 與 Poppler 檢查

緊密封裝映射保留其資源雜湊與完整再散布聲明;原始碼與二進位散布請保留 CMap 資料授權

PDF 名稱值與內容名稱運算元中的十六進位跳脫在解析字型、色彩空間、混合模式與資源前解碼一次;解碼產生的字面井號仍是語意名稱的一部分

共享字型解碼器把這些語意套用於字型字典值、具名編碼、Differences 字形名稱與 CIDToGIDMap,不修改借用物件,也不解碼字串值

跳脫的轉譯器名稱使用線性解碼、暫時工作位元組准入、彙總操作上限與取消輪詢;聚焦驗收比較等效原生 PNG bytes 與文字,以及獨立的 MuPDF 與 Poppler 輸出

Shading 點陣工作與色彩函式共用彙總操作上限與取消輪詢;暫存 surface 與最多 8,192 個已轉換色彩的精確座標快取計入活動工作位元組准入

聚焦 shading 驗收使用封閉幾何/函式/色彩公式與獨立向量公式頁,保留 BBox 裁剪、退化幾何、色彩轉換、特殊色料名稱與 knockout 鑲嵌的來源閱讀器差異

Options 約束 surface 像素、活動受管緩衝、累計解碼 bytes、編碼 PNG bytes、token 與運算子工作,以及遞迴或圖形狀態深度

字型解碼使用保守准入額度:32 MiB 暫態容量、解碼字型串流大小的 64 倍、遞迴檢查陣列槽位的 128 倍,以及保留解碼器估計的兩倍計入活動彙總

CID 表接受 65,536 個保留條目;列舉限定真實 charstrings,notdef 陣列計入解碼器深複製與保留位元組會計

CMap 解析與 notdef 查找共用執行緒區域巢狀條目界限與工作輪詢;轉譯器範圍共用彙總 token 與操作上限,長語彙掃描最多每 256 bytes 輪詢一次

直譯器也在建立字形記錄前,從輸入運算元 bytes 與最長 ToUnicode 映射保留每字形 Unicode 序列容量,因此重複長映射無法繞過工作記憶體准入

小的工作記憶體預算可能拒絕一個簡單字型,即使其最終配置放得下;這些檢查涵蓋受管緩衝與 CPU 影像 surface,而 Cairo、Fontconfig、FreeType 快取與整個處理程序 RSS 在會計之外

透明、soft-mask、背景、不透明度與物件 knockout surface 計入活動 surface 預算;轉換函式共用彙總操作預算,ICC 與影像編解碼器使用保守准入,原生 JBIG2 解碼器累計約束點陣/context 配置並在解碼期間輪詢取消

互補 CMY、黑色與幾何形狀走訪共用彙總操作、解碼與取消上限;使用相同解析串流的設定檔共用一個已驗證轉換與活動准入保留,直到頁面轉譯完成

保留的函式串流、函式求值與圖形狀態記錄計入工作位元組准入;遞迴 tint 函式、多維內插與計算器指令共用操作與取消上限

借用取消 token 在有界解碼、斷詞、運算子、字形解析器呼叫、影像列、遞迴、PNG 編碼期間與發布前輪詢;生命週期由呼叫端擁有

轉譯器透過借用文件政策檢查抽取權限,並保留來源物件值與來源 bytes

輸出所有權

HPDFRenderHeadlessPagePNG 在寫入呼叫端自有串流前私下完成轉譯與 PNG 編碼;最終串流 I/O 失敗可能保留已接受的 bytes

HPDFRenderHeadlessPagePNGFile 檢查來源識別,在目標目錄獨佔建立暫存檔,沖寫,再次檢查識別與取消,然後原子式取代目的地

Windows 發布最多嘗試八次原子替換,等待 1、2、4、8、16、16 與 16 毫秒七次,只重試 access-denied、sharing-violation 與 lock-violation 錯誤;每次嘗試前與每次等待兩側都檢查取消

Windows 發布失敗透過 EHPDFHeadlessRenderError 回報擷取的最終 Windows 錯誤碼;取消保留轉譯器的取消診斷,兩條路徑都不刪除既有目的地,也不退回非原子複製

轉譯、預算、取消與暫存失敗保留既有目的地並移除自有的未發布暫存檔;來源路徑與硬連結別名被拒絕

驗收

Windows 執行期驗收使用相符的原生主控台執行檔與隔離、SHA256 固定的可攜式 DLL 匯入閉包;獨立的 WSL 處理程序對 Windows 產生的 PNG 檔執行獨立的 MuPDF 與 Poppler 像素、公式與幾何檢查

Windows 標準字型替代使用明確的 Cairo GDI face 處理 Unicode 文字與真實輪廓,包括裁剪與 fill-and-stroke 模式;內嵌字型保留其 FreeType 字形映射

OpenJPEG 呼叫使用 Windows stdcall ABI 與 Win32 修飾匯出,串流與訊息回呼保留 C 回呼慣例

Tests/Linux/Run-HeadlessCairoAcceptance.sh 執行全新的原生 ELF 建置,清除 DISPLAY 與 WAYLAND_DISPLAY,拒絕直接連結的桌面程式庫,並執行獨立的 pypdf/MuPDF oracle

fixtures 演練標準字型、Unicode TrueType、Type3、全部文字轉譯與混合模式、alpha 與 knockout、RGB 透明群組、取樣深度與 Decode、影像遮罩與 Matte、Indexed 與 ICC 色彩、終端編解碼器、AES 加密 filter 鏈、頁面幾何、註解轉換、預算、取消、來源保留與原子輸出

計數器見 THPDFHeadlessRenderResult,錯誤處理見 EHPDFHeadlessRenderError