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 元数据推断,因为旧的 PDF Library for Delphi 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 实现。公开的 PDF Library for Delphi 加密 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 调用和打印设置选项保持相同公开行为