增强型 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:彩色位图嵌入压缩,可选 icJpegicFlate,默认 icJpeg
  • MonochromeImageCompression:1-bit 位图嵌入压缩,可选 icFlateicCCITT31icCCITT32icCCITT42icJBIG2,默认 icCCITT42
  • UseScreenReferenceDC:位图回退使用屏幕 DC 作为参考设备,默认 True;设为 False 时使用内存兼容 DC,适合服务端或希望减少桌面设备依赖的输出路径
  • UseHalftoneStretchBltMode:位图回退使用 HALFTONE stretch 模式,默认 True;设为 False 时使用 COLORONCOLOR,便于获得更直接的像素采样
  • UseExtendedPenLineStyles:EMF 矢量解析保留扩展 GDI pen 的端点和连接样式,默认 False;设为 True 时,PS_ENDCAP_SQUAREPS_ENDCAP_FLATPS_JOIN_BEVELPS_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: 使用自定义定位实现精确放置

另请参阅