|
dxHotPDFExportReportLink DevExpress ExpressPrinting System adapter (
|
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 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
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 |