|
Filtru de export QuickReport care folosește HotPDF ca backend PDF de bază în locul propriului QRPDFFilter al QuickReport. Este destinat proiectelor care încorporează deja HotPDF și doresc un singur backend PDF în întreaga aplicație
Declarație Delphi:
type
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;
Descriere
TQRHotPDFExportFilter derivă din TQRExportFilter, astfel încât se integrează în fluxul obișnuit MyReport.ExportToFilter(MyExporterInstance) fără modificări în nucleul QuickReport. Deoarece TQRExportFilter nu este un descendent TComponent (este o clasă simplă în designul QuickReport), nu există înregistrare de componentă IDE - apelanții instanțiază direct TQRHotPDFExportFilter prin Create('out.pdf')
QuickReport randă fiecare pagină pregătită într-un TMetafile păstrat în QRPrinter.PageList. În loc să reimplementeze întregul set de callback-uri per-component TextOut / AcceptGraphic / AcceptBand, adaptorul le ignoră (overrides fără efect) și colectează metafile-urile per pagină în Finish
1. Start(PaperWidth, PaperHeight, Font) - creează instanța THotPDF, setează metadatele, apelează BeginDoc și salvează (PaperWidth, PaperHeight) astfel încât Finish să poată modela corect paginile
2. NewPage / EndPage / TextOut / AcceptGraphic - fără efect (metafile-ul conține deja conținutul randat)
3. Finish - pentru fiecare metafile memorat din QRPrinter.PageList[i], adaugă sau reutilizează o pagină HotPDF dimensionată la PaperWidth / PaperHeight în puncte și apelează ShowEnhancedMetafile. Apoi EndDoc și eliberează resursele
Proprietăți
Title / Author / Subject / Keywords - metadatele documentului. Când Title este gol, adaptorul revine la Filename, astfel încât PDF-ul să aibă mereu un titlu nenul. Setați înainte de apelul ExportToFilter
PDFVersion - nivelul de specificație PDF țintit de document. Implicit pdf17
Compressed - compresia fluxului HotPDF activată (implicit True). Puneți False pentru PDF-uri de diagnostic
CompressionLevel - nivel FlateDecode. Implicit clDefault
SetOutputStream(AStream) - redirecționează octeții PDF în AStream în loc să scrie pe disc. Apelați înainte de ExportToFilter. În interior se folosește un fișier temporar deoarece HotPDF salvează la EndDoc; octeții sunt trimiși înapoi în Finish
Flux tipic
Filter := TQRHotPDFExportFilter.Create('Report.pdf');
try
Filter.Title := 'Monthly Statement';
Filter.PDFVersion := pdf17;
QuickRep1.ExportToFilter(Filter);
finally
Filter.Free;
end;
Capabilități păstrate
Conținut vectorial și raster al paginii randat de fluxul standard de previzualizare / imprimare al QuickReport. Șiruri de text rezolvate prin GDI. Dimensionarea paginii urmează PaperWidth / PaperHeight transmise lui Start de QuickReport
Limitările punții bazate pe metafile
Deoarece paginile sunt capturate ca enhanced metafile, funcțiile PDF specifice QuickReport care au nevoie de informație structurală (câmpuri AcroForm, destinații denumite, schițe, porți de conformitate PDF/A sau PDF/X) nu sunt propagate. Ieșirea este o reproducere vizuală fidelă a ceea ce randă QuickReport, nu un PDF structurat
Notă de ambalare
Adaptorul se află în Lib\Addons\QuickReport\ și nu face parte din pachetele principale HotPDF*.dpk, astfel că dependența QuickReport este adusă doar de proiectele care optează pentru adaptor. Un test smoke (smoke_qr_hotpdf.dpr) se află lângă unitate
Vezi și: TfrxHotPDFExport, TppHotPDFDevice, dxHotPDFExportReportLink, THPDFPage.ShowMetafile, Suport EMF/WMF îmbunătățit
|