TQRHotPDFExportFilter

QuickReport adapter (Lib\Addons\QuickReport\qrHotPDFExport.pas)

 

FastReport adapter  ReportBuilder device  DevExpress adapter

Φίλτρο εξαγωγής QuickReport που χρησιμοποιεί το HotPDF ως υποκείμενο PDF backend αντί για το δικό του QuickReport QRPDFFiltertype

  TQRHotPDFExportFilter = class(TQRExportFilter)

  public

    constructor Create(Filename: string); override;

    procedure SetOutputStream(AStream: TStream);

    property Title, Author, Subject, Keywords: string;

    property PDFVersion: TPDFVersType;

    property Compressed: Boolean;

    property CompressionLevel: TPDFCompressionLevel;

  end;

 

Περιγραφή

Το TQRHotPDFExportFilter κατέρχεται από TQRExportFilter, επομένως εντάσσεται στην κανονική ροή MyReport.ExportToFilter(MyExporterInstance) χωρίς αλλαγές στον πυρήνα του QuickReport. Επειδή το TQRExportFilter δεν είναι απόγονος TComponent (είναι απλή κλάση στο design του QuickReport), δεν υπάρχει καταχώριση component στην IDE· οι callers δημιουργούν TQRHotPDFExportFilter απευθείας μέσω Create('out.pdf')

 

Το QuickReport αποδίδει κάθε προετοιμασμένη σελίδα σε TMetafile αποθηκευμένο στο QRPrinter.PageList. Αντί να επανυλοποιεί ολόκληρο το σύνολο callbacks TextOut / AcceptGraphic / AcceptBand ανά component, ο adapter τα αγνοεί (no-op overrides) και συλλέγει τα metafiles ανά σελίδα στο Finish:

 

1. Start(PaperWidth, PaperHeight, Font) - δημιουργεί την THotPDF instance, ορίζει metadata, καλεί BeginDoc και αποθηκεύει (PaperWidth, PaperHeight) ώστε το Finish να μπορεί να διαμορφώσει σωστά τις σελίδες

2. NewPage / EndPage / TextOut / AcceptGraphic θυγατρικό (είναι απλή κλάση στο σχεδιασμό του QuickReport), δεν υπάρχει καταχώρηση component στο IDE - οι καλούντες στιγμιοποιούν TQRHotPDFExportFilter απευθείας μέσω Create('out.pdf').

 

Το QuickReport αποδίδει κάθε ετοιμασμένη σελίδα σε TMetafile σε cache στο QRPrinter.PageList. Αντί να ξανα-υλοποιήσει όλη την ανά component TextOut / AcceptGraphic / AcceptBand callback ορισμένο, ο προσαρμογέας τις αγνοεί (παρακάμψεις no-op) και μαζεύει τα metafile ανά σελίδα στο Finish:

 

1. Start(PaperWidth, PaperHeight, Font) - δημιουργήστε το THotPDF στιγμιότυπο, ορίστε μεταδεδομένα, καλέστε BeginDoc, και αποθηκεύστε (PaperWidth, PaperHeight) so Finish μπορεί να αποδώσει σελίδες σωστά.

2. NewPage / EndPage / TextOut / AcceptGraphic - no-op (το metafile έχει ήδη το αποδιδόμενο περιεχόμενο).

3. Finish - για κάθε cached QRPrinter.PageList[i] metafile, προσθέστε (ή επαναχρησιμοποιήστε) σελίδα HotPDF με μέγεθος PaperWidth / PaperHeight σε points και καλέστε ShowEnhancedMetafile. Μετά EndDoc - no-op (the metafile already has the rendered content).

3. Finish - για κάθε cached metafile QRPrinter.PageList[i], προσθέτει (ή επαναχρησιμοποιεί) σελίδα HotPDF με μέγεθος PaperWidth / PaperHeight σε points και καλεί ShowEnhancedMetafile. Έπειτα καλεί EndDoc και απελευθερώνει

 

Title / Author / Subject / Keywords - μεταδεδομένα εγγράφου. Όταν το Title είναι κενό ο προσαρμογέας πέφτει στο Filename ώστε το PDF να έχει πάντα μη κενό τίτλο. Ορίστε πριν από ExportToFilterΙδιότητες

PDFVersion - επίπεδο προδιαγραφής PDF που πρέπει να στοχεύει το έγγραφο. Προεπιλογή pdf17Title / Author / Subject / Keywords - metadata εγγράφου. Όταν το Title είναι κενό, ο adapter χρησιμοποιεί Filename ως fallback ώστε το PDF να έχει πάντα μη κενό τίτλο. Ορίστε πριν κληθεί ExportToFilter

PDFVersion - PDF specification level the document should target. Defaults to pdf17.

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

CompressionLevel - επίπεδο FlateDecode. Προεπιλογή clDefault.

SetOutputStream(AStream) - δρομολογήστε τα byte PDF στο AStream αντί να γράφει στον δίσκο. Καλέστε πριν από ExportToFilterCompressionLevel - FlateDecode level. Defaults to clDefault.

SetOutputStream(AStream) - δρομολογεί τα PDF bytes στο AStream αντί να γράφει σε δίσκο. Καλέστε πριν από ExportToFilter. Εσωτερικά χρησιμοποιείται προσωρινό αρχείο επειδή το HotPDF αποθηκεύει στο EndDoc· τα bytes μεταδίδονται πίσω στο Finish

 

Typical workflow

 

Filter := TQRHotPDFExportFilter.Create('Report.pdf');

try

  Filter.Title := 'Monthly Statement';

  Filter.PDFVersion := pdf17;

  QuickRep1.ExportToFilter(Filter);

finally

  Filter.Free;

end;

 

Capabilities preserved

Vector and raster page content rendered by QuickReport's standard preview / printer pipeline. GDI-resolved text strings. Page sizing follows the PaperWidth / PaperHeight handed to Start by QuickReport.

 

Limitations of the metafile bridge

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

 

Packaging note

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

 

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