|
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 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
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 |