|
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;
説明
TQRHotPDFExportFilter は TQRExportFilter から派生しているため、QuickReport core を変更せずに通常の MyReport.ExportToFilter(MyExporterInstance) workflow に組み込めます。TQRExportFilter は TComponent 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
|