原生 Linux Cairo renderer

HPDFHeadlessCairoDevice 使用 Cairo image surface 与 FreeType 把已加载的 PDF 页面 Render 成 RGB PNG,不需要显示服务器或 PDF 阅读器

从 THPDFHeadlessDocument.GetRenderAccess(PageIndex) 提供一个串行的借用视图,并在 Render 返回之前保持该文档处于已加载且未变更的状态

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 可以在首次 Render 之前选择显式的兼容库路径;成功的模块会保持加载,因为原生字体缓存可能保留析构 callback

只要那些原生缓存还可能保留 HotPDF 字体析构 callback,宿主就必须保持其 HotPDF 可执行文件、DLL 或包代码处于加载状态;脱离缓存生命周期单独卸载宿主模块不在本能力范围之内

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

Render 能力范围

支持的内容包括路径构造与绘制、nonzero 与 even-odd 填充规则、裁剪、嵌套图形状态、CTM 变换、线型、DeviceGray/RGB/CMYK 颜色、普通 alpha,以及带自有资源、Matrix 与 BBox 的重复 Form XObject

线宽可以为零:由 0 w 或 ExtGState LW=0 请求的 PDF hairline 使用一像素的设备空间描边;负宽度会被拒绝

ExtGState D 与内容流 d 操作符共享有界的 dash 校验:支持实心空 pattern、奇数长度重复、零长度条目、小数长度与带符号相位

dash pattern 最多接受 256 个不超过 1e9 的有限非负长度,非空时至少有一个正长度,相位有限且绝对值不超过 1e9;每个元素都消耗操作工作量,临时存储计入工作字节准入

操作数数组接受 PDF 注释,包括数值 dash 数组与 TJ 文本数组;格式错误的词法值和缺失的右括号会由共享扫描器保留、由 renderer 拒绝,而不是悄悄消失

水平文本使用共享的字形解释器处理文本矩阵、显式 PDF 宽度、标准 Helvetica/Times/Courier advance、字符与单词间距、水平缩放以及 TJ 调整

内嵌的受支持字体程序使用 FreeType 并解析出字形 ID;Unicode ToUnicode 映射仍可通过文档文本 API 获取,而标准字体的 raster 形状取决于已安装的替代字体

复合文本支持 Identity-H、Identity-V、显式内嵌的 encoding CMap 流,以及内建的 UniJIS、UniGB、UniCNS 与 UniKS 的 UCS2/UTF16 水平和垂直映射;无需单独安装 CMap 资源

垂直字形绘制遵循默认与显式的 DW2/W2 定位向量、text rise、水平缩放、文本与图形矩阵以及 TJ 位移;UTF-16 映射接受增补字符码

支持全部八种文本 Render 模式,包括在 ET 处累积进裁剪区的垂直 fill/stroke/invisible 轮廓;内嵌 encoding CMap 流保留其 WMode 与非 identity CID 映射

透明的 fill+stroke 组合操作使用对象 knockout 组合成,填充不会透过描边渗出;Type3 字形过程在其自有有界资源与字体矩阵内执行

图像接受 1/2/4/8/16 位采样与 Decode 数组、stencil、explicit、color-key 与 soft mask、尺寸不同的 mask 以及 Matte 恢复;缺失 Interpolate 时使用最近邻采样,true 选择双线性采样

JPX codestream 接受 26 位以内的有符号或无符号源组件,包括混合精度、子采样与显式不透明度,并归一化为有界的 8 或 16 位采样;按 PDF 图像能力范围的要求,JPX 图像会忽略图像字典的 BitsPerComponent 与非 stencil 的 Decode 条目

图像与路径颜色支持 Indexed 调色板以及经过验证的 ICCBased profile 到 sRGB 变换;没有 profile 的 DeviceCMYK 保留简单的设备转换

ICCBased 变换接受 Gray、RGB、CMYK、Lab 与 XYZ 的 profile 签名,并严格校验声明的分量数与分量范围

Lab profile 操作数使用物理 L a b 坐标,默认范围 [0 100 -128 127 -128 127];XYZ 操作数使用物理 X Y Z 坐标,每分量默认无符号 1.15 范围 [0 65535/32768]

XYZ profile 输入是原生兼容性扩展,不代表归档 PDF 一致性;Lab 与 XYZ 源 profile 不会选择受支持的透明混合空间

ICC 流的 Range 要求每分量两个有限的有序值,并约束颜色操作数;原始图像 Decode 默认值与 Indexed 查表值使用这些分量范围

CalGray、CalRGB 与 Lab 支持路径、文本、图像与 Indexed 调色板基色;参数严格校验,CalRGB Matrix 条目遵循 PDF 列序,Lab 分量与图像 Decode 默认值使用声明范围

CIE 颜色使用 Bradford 色适应与相对 sRGB 输出;BlackPoint 元数据会被校验,而额外的黑点补偿与渲染意图状态策略仍是独立扩展

Separation 与 DeviceN 复合颜色为路径、文本、Indexed 基色与打包图像保留 1 到 32 个 tint 分量;device 或 CIE 替代颜色使用有界的采样、指数、stitching 或 calculator tint 函数

ICCBased Lab/XYZ 与 CalGray/CalRGB/Lab 替代颜色源在转换进受支持的透明组之前,整个 tint 变换都保留其物理坐标

多维采样 tint 函数支持线性与三次插值、Domain、Encode、Decode、输出 Range 以及 32 位以内的打包采样深度;三次求值通过张量积扩展现有 scalar 四节点约定,短维度回退线性,工作与取消均有界

插值约定与独立的公式、阅读器证据见 原生采样颜色函数

Separation None 与只含 None 颜色成分的 DeviceN 空间既不贡献颜色也不贡献 knockout 形状;混合 None 分量仍会进入替代 tint 变换

Separation All 将其 tint 应用于每个可用的输出颜色成分,使用中性 RGB 页面输出,并在 CMYK 组内保留每个 process 分量

CMYK 组在混合之前接收原始四分量替代 tint 值;专色 separation 分版、NChannel process/颜色成分选择与混色提示模拟仍是独立扩展

末端图像 callback 在原生 JPEG、JPEG 2000、CCITT 或 JBIG2 解码之前保留文档解密与前置流过滤器;JBIG2 支持算术与 Huffman 文本、MMR 以及共享全局字典

JPEG 2000 支持子采样与有符号分量、推断的颜色与采样声明、内嵌 ICC profile、显式颜色空间覆盖,以及通过 SMaskInData 的独立或关联不透明度;其分量值归一化为 8 或 16 位,图像 Decode 数组被忽略

内嵌或显式 Lab/XYZ ICC profile 使用物理分量范围;关联不透明度在应用物理坐标映射之前从归一化的存储采样中移除,保留 Lab 偏移通道

图形状态 SMask 支持 Alpha 与 Luminosity 组、backdrop 颜色、Form 矩阵、保存状态恢复,以及采样、指数、stitching 与有界 calculator 传递函数;图像自身的 soft mask 覆盖图形状态 soft mask

支持全部十六种标准 PDF 混合模式;Form 与页面组支持 isolated 与 nonisolated 组合法、对象 knockout,以及 DeviceGray、DeviceRGB、DeviceCMYK、CalGray、CalRGB 或一、三、四分量 ICCBased 混合空间

校准组在组边界之前保留原生分量值,并通过逆校准变换接受 device 或 Lab 源颜色;Lab 本身不是有效的混合空间

校准 Luminosity mask 保留其组坐标,并在应用传递函数之前求值 CIE XYZ-Y,包括组不透明度与 backdrop 颜色

knockout 组合法把对象的几何形状与 soft mask 不透明度分开处理;stencil 孔洞保留先前对象,而被 mask 的路径在其绘制几何内整体替换它们

嵌套 knockout 组保留其子级几何形状的并集,包括零不透明度对象;nonisolated 子组使用外围 knockout 组的初始 backdrop

CMYK 组在独立的有界图像平面中保留互补的 CMY 与黑色分量,并在组边界转换合并结果;不可分离混合模式按所选模式保留或替换黑色

nonisolated 组会 Render 一轮额外的有界不透明度通道,移除初始 backdrop 贡献,并将传入的组 alpha 与混合模式一次性应用;页面透明组在合成到页面背景之前使用 isolated surface

nonisolated Form 继承其外围混合空间;显式的组 CS 条目不会把初始 backdrop 切换到另一个空间

既有的普通注释外观从变换后的 BBox 拟合到 Rect;RenderAnnotations=false 在任一 usage 下都省略外观

Usage 默认为 hruView,跳过 Hidden 与 NoView 注释以及设置了 Invisible 的未知注释类型;ISO 32000 标准注释类型(包括 PDF 2.0 的 RichMedia 与 Projection)只要具备受支持的普通外观,即使只设置 Invisible 也保持可见

RichMedia 与 Projection 的接受范围覆盖带有效媒体资产或关联默认 3D 视图的既有静态普通外观;媒体播放与交互式 3D 激活不在本 raster 路径之内

hruPrint 只绘制设置了 Print 且未设置 Hidden 的注释;Invisible 在任一 usage 下都会抑制未知注释类型,NoView 不抑制打印,NoZoom 不改变打印外观尺寸

可见注释要求存在受支持的普通外观流;renderer 不会从注释元数据或字段值合成外观

对于查看输出,注释 NoZoom 在保留 UserUnit 的同时从外观尺寸中移除 Render 缩放;NoRotate 在任一 usage 下都让拟合外观在页面旋转时保持直立,两者都保留变换后的左上 Rect 锚点与页面裁剪

带既有普通外观的文本注释在查看输出中无论显式标志如何都按 NoZoom 与 NoRotate 处理;打印输出保留其 NoRotate 行为但忽略 NoZoom

usage 控制静态 raster 可见性与注释几何;纯交互标志不会产生悬停或编辑行为,既有的提取权限 callback 仍然必需且不授予打印权限

静态输出中的可选内容

Render 消费目录的默认 OCProperties/D 配置,从 BaseState 初始化组状态,应用 ON 与 OFF 覆盖,并在判定可见性时使用匹配的 Intent 值

成员字典支持 AnyOn、AllOn、AnyOff 与 AllOff;递归 VE 表达式支持 And、Or 与单操作数 Not,VE 优先于更简单的策略

Null、不可用与过期组引用不产生成员效果;配置意图之外的组不控制可见性,没有适用组的成员关系或表达式让内容保持可见

嵌套 /OC 标记内容、图像与 Form XObject 以及注释遵循最终状态;隐藏的标记区段仍会更新颜色、矩阵、裁剪与文本位置,而隐藏的整个 XObject 与注释可以被跳过

普通标记内容属性字典仍然可用,包括嵌套的内联值;内容数组在其组成流之间保留标记内容状态,子流保持自己的标记内容嵌套

独立的最终形态 raster 化在查看与打印两种模式下都使用默认配置,不自动应用交互式 AS usage 建议,符合 ISO 32000-1:2008 第 8.11.4.5 节的规定;显式的 ViewerState 启用 View、Print、Export、Zoom、Language 与 User 建议,带持久的手动选择与临时事件状态

缺失的可选内容属性或 nil 借用目录让可选内容结构不产生可见性效果;畸变的活跃成员关系、表达式循环以及配置的工作、内存或递归限制在 PNG 发布之前失败

仿射外观矩阵与非零 BBox 原点在这些标志下保持正常拟合;极小的 Render 缩放仍可能让 Cairo 的初始页面矩阵在数值上不可逆

Render 的页面使用 MediaBox/CropBox 交集、继承的页面框与四分之一旋转 Rotate,以及页面的 UserUnit;缩放 1 时每个有效页面点产生一像素,surface 尺寸向上取整

sh 操作符绘制基于函数、轴向与径向 shading(ShadingTypes 1–3),支持双输入域、shading 矩阵、径向圆选择、Extend 端点、BBox 与既有路径裁剪

受支持的颜色函数与 scalar 函数数组经 device、校准、ICC Lab/XYZ 与 Separation/DeviceN 源颜色转换;当前填充不透明度、混合模式、图形状态 soft mask 与透明组 knockout 应用于所得 shading

当前路径与颜色被保留;shading Background 被 sh 忽略,AntiAlias 是设备提示并使用像素中心颜色采样

不受支持的 ExtGState 条目与内容操作符仍在本能力范围之外

三角 mesh shading

ShadingTypes 4 与 5 绘制 free-form 与 lattice Gouraud 三角 mesh,支持边复用、任意 lattice 几何、按字节对齐的顶点记录、32 位以内坐标精度与 16 位以内分量精度

顶点分量在颜色转换之前于设备像素中心插值;可选的单输入函数或分量函数数组对插值参数求值,包括校准、ICC 与特殊颜色空间

Indexed 源把插值索引舍入到最近的调色板条目;十六进制查表字符串一次性解码,容忍空白、大小写混合数字与奇数末尾半字节填充,literal 查表字符串保留其解码字节

当前变换、裁剪、BBox、填充不透明度、混合模式、soft mask、非标记颜色成分与组 knockout 应用于完成的 mesh;保留的流字节、临时页面 surface 与两行 lattice 数据计入工作内存准入

顶点解析、三角 raster 化与函数共享聚合操作与取消轮询;格式错误或截断的记录以及不完整的 lattice 行在输出发布之前失败

聚焦验收检查封闭重心坐标等式以及独立的 MuPDF 与 Poppler 输出;证明记录把顶点填充、未用标志位与 mesh 透明的源阅读器失败分开保存,并对非标记颜色与归一化 Indexed 值使用显式的替代阅读器等式

Coons 与 tensor patch mesh

ShadingTypes 6 与 7 绘制三次 Coons 边界与 tensor 控制网,支持前边复用、按字节对齐的记录、低两位标志语义以及与三角 mesh 相同的坐标与分量精度

角点分量在 patch 参数中双线性插值,然后才进入可选函数与颜色转换;Coons 边界升阶为等价的双三次 Bernstein 网,其二阶导数界选择细分,几何误差至多 0.125 输出像素

多项式求逆精化像素参数;折叠覆盖在 v 相同时先选最大 v 参数再选最大 u 参数,后续 patch 在完成的 shading 接收对象透明度之前替换较早的颜色

共享的 mesh 组合法应用裁剪、BBox、shading pattern、非标记颜色成分、不透明度、混合、soft mask 与组 knockout;两行细分数据以及逐像素参数与次序数组计入活跃工作字节准入

控制点解析、细分、raster 化与颜色函数共享操作限制与取消;聚焦验收使用独立的 Coons 与 tensor 等式以及折叠 patch 的三次根,源阅读器失败与普通 RGB 等式页面验证分开记录

继承的文本状态

Form、Type3 与 pattern 子流从其初始图形状态继承适用的字体对象、字号、字符间距、单词间距、水平缩放、行距、Render 模式与 rise;同名子资源在局部 Tf 选中之前不会替换继承的字体

保存的图形状态恢复文本参数,TD 与双引号操作符的行距与间距变更对后续子流保持有效;每个子流以自己的文本矩阵开始

独立注释外观从默认文本参数开始,不保留页面内容的最终文本状态

Render 模式 3 下的 Type3 文本不产生可见字形图形;聚焦 Type3 嵌套文本证明把 MuPDF 的默认参数偏差与继承状态等式分开保存,而 Poppler 在这些 fixture 中遵循继承参数

平铺与 shading pattern

Pattern 颜色空间支持 colored 与 uncolored 平铺 pattern、TilingType 1–3、shading pattern、PatternMatrix、单元 BBox、正负间距、pattern 选择、保存状态恢复以及填充或描边绘制

uncolored pattern 从受支持的基色空间获取分量,并可绘制图像 stencil;uncolored 定义内的显式颜色变更、colored 图像与直接 shading 都是无效 PDF 内容,经由嵌套 Form 与 Type3 过程同样会被拒绝

选中的 pattern 保留解析其定义的内容流的默认坐标空间;后续 cm 操作以及在 Form 内使用的继承 pattern 不会替换该原点

定义以父级的初始受支持图形状态与默认透明参数开始;平铺定义构成 nonisolated 非 knockout 组,shading 定义使用对象 knockout

透明与重叠的平铺单元对照当前 backdrop 求值;传入的对象 alpha 与混合模式在绘制完成的 pattern 时一次性应用,包括嵌套 pattern、文本、描边与图像 mask

shading pattern 的 ExtGState 扩充受支持的 shading 参数,包括不透明度与 soft mask;Background 在 shading 之前绘制,BBox 同时裁剪两者贡献,非标记 None 颜色既不贡献颜色也不贡献形状

pattern 求值接受两个页面 surface 与已解码单元内容,把可见单元枚举限制在当前裁剪内,并在渲染单元与移除 backdrop 贡献时轮询取消

聚焦 fixture 将封闭坐标、颜色与组合成等式与原生像素及独立阅读器输出对比;证明文件保留继承 Form pattern 原点、shading pattern ExtGState 不透明度与非标记 None 颜色的阅读器差异,这些用例另有独立的普通矢量等式页面

CID-keyed CFF 字体

内嵌 CIDFontType0 字体在独立与 OpenType 容器中解析真实 CFF CID,包括非 identity 映射、CID 65535、内嵌 Encoding CMap、垂直 W2 原点、变换后的轮廓与文本裁剪

独立 CFF face 按 CID 加载,SFNT 封装的 face 按紧凑字形索引加载;桥接层为 Linux LP64 与 Windows LLP64 使用正确的 FreeType face 布局

未映射的字符码或缺失的请求 CID 会先为原始码查询 notdefchar 与 notdefrange,替换仍缺失时使用强制的 CID 0 字形;range 有固定的 CID 目标且字符条目优先,而已存在的字形保留其请求 CID

聚焦验收对 28 个有效源使用声明的多边形轮廓与原点等式,配以独立的 MuPDF 与 Poppler 对比以及普通 RGB 等式页面

证明文件保留 CID-keyed OpenType 字形选择与省略 notdef 替换的源阅读器差异;省略替代项单独测量,不替换必需的原生源码等式

边界与取消

精确的内建 Type0 encoding 覆盖全部 200 个捆绑 encoding 名称:Identity-H 与 Identity-V、十六个 UCS2 与 UTF16 映射,以及 182 个额外的旧式与 Unicode 映射,含扁平化的垂直字符覆盖

一到四字节混合操作数使用逐字节 codespace 边界与最长前缀无效码恢复;UTF8 与 UTF32 解码及反向编码保留增补标量值与有效的前导零字节

Encoding 与 ToUnicode 流解析正文 usecmap 以及字典 UseCMap 名称或流,字典优先,并支持局部字符、range、Unicode 序列与 notdef 覆盖

每个子 CMap 保留自己的书写模式,省略 WMode 时默认水平;显式垂直模式选择继承映射与字体的垂直度量

CMap 继承使用线程局部嵌套深度限制,不改变 THPDFCMapBounds 布局;循环、畸变父级与超深在输出发布之前失败,finally 块在取消或异常后恢复限制

聚焦证明在缺少那些内建表的独立阅读器中保留具名 UTF8 与 UTF32 源失败,验证分离的内嵌映射伴随项,并在多个码选中同一 CID 时记录源文本差异

Tests/Linux/Run-HeadlessLegacyCMapAcceptance.sh 在原生 Linux 上构建并测试精确 encoding 区间、混合宽度源 PDF、嵌套 Render、线程隔离与取消恢复

Tests/Linux/Run-HeadlessLegacyCMapWindowsAcceptance.py 运行匹配的原生 Windows 可执行文件,记录源码、二进制、PNG 与诊断哈希,然后把固定捕获传输到原生 Linux 存储做独立的 MuPDF 与 Poppler 检查

打包映射保留其资源哈希与完整的再分发声明;源码与二进制分发须随附 CMap 数据许可

PDF 名称值与内容名称操作数中的十六进制转义在解析字体、颜色空间、混合模式与资源之前一次性解码;解码产生的字面 # 仍是语义名称的一部分

共享字体解码器将这些语义应用于字体字典值、具名 encoding、Differences 字形名与 CIDToGIDMap,不修改借用对象,也不解码字符串值

转义的 renderer 名称使用线性解码、临时工作字节准入、聚合操作限制与取消轮询;聚焦验收对比等价的 PNG 字节与文本,外加独立 MuPDF 与 Poppler 输出

shading raster 工作与颜色函数共享聚合操作限制与取消轮询;临时 surface 与至多 8,192 个已转换颜色的精确坐标缓存计入活跃工作字节准入

聚焦 shading 验收使用封闭几何/函数/颜色等式与独立矢量等式页面,保留 BBox 裁剪、退化几何、颜色转换、特殊颜色成分名与 knockout 镶嵌的源阅读器差异

Options 限制 surface 像素、活跃托管缓冲、累计解码字节、编码 PNG 字节、Token 与操作符工作量,以及递归或图形状态深度

字体解码使用保守准入配额:32 MiB 瞬态容量、解码字体流大小的 64 倍、递归检查数组槽位的 128 倍,以及保留解码器估计值的 2 倍计入活跃聚合

CID 表接受 65,536 个保留条目;枚举限定真实 charstring,notdef 数组计入解码器深拷贝与保留字节核算

CMap 解析与 notdef 查询共享线程局部嵌套条目边界与工作量轮询;renderer 作用域共享聚合 Token 与操作限制,长词法扫描至多每 256 字节轮询一次

解释器还会在创建字形记录之前,依据输入操作数字节与最长 ToUnicode 映射为每个字形预留 Unicode 序列容量,重复的长映射无法绕过工作内存准入

工作内存预算很小时,即使简单字体的最终分配本可容纳也可能被拒绝;这些检查覆盖托管缓冲与 CPU 图像 surface,而 Cairo、Fontconfig、FreeType 缓存与进程总 RSS 不在核算之内

透明、soft mask、backdrop、不透明度与对象 knockout surface 计入活跃 surface 预算;传递函数共享聚合操作预算,ICC 与图像编解码器使用保守准入,原生 JBIG2 解码器对位图/上下文分配做累计限制并在解码期间轮询取消

互补 CMY、黑色与几何形状遍历共享聚合操作、解码与取消限制;使用同一已解析流的 profile 共享一个已验证变换与活跃准入预留,直到页面 Render 结束

保留的函数流、函数求值与图形状态记录计入工作字节准入;递归 tint 函数、多维插值与 calculator 指令共享操作与取消限制

借用取消 Token 在有界解码、Token 化、操作符、字形解析器调用、图像行、递归与 PNG 编码期间以及发布之前被轮询;其生命周期由调用方持有

renderer 通过借用文档策略检查提取权限,并保留源对象值与源字节

输出所有权

HPDFRenderHeadlessPagePNG 在写入调用方自有流之前私有完成 Render 与 PNG 编码;最终流 I/O 失败可能保留已被接受的字节

HPDFRenderHeadlessPagePNGFile 校验源一致性,在目标目录独占创建暂存文件,刷新它,再次校验一致性与取消,然后原子替换目标

Windows 发布至多进行八次原子替换尝试与七次等待(1、2、4、8、16、16 与 16 毫秒),只重试访问被拒、共享冲突与锁定冲突错误;每次尝试之前以及每次等待的两侧都检查取消

失败的 Windows 发布通过 EHPDFHeadlessRenderError 报告捕获的最终 Windows 错误码;取消保留 renderer 的取消诊断,两条路径都不会删除既有目标,也不会退回非原子复制

Render、预算、取消与暂存失败会保留既有目标并移除自有未发布暂存文件;源路径与硬链接别名被拒绝

验收

Windows 运行时验收使用匹配的原生控制台可执行文件与隔离的、SHA256 锁定的可移植 DLL 导入闭包;独立 WSL 进程对 Windows 生成的 PNG 文件运行独立 MuPDF 与 Poppler 像素、等式与几何检查

Windows 标准字体替代对 Unicode 文本与真实轮廓使用显式 Cairo GDI face,包括裁剪与 fill+stroke 模式;内嵌字体保留其 FreeType 字形映射

OpenJPEG 调用使用 Windows stdcall ABI 与 Win32 修饰导出,流与消息 callback 保留 C callback 约定

Tests/Linux/Run-HeadlessCairoAcceptance.sh 执行全新的原生 ELF 构建,清除 DISPLAY 与 WAYLAND_DISPLAY,拒绝直接链接的桌面库,并运行独立的 pypdf/MuPDF oracle

这些 fixture 演练标准字体、Unicode TrueType、Type3、全部文本 Render 与混合模式、alpha 与 knockout、RGB 透明组、采样深度与 Decode、图像 mask 与 Matte、Indexed 与 ICC 颜色、末端编解码器、AES 加密过滤器链、页面几何、注释变换、预算、取消、源保留与原子输出

计数器见 THPDFHeadlessRenderResult,错误处理见 EHPDFHeadlessRenderError