|
dxHotPDFExportReportLink Adapter eksportu PDF dla DevExpress ExpressPrinting System (XtraPrinting / XtraReports / printable links cxGrid / i podobne), który używa HotPDF jako bazowego backendu PDF zamiast własnego emitera dxPSExportToPDF / TdxPSPDFExport DevExpress. Przeznaczony dla projektów, które już osadzają HotPDF i chcą jednego backendu PDF w całej aplikacji
|
FastReport adapter QuickReport adapter ReportBuilder device |
|
Adapter eksportu PDF dla DevExpress ExpressPrinting System (XtraPrinting / XtraReports / printable links cxGrid / i podobne), który używa HotPDF jako bazowego backendu PDF zamiast własnego emitera
Rekord opcji: 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;
Opis System drukowania DevExpress koncentruje się na TBasedxReportLink - abstrakcyjnym linku łączącym printable component (cxGrid, cxRichEdit, cxScheduler, cxPivotGrid i podobne) z TdxComponentPrinter. Printer / link składa strony, a następnie udostępnia protected metodę PaintPage(ACanvas, APageBounds, APageIndex, AContinuousIndex, AZoomFactor), która rysuje pojedynczą stronę na dowolnym TCanvas
Ten adapter odzwierciedla pętlę z własnego TdxPSPDFReportExportProvider.Build DevExpress, ale zamiast kierować wynik PaintPage do canvas PDF DevExpress, kieruje go do TMetafileCanvas. Powstały metafile jest następnie przekazywany do auto-scaling importer ShowEnhancedMetafile HotPDF:
1. Caller wywołuje dxHotPDFExportReportLinkToFile lub dxHotPDFExportReportLinkToStream z przygotowanym TBasedxReportLink 2. Adapter wywołuje AReportLink.RebuildReport, aby złożyć strony 3. Dla każdego page index pyta link o RenderInfo.GetActualPageRenderInfo, oblicza rozmiar strony w PDF points (używając własnego współczynnika PointsPerInch / UnitsPerInch DevExpress), buduje TMetafile w wybranym render DPI i renderuje stronę przez PaintPage(MetaCanvas, ...) 4. Dodawana jest nowa strona HotPDF (lub ponownie używana jest automatycznie utworzona pierwsza strona), o rozmiarze wyliczonych point dimensions, a metafile jest odtwarzany przez ShowEnhancedMetafile 5. HotPDF.EndDoc zapisuje PDF; dla stream overloads plik tymczasowy jest następnie kopiowany do TStream dostarczonego przez callera
Options Title / Author / Subject / Keywords - document metadata. Gdy Title jest puste, adapter używa fallbacku AReportLink.ReportTitle.Text, potem AReportLink.Name, więc PDF zawsze ma niepusty tytuł PDFVersion - poziom specyfikacji PDF, w który ma celować dokument. Domyślnie pdf17
RenderDPI - pixel density używane podczas rasteryzacji każdej strony przez TMetafileCanvas. Wyższe = ostrzejszy tekst i linie, ale większy metafile i PDF. 200 (domyślnie) daje jakość druku bez ogromnych plików. Wartości ≤ 0 są ograniczane do 200
Typowy przepływ pracy
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);
Obsługiwane rodziny linków Dowolny descendant TBasedxReportLink. Obejmuje to cxGrid, cxRichEdit, cxScheduler, cxPivotGrid oraz custom links wyprowadzone z tej samej base class. Adapter nie zależy od konkretnego typu linku, ponieważ kontrakt PaintPage jest zdefiniowany w base
Zachowane możliwości Zawartość strony vector i raster emitowana przez każdą rodzinę linków DevExpress (cxGrid, cxScheduler, cxRichEdit, cxPivotGrid, custom links). GDI-resolved text strings (DevExpress renderuje tekst przez TCanvas; metafile wiernie zapisuje wywołania tekstowe GDI)
Ograniczenia mostka metafile Ponieważ strony są przechwytywane jako enhanced metafiles, specyficzne dla DevExpress funkcje PDF wymagające informacji strukturalnych (interactive AcroForm fields, named destinations, bookmarks / outlines, PDF/A lub PDF/X conformance gates) nie są propagowane. Wynik jest wierną wizualną reprodukcją tego, co renderuje DevExpress, a nie strukturalnym PDF
Uwaga o pakietowaniu Adapter znajduje się w Lib\Addons\DevExpress\ i nie jest częścią głównych pakietów HotPDF*.dpk, więc zależność DevExpress ExpressPrinting jest pobierana tylko przez projekty, które świadomie włączają adapter. Smoke test (smoke_dx_hotpdf.dpr) znajduje się obok unitu
Zobacz też: TfrxHotPDFExport, TQRHotPDFExportFilter, TppHotPDFDevice, THPDFPage.ShowMetafile, Enhanced EMF/WMF Support |