TppHotPDFDevice

ReportBuilder adapter (Lib\Addons\ReportBuilder\ppHotPDFDevice.pas)

 

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. StartJob creates the THotPDF instance, sets metadata, and calls BeginDoc.

2. BeforeRenderPage creates a TMetafile sized to spWidth x spHeight plus a TMetafileCanvas, and sets it as the inherited Canvas.

3. RenderPage (κληρονομημένο) διατρέχει τα DrawCommands και τα δρομολογεί μέσω GraphicsContext στο δικό μας metafile canvas

4. AfterRenderPage οριστικοποιεί το metafile (απελευθερώνει το canvas), προσθέτει νέα σελίδα HotPDF με μέγεθος mmWidth x mmHeight (μετατρεμμένο σε PDF points) και αναπαράγει το metafile μέσω ShowEnhancedMetafile

5. EndJob καλεί HotPDF.EndDoc· αν η έξοδος είναι Stream, αντιγράφει bytes από το προσωρινό αρχείο που γράφτηκε εσωτερικά

 

Ιδιότητες

FileName - target PDF path. Used unless SetOutputStream has installed a stream.

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

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

Compressed - HotPDF stream compression on (default True). Set False for diagnostic PDFs.

CompressionLevel - FlateDecode level. Defaults to clDefault.

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