JPEG 2000 后端

从 3.9.0 版开始,JPEG 2000 支持使用 OpenJPEG 2.5.4。公开的 TJpeg2000Bitmap API 保持不变,但加载和保存现在使用 OpenJPEG 2.x 编解码器生命周期和基于回调的流 API

Win32 和 Win64 构建都静态链接捆绑的 OpenJPEG 对象文件。Lib\thirdparty\build-openjpeg-bcc32.bat 和 Lib\thirdparty\build-openjpeg-bcc64x.bat 会直接在 Lib\thirdparty\Win32 和 Lib\thirdparty\Win64 下重建已纳入仓库的对象。Win64 路径使用 bcc64x 并禁用 jump tables,使 dcc64 能在不依赖 OpenJPEG 运行时 DLL 的情况下使用静态 COFF64 对象

后端通过现有流加载器支持 JP2 和原始 J2K codestream 检测。颜色分量路由根据 OpenJPEG 2.5 图像颜色空间、分量数量和 alpha 元数据推断,因为旧的 PDFlibPas comp_type 扩展不再存在于上游

3.9.1 中的 JPEG 输出可靠性

3.9.1 版修正 TPDFJPEGImage 和 PDF 页面渲染使用的捆绑 libjpeg-turbo 绑定。JPEG 导出现在在 Win32 和 Win64 上使用 ABI 匹配的 boolean 字段、回调声明、结构对齐和内存输出缓冲区

同一版本还修复了 Win32 上捆绑 zlib 后端的 FlateDecode 解压,因此线性化文件中的 PDF xref streams 可在页面渲染开始前正确加载

调用 TPDFJPEGImage.SaveToStream、LoadFromFile,或把 PDF 页面渲染为 JPG 文件的应用程序不需要修改源码。请重建 Win32 和 Win64 库输出,使现有项目获得修正后的图像和 FlateDecode 后端

3.9.3 中的 AES 后端

3.9.3 版在 Win32 和 Win64 上从 Brian Gladman 2018 C 源码刷新捆绑 AES 实现。公开的 PDFlibPas 加密 API 保持不变,但现在可以用各库构建脚本从 Lib\thirdparty\AES 重建 AES 对象文件

Lib\thirdparty\build-aes-bcc32.bat 生成 Win32 OMF 对象,Lib\thirdparty\build-aes-bcc64x.bat 生成 Win64 COFF64 对象。PDFlibAES.pas 以 C calling convention 声明 AES 入口点,因此 AES-CBC 加解密在两个平台上都与编译后的 C ABI 匹配

3.9.4 中的打印机 DEVMODE 处理

3.9.4 版修改 PDF 打印设置,使自定义纸盒、介质类型、双面、质量、份数、颜色和方向设置通过 TPrinter.GetPrinter 返回的 printer DEVMODE 句柄应用。代码不再把 TPrinter.Handle 视为全局内存句柄,因为该属性是打印机 HDC,而不是 DEVMODE 块

这改进了服务器共享打印机和网络打印机的打印,包括应用程序通过服务器 IP 地址打印,或在打印前选择非默认纸盒的场景。SetPrinterDevModeFromString 等现有 API 调用和打印设置选项保持相同公开行为