TQRHotPDFExportFilter

QuickReport adapter (Lib\Addons\QuickReport\qrHotPDFExport.pas)

 

FastReport adapter  ReportBuilder device  DevExpress adapter

QuickReport 导出过滤器,使用 HotPDF 作为底层 PDF 后端,替代 QuickReport 自带的 QRPDFFilter。适用于已嵌入 HotPDF、想让整个应用共用同一个 PDF 后端的项目。

 

Delphi 声明:

type

  TQRHotPDFExportFilter = class(TQRExportFilter)

  public

    constructor Create(Filename: string); override;

    procedure SetOutputStream(AStream: TStream);

    property Title, Author, Subject, Keywords: string;

    property PDFVersion: TPDFVersType;

    property PDFACompliance: string;

    property PDFXCompliance: string;

    property Compressed: Boolean;

    property CompressionLevel: TPDFCompressionLevel;

  end;

 

说明

TQRHotPDFExportFilter 派生自 TQRExportFilter,因此无需改动 QuickReport core 即可接入常规的 MyReport.ExportToFilter(MyExporterInstance) 工作流。由于 TQRExportFilter 不是 TComponent后代(QuickReport 的设计里它只是普通类),没有 IDE 组件注册 - 调用方通过 Create('out.pdf') 直接实例化TQRHotPDFExportFilter ——经 Create('out.pdf') 直接实例化。

 

QuickReport 把每个准备好的页面渲染成 TMetafile,缓存在 QRPrinter.PageList 里。适配器不去重新实现整套逐组件的 TextOut / AcceptGraphic / AcceptBand 回调,而是将其忽略(no-op 覆盖),在 Finish 中收割各页图元文件:

 

1. Start(PaperWidth, PaperHeight, Font) - 创建 THotPDF 实例、设置元数据、调用 BeginDoc,并保存 (PaperWidth, PaperHeight),让 Finish 能正确设定页面形状。

2. NewPage / EndPage / TextOut / AcceptGraphic - 空操作(metafile 中已包含渲染好的内容)

3. Finish - 对缓存的每个 QRPrinter.PageList[i] 图元文件,新增(或复用)一个按 PaperWidth / PaperHeight 点数设定大小的 HotPDF 页面,并调用 ShowEnhancedMetafile。随后 EndDoc 并释放。

 

属性

Title / Author / Subject / Keywords - 文档元数据。Title 为空时,适配器回退到 Filename,保证 PDF 始终有非空标题。请在调用 ExportToFilter 之前设置。

PDFVersion - 文档所面向的 PDF 规范级别。默认为 pdf17

PDFACompliance 与 PDFXCompliance - 把 HotPDF 的标准合规门控传递到生成的报表 PDF。在依赖最终合规声明之前,调用方仍需按常规 HotPDF 工作流准备好所需的 ICC profile、OutputIntent、tagging 或印前资产。

Compressed - 是否启用 HotPDF 流压缩(默认 True)。诊断用 PDF 可设为 False

CompressionLevel - FlateDecode level. Defaults to clDefault.

SetOutputStream(AStream) - 把 PDF 字节路由进 AStream 而不是写盘。请在 ExportToFilter 之前调用。HotPDF 在 EndDoc 时才保存,内部会先用临时文件,字节在 Finish 中回流。

 

典型工作流

 

Filter := TQRHotPDFExportFilter.Create('Report.pdf');

try

  Filter.Title := 'Monthly Statement';

  Filter.PDFVersion := pdf17;

  Filter.PDFACompliance := '3B';

  QuickRep1.ExportToFilter(Filter);

finally

  Filter.Free;

end;

 

保留的能力

由 QuickReport 标准预览 / 打印管线渲染的矢量和光栅页面内容。文本字符串由 GDI 解析。页面尺寸沿用 PaperWidth / PaperHeight,即 QuickReport 传给 Start 的值

 

限制 of the metafile bridge

由于页面以增强型图元文件捕获,需要结构信息的 QuickReport 专用 PDF 功能(AcroForm 字段、命名目标和大纲)不会被传递。PDF/A 和 PDF/X 门控属性会转发给 HotPDF,但 OutputIntent profile 等标准专用资产仍由调用方负责。输出是对 QuickReport 渲染结果的忠实视觉再现,不是结构化 PDF。

 

打包说明

适配器位于 Lib\Addons\QuickReport\,不属于主 HotPDF*.dpk 包,因此只有显式选用该适配器的项目才会引入 QuickReport 依赖。烟雾测试(smoke_qr_hotpdf.dpr)与该单元放在同一位置。

 

另请参阅: TfrxHotPDFExport, TppHotPDFDevice, dxHotPDFExportReportLink, THPDFPage.ShowMetafile, 增强型 EMF/WMF 支持