TQRHotPDFExportFilter

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

 

FastReport adapter  ReportBuilder device  DevExpress adapter

QuickReport 用 export filter です。QuickReport 独自の QRPDFFilter の代わりに、基盤の PDF backend として HotPDF を使用します。すでに HotPDF を組み込んでおり、アプリケーション全体で単一の PDF backend を使いたいプロジェクト向けです

 

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 Compressed: Boolean;

    property CompressionLevel: TPDFCompressionLevel;

  end;

 

説明

TQRHotPDFExportFilterTQRExportFilter から派生しているため、QuickReport core を変更せずに通常の MyReport.ExportToFilter(MyExporterInstance) workflow に組み込めます。TQRExportFilterTComponent descendant ではなく、QuickReport の設計では plain class であるため、IDE component registration はありません。呼び出し元が Create('out.pdf') により TQRHotPDFExportFilter を直接 instantiate します

 

QuickReport は準備済みの各ページを QRPrinter.PageList に cache された TMetafile にレンダリングします。per-component の TextOut / AcceptGraphic / AcceptBand callback set 全体を再実装するのではなく、adapter はそれらを無視し (no-op overrides)、Finish で per-page metafiles を取得します:

 

1. Start(PaperWidth, PaperHeight, Font) - THotPDF instance を作成し、metadata を設定して BeginDoc を呼び出し、Finish がページ形状を正しく決められるよう (PaperWidth, PaperHeight) を保存します

2. NewPage / EndPage / TextOut / AcceptGraphic - no-op です (metafile にはすでにレンダリング済み content があります)

3. Finish - cache された各 QRPrinter.PageList[i] metafile について、PaperWidth / PaperHeight に基づく point サイズで HotPDF ページを追加または再利用し、ShowEnhancedMetafile を呼び出します。その後 EndDoc を呼び出して解放します

 

プロパティ

Title / Author / Subject / Keywords - document metadata です。Title が空の場合、adapter は Report.Name にフォールバックするため、PDF は常に空でない title を持ちます

PDFVersion - ドキュメントが対象とする PDF 仕様レベルです。既定値は pdf17 です

Compressed - HotPDF stream compression を有効にします (既定値は True)。診断用 PDF が必要な場合は False に設定します (ファイルサイズは約 5 倍になります)

CompressionLevel - FlateDecode level です。既定値は clDefault です

SetOutputStream(AStream) - PDF bytes を disk に書き込む代わりに AStream に送ります。ExportToFilter の前に呼び出してください。HotPDF は EndDoc 時点で保存するため、内部的には temp file が使用されます。bytes は Finish で stream に戻されます

 

典型的な workflow

 

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

try

  Filter.Title := 'Monthly Statement';

  Filter.PDFVersion := pdf17;

  QuickRep1.ExportToFilter(Filter);

finally

  Filter.Free;

end;

 

保持される機能

QuickReport の標準 preview / printer pipeline がレンダリングする vector および raster page content。GDI で解決された text string。ページサイズは QuickReport から Start に渡される PaperWidth / PaperHeight に従います

 

metafile bridge の制限

ページは enhanced metafile としてキャプチャされるため、構造情報を必要とする QuickReport 固有の PDF 機能 (AcroForm fields, named destinations, outlines, PDF/A または PDF/X conformance gates) は引き継がれません。出力は QuickReport がレンダリングする内容の忠実な視覚的再現であり、構造化 PDF ではありません

 

パッケージング上の注意

adapter は Lib\Addons\QuickReport\ にあり、メインの HotPDF*.dpk packages には含まれません。そのため QuickReport 依存関係は、adapter を明示的に使用するプロジェクトにのみ取り込まれます。smoke test (smoke_qr_hotpdf.dpr) は unit の隣にあります

 

関連項目: TfrxHotPDFExport, TppHotPDFDevice, dxHotPDFExportReportLink, THPDFPage.ShowMetafile, Enhanced EMF/WMF Support