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 dxPSExportToPDF / TdxPSPDFExport DevExpress. Przeznaczony dla projektów, które już osadzają HotPDF i chcą jednego backendu PDF w całej aplikacji

 

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

Compression - FlateDecode level. Defaults to clDefault.

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