dxHotPDFExportReportLink

DevExpress ExpressPrinting System 用 adapter (Lib\Addons\DevExpress\dxHotPDFExport.pas)

 

FastReport adapter  QuickReport adapter  ReportBuilder device

DevExpress ExpressPrinting System (XtraPrinting / XtraReports / cxGrid printable link など) 用の PDF export adapter です。DevExpress 独自の dxPSExportToPDF / TdxPSPDFExport emitter の代わりに、基盤の PDF backend として HotPDF を使用します。すでに HotPDF を組み込んでおり、アプリケーション全体で単一の PDF backend を使いたいプロジェクト向けです

 

オプション

type

  TdxHotPDFExportOptions = record

    Title, Author, Subject, Keywords: string;

    PDFVersion : TPDFVersType;  // default pdf17

    Compression: TPDFCompressionLevel;  // default clDefault

    RenderDPI  : Integer;  // default 200

  end;

 

function dxHotPDFDefaultOptions: TdxHotPDFExportOptions;

 

File-based entry points:

function dxHotPDFExportReportLinkToFile(

  AReportLink: TBasedxReportLink;

  const AOutputFileName: string;

  const AOptions: TdxHotPDFExportOptions): Boolean; overload;

function dxHotPDFExportReportLinkToFile(

  AReportLink: TBasedxReportLink;

  const AOutputFileName: string): Boolean; overload;

 

Stream-based entry points:

function dxHotPDFExportReportLinkToStream(

  AReportLink: TBasedxReportLink;

  AOutputStream: TStream;

  const AOptions: TdxHotPDFExportOptions): Boolean; overload;

function dxHotPDFExportReportLinkToStream(

  AReportLink: TBasedxReportLink;

  AOutputStream: TStream): Boolean; overload;

 

説明

DevExpress の printing system は TBasedxReportLink を中心にしています。これは printable component (cxGrid, cxRichEdit, cxScheduler, cxPivotGrid など) と TdxComponentPrinter を橋渡しする抽象 link です。printer / link はページを構成し、その後 protected な PaintPage(ACanvas, APageBounds, APageIndex, AContinuousIndex, AZoomFactor) メソッドを公開します。このメソッドは任意の TCanvas に 1 ページを描画します

 

この adapter は DevExpress 自身の TdxPSPDFReportExportProvider.Build のループを反映します。ただし PaintPage の出力を DevExpress PDF canvas に送るのではなく、TMetafileCanvas に送ります。その結果の metafile は HotPDF の ShowEnhancedMetafile auto-scaling importer に渡されます:

 

1. 呼び出し元は、準備済みの TBasedxReportLink を指定して dxHotPDFExportReportLinkToFile または dxHotPDFExportReportLinkToStream を呼び出します

2. adapter はページを構成するために AReportLink.RebuildReport を呼び出します

3. 各ページインデックスについて、link に RenderInfo.GetActualPageRenderInfo を問い合わせ、PDF point 単位のページサイズを計算し (DevExpress 自身の PointsPerInch / UnitsPerInch 比率を使用)、選択された render DPI で TMetafile を作成して PaintPage(MetaCanvas, ...) によりページをレンダリングします

4. 新しい HotPDF ページを追加するか、自動作成された最初のページを再利用します。計算された point 寸法にサイズを合わせ、ShowEnhancedMetafile 経由で metafile を再生します

5. HotPDF.EndDoc が PDF を書き込みます。stream overload では、その後 temp file が呼び出し元提供の TStream にコピーされます

 

オプション

Title / Author / Subject / Keywords - ドキュメント metadata です。Title が空の場合、adapter は AReportLink.ReportTitle.Text、次に AReportLink.Name にフォールバックするため、PDF は常に空でない title を持ちます

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

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

RenderDPI - TMetafileCanvas を通じて各ページを rasterise するときに使用する pixel density です。値が高いほど文字と線は鮮明になりますが、metafile と PDF は大きくなります。200 (既定値) は巨大なファイルにせず印刷品質の結果を与えます。0 以下の値は 200 に丸められます

 

典型的な workflow

 

dxComponentPrinter1.CurrentLink := cxGridReportLink1;

dxHotPDFExportReportLinkToFile(cxGridReportLink1, 'Grid.pdf');

 

Or with custom options:

 

Opts := dxHotPDFDefaultOptions;

Opts.Title := 'Q1 Sales';

Opts.RenderDPI := 300;

dxHotPDFExportReportLinkToFile(cxGridReportLink1, 'Grid.pdf', Opts);

 

サポートされる link family

TBasedxReportLink の任意の派生クラスを対象にできます。これには cxGrid、cxRichEdit、cxScheduler、cxPivotGrid、および同じ base class から派生した custom link が含まれます。PaintPage contract は base で定義されているため、adapter は特定の link type に依存しません

 

保持される機能

すべての DevExpress link family (cxGrid, cxScheduler, cxRichEdit, cxPivotGrid, custom links) から出力される vector および raster page content。GDI で解決された text string も対象です。DevExpress は TCanvas 経由でテキストをレンダリングし、metafile は GDI text call を忠実に記録します

 

metafile bridge の制限

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

 

パッケージング上の注意

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

 

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