显示列表与印刷生产

HotPDF 将已加载页面流编译为带 THPDFDisplayListInfo 度量和内容对象边界框的可复用 THPDFPageDisplayList 实例

文档渲染缓存编译后的列表,而调用方可以请求独立拥有的列表用于重复执行或区域对象查询

共享生产解释器

非渐进位图、直接 DC、Form 与 display-list 回放都把预分词的内容交给 HPDFInterpretContentTokensDevice,由它负责操作符遍历与取消边界

THPDFPageRenderer 实现了 IHPDFContentOperatorDevice,因此共享遍历会调用它完整的图形、文本、资源、裁剪、图案、透明度、标记内容与图像状态机,而不会把生产渲染降级到较小的语义回调面

display list 在流编译时缓存操作符 token 索引,回放时只重放这些索引,避免重复扫描操作数;THPDFPageDisplayList.OperatorCount 与 THPDFDisplayListInfo.OperatorCount 暴露缓存的命令数

只实现 IHPDFContentDevice 的语义设备保留按能力过滤的回调;完整的操作符设备则每次接收一个已验证的操作符,每个操作符一次取消检查点

有界与并发渲染

THPDFRenderTileEvent 一次接收一个调用方尺寸的平铺或水平条带,使峰值栅格内存独立于完整页面尺寸

RenderLoadedPagesParallel 将显示列表编译与回放重叠,无需等待完整编译屏障即可启动第一个就绪页面,在有界工作进程上动态平衡两个阶段,并按输入顺序返回 THPDFBitmapArray

编译在显示列表缓存锁外运行,而双重检查准入和受保护的使用计数让无关页面并发编译,而不会复制已发布条目或在回放期间淘汰列表

THPDFParallelRenderPipelineInfo 暴露缓存命中、编译、完成、峰值编译和渲染并发、首次结果时编译的页面、首次结果延迟和总经过时间

RenderLoadedPagesParallelOrdered 在调用线程上按输入顺序交付回调,并在回调返回后释放每个借用的位图,而调用方选择的输出深度应用生产者背压并为下一个所需页面保留一个槽位,因此慢的早期页面不会在后续结果后面死锁

有序流式传输最多保留每个工作进程一个显示列表和一个活动渲染,加上有界的已完成位图队列,而不是保持完整作业输出常驻

可插拔渲染后端通过一个不持有所有权的文档资源视图使用同样的编译后列表,因此同步路径和并行路径都不必重新解析页面内容;至于调用能否重叠,还是必须串行分发,则由后端能力决定

进程级峰值内存调度器现在限制两个并行 API:最大页面估算减少初始工作进程数,每个声明的页面保留其完整估算工作集,有序输出在回调交付期间保留该保留

调度器取消在回调取消或工作进程失败时唤醒预算等待者,而遥测暴露请求与有效工作进程、峰值保留权重、延迟页面和聚合等待时间

RenderLoadedPageTilesParallel 与 RenderLoadedPageBandsParallel 把借出的按行主序 tile 或自上而下的条带分发给隔离的 worker;每个 worker 至多持有一个 tile,调用方提供的工作内存上限会在首次认领前降低并发

并行渲染上下文从一个有界 LRU 缓存复制不可变的 Type 3 字形 token 序列和半色调阈值网,可变图形状态与 GDI 资源仍归渲染器本地所有

SaveLoadedPageToPng、SaveLoadedPageToPngStream、SaveLoadedPagesToTiffBanded 和 SaveLoadedPagesToTiffStreamBanded 通过流式 PNG 或 TIFF 编码器使用同一个分带渲染器,因此超大页面可以逐行输出压缩数据,无需持有完整的 framebuffer;THPDFBandImageExportInfo 会报告已渲染的带数、已编码的行数、worker 数、峰值预留字节数、输出字节数、耗时以及取消情况

共享图像解码单独协调,因此矢量页面工作保持并行而不会损坏解码图像缓存条目

PrefetchLoadedPages 使用专用取消令牌预热栅格条目,同时在缓存锁外编译和渲染,前台页面渲染在启动延迟敏感工作前抢占工作进程

THPDFLoadedPagePrefetchInfo 报告已调度、已启动、已完成、已缓存、已渲染、失败、已取消和前台抢占的工作,以及最后和峰值取消延迟

透明度与印刷控制

透明度扁平化首先检查显示列表透明度计数和调用方定义的像素上限,然后用无损 Flate 压缩的校准 RGB 图像替换页面绘制

带 Separation 或 DeviceN 色料的页面保持为矢量内容,检测到的色料和保留状态暴露给调用方

渲染器会执行 ExtGState 中的传递函数(transfer function)以及 Type 1、5、6、10 或 16 的半色调(halftone)字典,并在 q 和 Q 之间保留各自独立的 RGB 网屏及其传递函数覆盖

THPDFInkCoverageInfo 报告平均 CMYK 覆盖率、最大总面积覆盖率和高于所选阈值的像素数

印刷和专色印版输出支持 DeviceCMYK、Separation 和 DeviceN 色料

已加载页面颜色重写 使用相同的完整渲染器将复杂页面转换为 Gray、RGB 或 CMYK,同时将简单设备颜色页面内容保留为矢量并应用显式专色印版策略

THPDFTrappingInfo 组合文档陷印声明、页面元数据和 TrapNet 结构诊断

ICC 工作流

渲染变换可以组合 PDF 源配置文件、混合色彩空间、打样配置文件、输出配置文件和 sRGB 栅格目标

所有四个 ICC 渲染意图和真正的黑点补偿在管线中一致应用于矢量颜色和图像样本

完整变换通过以源、打样和输出配置文件内容、有效渲染意图和黑点补偿为键的线程安全 64 MiB LRU 缓存,在矢量、图像、页面和并行渲染路径之间共享

透明度扁平化复用相同的变换管线,然后在调用方控制的总栅格和每平铺像素预算下发出无缝 D65 CalRGB 平铺

主要 API