TQRHotPDFExportFilter (adaptér QuickReport)

Adaptér QuickReport (Lib\Addons\QuickReport\qrHotPDFExport.pas)

 

Adaptér FastReport  Zařízení ReportBuilder  Adaptér DevExpress

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