dxHotPDFExportReportLink (DevExpress ExpressPrinting adapter)

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

 

FastReport adapter  QuickReport adapter  ReportBuilder device

Adaptér exportu PDF pro DevExpress ExpressPrinting System (XtraPrinting / XtraReports / tiskové linky cxGrid a podobné), který používá HotPDF jako podkladové PDF jádro místo vlastního emitteru DevExpress dxPSExportToPDF / TdxPSPDFExport. Je určen pro projekty, které už HotPDF používají a chtějí jednotné PDF jádro napříč celou aplikací

 

Záznam voleb:

type

  TdxHotPDFExportOptions = record

    Title, Author, Subject, Keywords: string;

    PDFVersion : TPDFVersType;  // default pdf17

    Compression: TPDFCompressionLevel;  // default clDefault

    RenderDPI  : Integer;  // default 200

  end;

 

function dxHotPDFDefaultOptions: TdxHotPDFExportOptions;

 

Vstupní body založené na souboru:

function dxHotPDFExportReportLinkToFile(

  AReportLink: TBasedxReportLink;

  const AOutputFileName: string;

  const AOptions: TdxHotPDFExportOptions): Boolean; overload;

function dxHotPDFExportReportLinkToFile(

  AReportLink: TBasedxReportLink;

  const AOutputFileName: string): Boolean; overload;

 

Vstupní body založené na streamu:

function dxHotPDFExportReportLinkToStream(

  AReportLink: TBasedxReportLink;

  AOutputStream: TStream;

  const AOptions: TdxHotPDFExportOptions): Boolean; overload;

function dxHotPDFExportReportLinkToStream(

  AReportLink: TBasedxReportLink;

  AOutputStream: TStream): Boolean; overload;

 

Popis

Tiskový systém DevExpress je postavený okolo TBasedxReportLink - abstraktní linky, která propojuje tisknutelnou komponentu (cxGrid, cxRichEdit, cxScheduler, cxPivotGrid a podobné) s TdxComponentPrinter. Printer / link sestaví stránky a poté zpřístupní chráněnou metodu PaintPage(ACanvas, APageBounds, APageIndex, AContinuousIndex, AZoomFactor), která vykreslí jednu stránku na libovolný TCanvas

 

Tento adaptér zrcadlí smyčku ve vlastním TdxPSPDFReportExportProvider.Build od DevExpress, ale místo směrování výstupu PaintPage do PDF canvasu DevExpress jej směruje do TMetafileCanvas. Výsledný metafile se pak předá automaticky škálujícímu importeru HotPDF ShowEnhancedMetafile:

 

1. Volající zavolá dxHotPDFExportReportLinkToFile nebo dxHotPDFExportReportLinkToStream s připraveným TBasedxReportLink

2. Adaptér zavolá AReportLink.RebuildReport, aby sestavil stránky

3. Pro každý index stránky si od linky vyžádá RenderInfo.GetActualPageRenderInfo, vypočítá velikost stránky v bodech PDF (pomocí vlastního poměru DevExpress PointsPerInch / UnitsPerInch), vytvoří TMetafile ve zvoleném vykreslovacím DPI a vykreslí stránku přes PaintPage(MetaCanvas, ...)

4. Přidá se nová stránka HotPDF (nebo se znovu použije automaticky vytvořená první stránka), nastaví se na vypočtené rozměry v bodech a metafile se přehraje přes ShowEnhancedMetafile

5. HotPDF.EndDoc zapíše PDF; u stream overloads se dočasný soubor poté zkopíruje do TStream dodaného volajícím

 

Volby

Title / Author / Subject / Keywords - metadata dokumentu. Když je Title prázdné, adaptér použije jako fallback AReportLink.ReportTitle.Text a potom AReportLink.Name, takže PDF má vždy neprázdný titul

PDFVersion - úroveň specifikace PDF, na kterou má dokument cílit. Výchozí hodnota je pdf17

Compression - úroveň FlateDecode. Výchozí hodnota je clDefault

RenderDPI - hustota pixelů použitá při rastrování každé stránky přes TMetafileCanvas. Vyšší hodnota znamená ostřejší text a čáry, ale větší metafile a PDF. Hodnota 200 (výchozí) poskytuje tiskovou kvalitu bez obrovských souborů. Hodnoty ≤ 0 se omezí na 200

 

Typický pracovní postup

 

dxComponentPrinter1.CurrentLink := cxGridReportLink1;

dxHotPDFExportReportLinkToFile(cxGridReportLink1, 'Grid.pdf');

 

Nebo s vlastními volbami:

 

Opts := dxHotPDFDefaultOptions;

Opts.Title := 'Q1 Sales';

Opts.RenderDPI := 300;

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

 

Podporované rodiny linků

Libovolný potomek TBasedxReportLink. To zahrnuje cxGrid, cxRichEdit, cxScheduler, cxPivotGrid a vlastní linky odvozené ze stejné základní třídy. Adaptér nezávisí na konkrétním typu linku, protože kontrakt PaintPage je definovaný v základní třídě

 

Zachované schopnosti

Vektorový a rastrový obsah stránky emitovaný každou rodinou linků DevExpress (cxGrid, cxScheduler, cxRichEdit, cxPivotGrid, vlastní linky). Textové řetězce vyřešené přes GDI (DevExpress vykresluje text přes TCanvas; metafile věrně zaznamená volání textu GDI)

 

Omezení bridge přes metafile

Protože stránky jsou zachycené jako enhanced metafiles, PDF funkce specifické pro DevExpress, které vyžadují strukturální informace (interaktivní pole AcroForm, pojmenované cíle, záložky / outlines, brány shody PDF/A nebo PDF/X), se nepřenášejí. Výstup je věrná vizuální reprodukce toho, co DevExpress vykreslí, ne strukturované PDF

 

Poznámka k balení

Adaptér je umístěný v Lib\Addons\DevExpress\ a není součástí hlavních balíčků HotPDF*.dpk, takže závislost DevExpress ExpressPrinting si přitáhnou jen projekty, které se pro adaptér výslovně rozhodnou. Smoke test (smoke_dx_hotpdf.dpr) je uložený vedle jednotky

 

Viz také: TfrxHotPDFExport, TQRHotPDFExportFilter, TppHotPDFDevice, THPDFPage.ShowMetafile, Enhanced EMF/WMF – podpora