dxHotPDFExportReportLink

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

 

FastReport adapter  QuickReport adapter  ReportBuilder device

Adaptor de export PDF pentru DevExpress ExpressPrinting System (XtraPrinting / XtraReports / cxGrid printable links / și altele similare) care folosește HotPDF ca backend PDF de bază în locul propriului emitter dxPSExportToPDF / TdxPSPDFExport al DevExpress. Este destinat proiectelor care includ deja HotPDF și vor un singur backend PDF pentru întreaga aplicație

 

Înregistrarea opțiunilor:

type

  TdxHotPDFExportOptions = record

    Title, Author, Subject, Keywords: string;

    PDFVersion : TPDFVersType;  // default pdf17

    Compression: TPDFCompressionLevel;  // default clDefault

    RenderDPI  : Integer;  // default 200

  end;

 

function dxHotPDFDefaultOptions: TdxHotPDFExportOptions;

 

Puncte de intrare bazate pe fișier:

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;

 

Descriere

Sistemul de imprimare DevExpress se bazează pe TBasedxReportLink - legătura abstractă care conectează o componentă imprimabilă (cxGrid, cxRichEdit, cxScheduler, cxPivotGrid și altele asemenea) la un TdxComponentPrinter. Imprimanta / legătura compune paginile, apoi expune o metodă protejată PaintPage(ACanvas, APageBounds, APageIndex, AContinuousIndex, AZoomFactor) care desenează o singură pagină pe orice TCanvas

 

Acest adaptor reproduce bucla din TdxPSPDFReportExportProvider.Build a DevExpress, dar în loc să trimită ieșirea lui PaintPage într-un canvas PDF DevExpress, o direcționează către un TMetafileCanvas. Metafile-ul rezultat este apoi transmis importatorului HotPDF ShowEnhancedMetafile cu scalare automată:

 

1. Apelantul invocă dxHotPDFExportReportLinkToFile sau dxHotPDFExportReportLinkToStream cu TBasedxReportLink-ul pregătit

2. Adaptorul apelează AReportLink.RebuildReport pentru a compune paginile

3. Pentru fiecare index de pagină, solicită legăturii RenderInfo.GetActualPageRenderInfo, calculează dimensiunea paginii în puncte PDF (folosind raportul PointsPerInch / UnitsPerInch al DevExpress), construiește un TMetafile la DPI-ul de randare ales și redă pagina prin PaintPage(MetaCanvas, ...)

4. Se adaugă o pagină HotPDF nouă (sau se reutilizează prima pagină creată automat), dimensionată la valorile calculate în puncte, iar metafile-ul este redat prin ShowEnhancedMetafile

5. HotPDF.EndDoc scrie PDF-ul; pentru supraincărcările de tip stream, fișierul temporar este apoi copiat în TStream-ul furnizat de apelant

 

Opțiuni

Title / Author / Subject / Keywords - metadate ale documentului. Când Title este gol, adaptorul revine la AReportLink.ReportTitle.Text, apoi la AReportLink.Name, astfel încât PDF-ul are întotdeauna un titlu nenul

PDFVersion - nivelul specificației PDF pe care documentul ar trebui să îl țintească. Valoarea implicită este pdf17

Compression - nivelul FlateDecode. Valoarea implicită este clDefault

RenderDPI - densitatea de pixeli folosită la rasterizarea fiecărei pagini prin TMetafileCanvas. Valori mai mari înseamnă text și linii mai clare, dar un metafile și un PDF mai mari. 200, valoarea implicită, oferă rezultate de calitate pentru tipar fără fișiere excesiv de mari. Valorile ≤ 0 sunt fixate la 200

 

Flux tipic

 

dxComponentPrinter1.CurrentLink := cxGridReportLink1;

dxHotPDFExportReportLinkToFile(cxGridReportLink1, 'Grid.pdf');

 

Sau cu opțiuni personalizate:

 

Opts := dxHotPDFDefaultOptions;

Opts.Title := 'Q1 Sales';

Opts.RenderDPI := 300;

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

 

Familii de legături acceptate

Orice descendent al TBasedxReportLink. Aceasta acoperă cxGrid, cxRichEdit, cxScheduler, cxPivotGrid plus orice legături personalizate derivate din aceeași clasă de bază. Adaptorul nu depinde de tipul concret al legăturii deoarece contractul PaintPage este definit în baza de clasă

 

Capabilități păstrate

Conținut de pagină vectorial și raster emis de fiecare familie de legături DevExpress (cxGrid, cxScheduler, cxRichEdit, cxPivotGrid, legături personalizate). Șiruri de text rezolvate prin GDI (DevExpress redă textul prin TCanvas; metafile-ul înregistrează fidel apelurile de text GDI)

 

Limitările punții prin metafile

Deoarece paginile sunt capturate ca enhanced metafiles, funcțiile PDF specifice DevExpress care au nevoie de informații structurale (câmpuri AcroForm interactive, destinații numite, bookmark-uri / outline-uri, porți de conformitate PDF/A sau PDF/X) nu sunt propagate. Rezultatul este o reproducere vizuală fidelă a ceea ce redă DevExpress, nu un PDF structurat

 

Notă despre ambalare

Adaptorul se află în Lib\Addons\DevExpress\ și nu face parte din pachetele principale HotPDF*.dpk, astfel încât dependența DevExpress ExpressPrinting este adusă doar de proiectele care optează pentru adaptor. Un smoke test (smoke_dx_hotpdf.dpr) se află lângă unitate

 

Vezi și: TfrxHotPDFExport, TQRHotPDFExportFilter, TppHotPDFDevice, THPDFPage.ShowMetafile, Suport EMF/WMF îmbunătățit