dxHotPDFExportReportLink

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

 

FastReport adapter  QuickReport adapter  ReportBuilder device

Προσαρμογέας εξαγωγής PDF για DevExpress ExpressPrinting System (XtraPrinting / XtraReports / cxGrid printable links / και παρόμοια) που χρησιμοποιεί το HotPDF ως υποκείμενο PDF backend αντί για το dxPSExportToPDF / TdxPSPDFExport emitter του DevExpress. Προορίζεται για έργα που ήδη ενσωματώνουν HotPDF και θέλουν ένα ενιαίο PDF backend σε όλη την εφαρμογή

 

Options record:

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;

 

Περιγραφή

Το σύστημα εκτύπωσης του DevExpress επικεντρώνεται στο TBasedxReportLink - το abstract link που γεφυρώνει ένα printable component (cxGrid, cxRichEdit, cxScheduler, cxPivotGrid και παρόμοια) με ένα TdxComponentPrinter. Το printer / link συνθέτει σελίδες και έπειτα εκθέτει protected PaintPage(ACanvas, APageBounds, APageIndex, AContinuousIndex, AZoomFactor), που σχεδιάζει μία σελίδα σε οποιοδήποτε TCanvas

 

Αυτός ο προσαρμογέας καθρεφτίζει τον βρόχο στο TdxPSPDFReportExportProvider.Build του DevExpress, αλλά αντί να δρομολογεί την έξοδο PaintPage σε DevExpress PDF canvas, τη δρομολογεί σε TMetafileCanvas. Το παραγόμενο metafile τροφοδοτείται έπειτα στον auto-scaling importer ShowEnhancedMetafile του HotPDF:

 

1. Ο caller καλεί dxHotPDFExportReportLinkToFile ή dxHotPDFExportReportLinkToStream με το προετοιμασμένο TBasedxReportLink

2. The adapter calls AReportLink.RebuildReport to compose pages.

3. Για κάθε δείκτη σελίδας, ζητά από το link RenderInfo.GetActualPageRenderInfo, υπολογίζει το μέγεθος σελίδας σε PDF points (χρησιμοποιώντας την αναλογία PointsPerInch / UnitsPerInch του ίδιου του DevExpress), δημιουργεί TMetafile στο επιλεγμένο render DPI και αποδίδει τη σελίδα μέσω PaintPage(MetaCanvas, ...)

4. Προστίθεται νέα σελίδα HotPDF (ή επαναχρησιμοποιείται η πρώτη σελίδα που δημιουργήθηκε αυτόματα), με μέγεθος στις υπολογισμένες διαστάσεις points, και το metafile αναπαράγεται μέσω ShowEnhancedMetafile

5. Το HotPDF.EndDoc γράφει το PDF· για τις stream overloads, το προσωρινό αρχείο αντιγράφεται έπειτα στο TStream που παρέχει ο caller

 

Options

Title / Author / Subject / Keywords - metadata εγγράφου. Όταν το Title είναι κενό, ο προσαρμογέας χρησιμοποιεί ως fallback το AReportLink.ReportTitle.Text και έπειτα το AReportLink.Name, ώστε το PDF να έχει πάντα μη κενό τίτλο

PDFVersion - το επίπεδο προδιαγραφής PDF που πρέπει να στοχεύει το έγγραφο. Προεπιλογή είναι pdf17

Compression - FlateDecode level. Defaults to clDefault.

RenderDPI - πυκνότητα pixel που χρησιμοποιείται κατά το rasterising κάθε σελίδας μέσω TMetafileCanvas. Μεγαλύτερη τιμή σημαίνει καθαρότερο κείμενο και γραμμές αλλά μεγαλύτερο metafile και PDF. Το 200 (προεπιλογή) δίνει ποιότητα εκτύπωσης χωρίς τεράστια αρχεία. Τιμές ≤ 0 περιορίζονται σε 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);

 

Υποστηριζόμενες οικογένειες links

Οποιοσδήποτε απόγονος του TBasedxReportLink. Αυτό καλύπτει cxGrid, cxRichEdit, cxScheduler, cxPivotGrid, καθώς και οποιαδήποτε custom links που παράγονται από την ίδια base class. Ο προσαρμογέας δεν εξαρτάται από τον συγκεκριμένο τύπο link επειδή το contract PaintPage ορίζεται στη βάση

 

Capabilities preserved

Vector και raster page content που εκπέμπεται από κάθε οικογένεια link του DevExpress (cxGrid, cxScheduler, cxRichEdit, cxPivotGrid, custom links). Text strings που έχουν επιλυθεί από GDI (το DevExpress αποδίδει κείμενο μέσω TCanvas· τα metafile records καταγράφουν πιστά τις GDI text calls)

 

Limitations of the metafile bridge

Επειδή οι σελίδες καταγράφονται ως enhanced metafiles, δεν μεταφέρονται PDF features ειδικά του DevExpress που απαιτούν δομικές πληροφορίες (interactive AcroForm fields, named destinations, bookmarks / outlines, gates συμμόρφωσης PDF/A ή PDF/X). Η έξοδος είναι πιστή οπτική αναπαραγωγή αυτού που αποδίδει το DevExpress, όχι δομημένο PDF

 

Packaging note

Ο προσαρμογέας βρίσκεται στο Lib\Addons\DevExpress\ και δεν αποτελεί μέρος των κύριων πακέτων HotPDF*.dpk, επομένως η εξάρτηση DevExpress ExpressPrinting τραβιέται μόνο από έργα που επιλέγουν τον προσαρμογέα. Ένα smoke test (smoke_dx_hotpdf.dpr) βρίσκεται δίπλα στην unit

 

See also: TfrxHotPDFExport, TQRHotPDFExportFilter, TppHotPDFDevice, THPDFPage.ShowMetafile, Enhanced EMF/WMF Support