|
TppHotPDFDevice ReportBuilder adapter (
|
FastReport adapter QuickReport adapter DevExpress adapter |
|
Κλάση συσκευής ReportBuilder που χρησιμοποιεί το HotPDF ως υποκείμενο PDF backend αντί για το ppPDFDevice του ReportBuilder. Προορίζεται για έργα που ήδη ενσωματώνουν HotPDF και θέλουν ένα ενιαίο PDF backend σε όλη την εφαρμογή
Delphi declaration: type TppHotPDFDevice = class(TppGraphicsDevice) public class function DeviceName: String; override; procedure StartJob; override; procedure EndJob; override; procedure CancelJob; override; procedure SetOutputStream(AStream: TStream); property FileName: string; property Title, Author, Subject, Keywords: string; property PDFVersion: TPDFVersType; property Compressed: Boolean; property CompressionLevel: TPDFCompressionLevel; end;
Περιγραφή Το TppHotPDFDevice κατέρχεται από TppGraphicsDevice (ένα επίπεδο πάνω από TppCustomScreenDevice / TppImageDevice), επομένως εντάσσεται στην αλυσίδα συσκευών του ReportBuilder όταν ανατεθεί σε TppReport.PrinterDevice ή χρησιμοποιηθεί ως publisher device σε TppPublisher. Το DeviceName αναφέρεται ως 'HotPDF'. Επειδή η καταχώριση συσκευής στο ReportBuilder γίνεται μέσω ppRptDeviceMap και όχι με RegisterComponents, δεν υπάρχει είσοδος στην παλέτα components της IDE· οι callers δημιουργούν TppHotPDFDevice απευθείας
Κάθε σελίδα που περνά από TppGraphicsDevice.ReceivePage σχεδιάζεται σε προσωρινό TMetafileCanvas (δημιουργείται στο BeforeRenderPage, οριστικοποιείται στο AfterRenderPage). Το καταγεγραμμένο TMetafile τροφοδοτείται έπειτα στον auto-scaling importer ShowEnhancedMetafile του HotPDF:
1. 2. 3. RenderPage (κληρονομημένο) διατρέχει τα DrawCommands και τα δρομολογεί μέσω GraphicsContext στο δικό μας metafile canvas 4. AfterRenderPage οριστικοποιεί το metafile (απελευθερώνει το canvas), προσθέτει νέα σελίδα HotPDF με μέγεθος mmWidth x mmHeight (μετατρεμμένο σε PDF points) και αναπαράγει το metafile μέσω ShowEnhancedMetafile 5. EndJob καλεί HotPDF.EndDoc· αν η έξοδος είναι Stream, αντιγράφει bytes από το προσωρινό αρχείο που γράφτηκε εσωτερικά
Ιδιότητες
Title / Author / Subject / Keywords - metadata εγγράφου. Όταν το Title είναι κενό, η συσκευή χρησιμοποιεί FileName ως fallback ώστε το PDF να έχει πάντα μη κενό τίτλο PDFVersion - το επίπεδο προδιαγραφής PDF που πρέπει να στοχεύει το έγγραφο. Προεπιλογή είναι pdf17
SetOutputStream(AStream) - δρομολογεί τα PDF bytes στο AStream αντί να γράφει σε δίσκο. Καλέστε πριν το report πυροδοτήσει StartJob
Typical workflow
Dev := TppHotPDFDevice.Create(nil); try Dev.FileName := 'Report.pdf'; Dev.Title := 'Monthly Statement'; Dev.PDFVersion := pdf17; ppReport1.DeviceType := 'HotPDF'; ppReport1.PrinterDevice := Dev; ppReport1.Print; finally Dev.Free; end;
Capabilities preserved Vector και raster page content που αποδίδεται από το τυπικό draw-command pipeline του ReportBuilder. Text strings που έχουν επιλυθεί από GDI. Η προεπιλεγμένη 200 DPI metafile capture (ρυθμιζόμενη μέσω του κληρονομημένου PixelsPerInch) δίνει έξοδο ποιότητας εκτύπωσης χωρίς τεράστια αρχεία
Limitations of the metafile bridge Επειδή οι σελίδες καταγράφονται ως enhanced metafiles, PDF features ειδικά του ReportBuilder που απαιτούν δομικές πληροφορίες (AcroForm fields, named destinations, outlines, gates συμμόρφωσης PDF/A ή PDF/X) δεν μεταφέρονται. Η έξοδος είναι πιστή οπτική αναπαραγωγή αυτού που αποδίδει το ReportBuilder, όχι δομημένο PDF
Packaging note Η συσκευή βρίσκεται στο Lib\Addons\ReportBuilder\ και δεν αποτελεί μέρος των κύριων πακέτων HotPDF*.dpk, επομένως η εξάρτηση ReportBuilder τραβιέται μόνο από έργα που επιλέγουν τη συσκευή. Ένα smoke test (smoke_pp_hotpdf.dpr) βρίσκεται δίπλα στην unit
See also: TfrxHotPDFExport, TQRHotPDFExportFilter, dxHotPDFExportReportLink, THPDFPage.ShowMetafile, Enhanced EMF/WMF Support |