dxHotPDFExportReportLink

Адаптер експорту PDF для DevExpress ExpressPrinting System (XtraPrinting / XtraReports / cxGrid printable links / та подібні), який використовує HotPDF як underlying PDF backend замість власного emitter DevExpress dxPSExportToPDF / TdxPSPDFExport Призначений для projects, які вже embed HotPDF і хочуть єдиний PDF backend для всього application

 

FastReport adapter  QuickReport adapter  ReportBuilder device

Адаптер експорту PDF для DevExpress ExpressPrinting System (XtraPrinting / XtraReports / cxGrid printable links / та подібні), який використовує HotPDF як underlying PDF backend замість власного emitter DevExpress dxPSExportToPDF / TdxPSPDFExport Призначений для projects, які вже embed HotPDF і хочуть єдиний PDF backend для всього application

 

Options record:

type

  TdxHotPDFExportOptions = record

    Title, Author, Subject, Keywords: string;

PDFVersion - рівень PDF specification, на який має орієнтуватися документ За замовчуванням pdf17

    Compression: TPDFCompressionLevel;  // default clDefault

RenderDPI - pixel density, що використовується під час rasterising кожної page через TMetafileCanvas Вище значення дає чіткіший текст і лінії, але більший metafile і PDF 200 (default) дає print-quality result без надмірних файлів Значення ≤ 0 clamp до 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;

 

Опис

Printing system DevExpress зосереджена навколо TBasedxReportLink - abstract link, що з'єднує printable component (cxGrid, cxRichEdit, cxScheduler, cxPivotGrid тощо) з TdxComponentPrinter Printer / link компонують сторінки, а потім expose protected method PaintPage(ACanvas, APageBounds, APageIndex, AContinuousIndex, AZoomFactor), який малює одну сторінку на будь-який TCanvas

 

Цей adapter повторює loop у власному TdxPSPDFReportExportProvider.Build DevExpress, але замість routing output PaintPage у DevExpress PDF canvas направляє його в TMetafileCanvas Отриманий metafile передається importer HotPDF ShowEnhancedMetafile з auto-scaling:

 

1. Caller викликає dxHotPDFExportReportLinkToFile або dxHotPDFExportReportLinkToStream з підготовленим TBasedxReportLink

2. The adapter calls AReportLink.RebuildReport to compose pages.

3. Для кожного page index він запитує у link RenderInfo.GetActualPageRenderInfo, обчислює розмір page у PDF points (з використанням власного ratio PointsPerInch / UnitsPerInch DevExpress), створює TMetafile з вибраним render DPI і renderить page через PaintPage(MetaCanvas, ...)

4. Додається нова HotPDF page (або використовується auto-created first page), її розмір задається обчисленими point dimensions, а metafile програється через ShowEnhancedMetafile

5. HotPDF.EndDoc записує PDF; для stream overloads temp file потім копіюється в TStream, переданий caller

 

Options

Title / Author / Subject / Keywords - metadata документа Коли Title порожній, adapter fallback до AReportLink.ReportTitle.Text, потім до AReportLink.Name, тому PDF завжди має непорожній title

PDFVersion - рівень PDF specification, на який має орієнтуватися документ За замовчуванням pdf17

Compression - FlateDecode level. Defaults to clDefault.

RenderDPI - pixel density, що використовується під час rasterising кожної page через TMetafileCanvas Вище значення дає чіткіший текст і лінії, але більший metafile і PDF 200 (default) дає print-quality result без надмірних файлів Значення ≤ 0 clamp до 200

 

Typical 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

Будь-який descendant TBasedxReportLink Це охоплює cxGrid, cxRichEdit, cxScheduler, cxPivotGrid і custom links, derived від тієї самої base class Adapter не залежить від конкретного link type, оскільки contract PaintPage визначений на base

 

Capabilities preserved

Vector і raster page content, emitted кожною родиною DevExpress links (cxGrid, cxScheduler, cxRichEdit, cxPivotGrid, custom links) GDI-resolved text strings (DevExpress renderить text через TCanvas; metafile faithfully records GDI text calls)

 

Limitations of the metafile bridge

Оскільки pages capture як enhanced metafiles, PDF features, специфічні для DevExpress і залежні від structural information (interactive AcroForm fields, named destinations, bookmarks / outlines, PDF/A або PDF/X conformance gates), не переносяться Output є точним visual reproduction того, що renderить DevExpress, а не structured PDF

 

Packaging note

Adapter знаходиться в Lib\Addons\DevExpress\ і не входить до основних packages HotPDF*.dpk, тому dependency DevExpress ExpressPrinting підтягується лише projects, які opt in до adapter Smoke test (smoke_dx_hotpdf.dpr) лежить поруч з unit

 

See also: TfrxHotPDFExport, TQRHotPDFExportFilter, TppHotPDFDevice, THPDFPage.ShowMetafile, Enhanced EMF/WMF Support