|
增强型 EMF/WMF 图元文件支持
概述
HotPDF 现在显著增强了 Enhanced Metafile(EMF)和 Windows Metafile(WMF)格式支持。新实现包含自动格式检测、多种定位选项、高级缩放控制,以及 PDF 文档中 vector graphics 的改进渲染质量
Key Enhancements
- 自动检测 EMF/WMF 格式并选择相应处理方式
- 多种定位选项(居中、左上角、自定义坐标)
- 增强的缩放和宽高比控制
- 直接 EMF 渲染以保留矢量图形
- 用于兼容性的位图转换选项
- 通过 THotPDF.EmfOptions 配置 fit 比例、EMF/WMF 渲染倍率、位图压缩、参考设备、stretch 模式和扩展 pen 线端/连接样式
- 针对大型图元文件的改进内存管理
- 更好地处理复杂矢量图形和文本
位置控制选项
增强型图元文件支持包含灵活的位置选项:
- mpCenter: 图元文件在页面上居中(默认行为)
- mpLeftTop: 图元文件显示在左上角 (X=0, Y=0)
- mpCustom: 图元文件显示在指定位置(需要 X、Y 参数)
使用示例
基础用法(默认居中显示)
// Delphi example - default centered display
procedure ShowMetafileDefault;
var
PDF: THotPDF;
MetaFile: TMetafile;
begin
PDF := THotPDF.Create(nil);
MetaFile := TMetafile.Create;
try
PDF.BeginDoc;
PDF.AddPage;
// Load metafile
MetaFile.LoadFromFile('diagram.emf');
// Display centered on page (default)
PDF.CurrentPage.ShowMetafile(MetaFile);
PDF.EndDoc;
finally
MetaFile.Free;
PDF.Free;
end;
end;
位置控制用法
// Delphi example - Advanced positioning
procedure ShowMetafileAdvanced;
var
PDF: THotPDF;
MetaFile: TMetafile;
begin
PDF := THotPDF.Create(nil);
MetaFile := TMetafile.Create;
try
PDF.BeginDoc;
PDF.AddPage;
MetaFile.LoadFromFile('chart.wmf');
// Top-left corner display
PDF.CurrentPage.ShowMetafile(MetaFile, mpLeftTop);
// Custom position display
PDF.CurrentPage.ShowMetafile(MetaFile, mpCustom, 100, 200);
PDF.EndDoc;
finally
MetaFile.Free;
PDF.Free;
end;
end;
文档级 EMF/WMF 选项
THotPDF.EmfOptions 返回由文档持有的 THPDFEmfOptions 实例。该对象影响通过 HPDFEmf 增强 helper 播放 EMF/WMF 时的位图回退路径和矢量 pen 解析策略,默认值保持既有输出行为
FitPageRatio:居中 fit 模式可占用页面的比例,默认 0.85,赋值会钳制到 0.01 到 1.0
EmfBitmapScale:EMF 位图回退的渲染倍率,默认 3,赋值会钳制到 1 到 16
WmfBitmapScale:WMF 位图回退的渲染倍率,默认 2,赋值会钳制到 1 到 16
ColorImageCompression:彩色位图嵌入压缩,可选 icJpeg 或 icFlate,默认 icJpeg
MonochromeImageCompression:1-bit 位图嵌入压缩,可选 icFlate、icCCITT31、icCCITT32、icCCITT42 或 icJBIG2,默认 icCCITT42
UseScreenReferenceDC:位图回退使用屏幕 DC 作为参考设备,默认 True;设为 False 时使用内存兼容 DC,适合服务端或希望减少桌面设备依赖的输出路径
UseHalftoneStretchBltMode:位图回退使用 HALFTONE stretch 模式,默认 True;设为 False 时使用 COLORONCOLOR,便于获得更直接的像素采样
UseExtendedPenLineStyles:EMF 矢量解析保留扩展 GDI pen 的端点和连接样式,默认 False;设为 True 时,PS_ENDCAP_SQUARE、PS_ENDCAP_FLAT、PS_JOIN_BEVEL、PS_JOIN_MITER 等样式会映射到 PDF line cap / line join operators
PDF.EmfOptions.FitPageRatio := 0.70;
PDF.EmfOptions.EmfBitmapScale := 2;
PDF.EmfOptions.WmfBitmapScale := 2;
PDF.EmfOptions.ColorImageCompression := icFlate;
PDF.EmfOptions.UseScreenReferenceDC := False;
PDF.EmfOptions.UseHalftoneStretchBltMode := False;
PDF.EmfOptions.UseExtendedPenLineStyles := True;
PDF.CurrentPage.ShowMetafile(MetaFile, mpCenter);
Enhanced Methods
增强型 EMF/WMF 支持引入了几个新方法:
THPDFPage.ShowMetafile 重载
ShowMetafile(MetaFile: TMetafile) - 默认居中显示
ShowMetafile(MetaFile: TMetafile; Position: THPDFMetafilePosition) - Position control
ShowMetafile(MetaFile: TMetafile; Position: THPDFMetafilePosition; X, Y: Single) - Custom positioning
增强处理方法
EnhancedShowMetafile - 使用增强特性的高级处理
RenderEmfDirect - 用于保留矢量的直接 EMF 渲染
RenderEmfAsBitmap - 用于兼容性的位图转换
RenderWmfAsBitmap - 带位置控制的 WMF 位图渲染
技术实现
增强 EMF/WMF 支持通过 HPDFEmf.pas 单元实现,该单元提供以下内容:
- THPDFEmfEnhanced: 用于 EMF 处理的核心增强类
- THPDFEmfPatcher: 用于 EMF 转换和渲染的实用类
- THPDFEmfOptions: 用于文档级 EMF/WMF 位图回退、压缩和 fit 行为配置
- THPDFMetafilePosition: 用于位置控制的枚举
- Enhanced EMF Record Processing: 支持高级 EMF 记录
Advanced Features
EMF Record Support
- EMR_BITBLT - Bitmap operations
- EMR_STRETCHDIBITS - Stretched bitmap operations
- EMR_ALPHABLEND - Alpha blending operations
- 增强型文本渲染
- 复杂路径操作
Rendering 选项
- Vector Preservation: 保持矢量图形质量
- Bitmap Fallback: 复杂图形的自动回退
- Scaling 选项: 自动和手动缩放控制
- Quality Control: 通过
EmfOptions 配置渲染倍率、图像压缩、参考设备和 stretch 模式
性能优化
- 大型图元文件的内存高效处理
- 优化的 EMF 记录解析
- 重复元素的智能缓存
- 转换期间降低内存占用
兼容性和标准
- 支持 Windows EMF 1.0 和 Enhanced EMF
- Windows Metafile (WMF) 向后兼容
- 跨平台渲染一致性
- 符合 PDF 矢量图形标准
Troubleshooting
常见问题和解决方案:
- Large Metafiles: 对于非常大或复杂的图元文件使用位图渲染
- Text Rendering: 确保目标系统上有可用字体
- Complex Graphics: 为获得更好质量,可考虑直接 EMF 渲染
- Positioning Issues: 使用自定义定位实现精确放置
另请参阅
|