|
Exportní filtr QuickReport, který místo vlastního QRPDFFilter používá HotPDF jako podkladový PDF backend
Je určen pro projekty, které už HotPDF vkládají a chtějí jeden PDF backend napříč celou aplikací
Deklarace 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;
Popis
TQRHotPDFExportFilter dědí z TQRExportFilter, takže zapadá do běžného workflow MyReport.ExportToFilter(MyExporterInstance) bez změn jádra QuickReport
Protože TQRExportFilter není potomek TComponent (v návrhu QuickReport jde o obyčejnou třídu), neprobíhá žádná registrace komponenty v IDE; volající vytvářejí TQRHotPDFExportFilter přímo pomocí Create('out.pdf')
QuickReport vykreslí každou připravenou stránku do TMetafile uloženého v QRPrinter.PageList
Místo znovuimplementování celé sady callbacků TextOut / AcceptGraphic / AcceptBand pro jednotlivé komponenty je adaptér ignoruje (no-op override) a v Finish načte metasoubory jednotlivých stránek:
1. Start(PaperWidth, PaperHeight, Font) - vytvoří instanci THotPDF, nastaví metadata, zavolá BeginDoc a uloží (PaperWidth, PaperHeight), aby Finish mohl stránky správně tvarovat
2. NewPage / EndPage / TextOut / AcceptGraphic - no-op, protože metasoubor už obsahuje vykreslený obsah
3. Finish - pro každý uložený metasoubor QRPrinter.PageList[i] přidá (nebo znovu použije) stránku HotPDF o velikosti PaperWidth / PaperHeight v bodech a zavolá ShowEnhancedMetafile, poté EndDoc a uvolnění
Vlastnosti
Title / Author / Subject / Keywords - metadata dokumentu; když je Title prázdný, adaptér použije Filename, aby PDF vždy mělo neprázdný titul; nastavte před voláním ExportToFilter
PDFVersion - úroveň specifikace PDF, na kterou má dokument cílit; výchozí je pdf17
Compressed - zapnutí komprese streamů HotPDF (výchozí True); pro diagnostická PDF nastavte False
CompressionLevel - úroveň FlateDecode; výchozí je clDefault
SetOutputStream(AStream) - směruje bajty PDF do AStream místo zápisu na disk; volejte před ExportToFilter; interně se používá dočasný soubor, protože HotPDF ukládá při EndDoc, a bajty se vracejí do streamu v Finish
Typické workflow
Filter := TQRHotPDFExportFilter.Create('Report.pdf');
try
Filter.Title := 'Monthly Statement';
Filter.PDFVersion := pdf17;
QuickRep1.ExportToFilter(Filter);
finally
Filter.Free;
end;
Zachované schopnosti
Vektorový a rastrový obsah stránek vykreslený standardní preview / printer pipeline QuickReport
Textové řetězce vyřešené přes GDI
Velikost stránky se řídí hodnotami PaperWidth / PaperHeight, které QuickReport předá metodě Start
Omezení mostu přes metasoubory
Protože se stránky zachytávají jako rozšířené metasoubory, PDF funkce specifické pro QuickReport, které vyžadují strukturální informace (pole AcroForm, pojmenované cíle, osnovy, brány souladu PDF/A nebo PDF/X), se nepřenášejí
Výstup je věrná vizuální reprodukce toho, co QuickReport vykreslí, nikoli strukturované PDF
Poznámka k balení
Adaptér je uložen v Lib\Addons\QuickReport\ a není součástí hlavních balíčků HotPDF*.dpk, takže závislost QuickReport se přitáhne pouze do projektů, které se pro adaptér rozhodnou
Smoke test (smoke_qr_hotpdf.dpr) je umístěn vedle jednotky
Viz také: TfrxHotPDFExport, TppHotPDFDevice, dxHotPDFExportReportLink, THPDFPage.ShowMetafile, Rozšířená podpora EMF/WMF
|