TppHotPDFDevice (ReportBuilder adapter)

Adaptér ReportBuilder (Lib\Addons\ReportBuilder\ppHotPDFDevice.pas)

 

FastReport adapter  QuickReport adapter  DevExpress adapter

Třída device pro ReportBuilder, která používá HotPDF jako podkladové PDF jádro místo vlastního ppPDFDevice z ReportBuilder. Je určená pro projekty, které už HotPDF používají a chtějí jednotné PDF jádro napříč celou aplikací

 

Deklarace Delphi:

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;

 

Popis

TppHotPDFDevice dědí z TppGraphicsDevice (jednu úroveň nad TppCustomScreenDevice / TppImageDevice), takže zapadá do device chain ReportBuilder při přiřazení do TppReport.PrinterDevice nebo při použití jako publisher device na TppPublisher. DeviceName se hlásí jako 'HotPDF'. Protože registrace device v ReportBuilder probíhá přes ppRptDeviceMap místo RegisterComponents, nevzniká záznam v paletě komponent IDE - volající vytvářejí TppHotPDFDevice přímo

 

Každá stránka procházející přes TppGraphicsDevice.ReceivePage se vykreslí na dočasný TMetafileCanvas (vytvořený v BeforeRenderPage, finalizovaný v AfterRenderPage). Zachycený TMetafile se pak předá automaticky škálujícímu importeru HotPDF ShowEnhancedMetafile:

 

1. StartJob vytvoří instanci THotPDF, nastaví metadata a zavolá BeginDoc

2. BeforeRenderPage vytvoří TMetafile o velikosti spWidth x spHeight plus TMetafileCanvas a nastaví jej jako zděděný Canvas

3. RenderPage (zděděné) prochází DrawCommands a směruje je přes GraphicsContext na náš metafile canvas

4. AfterRenderPage finalizuje metafile (uvolní canvas), přidá novou stránku HotPDF o velikosti mmWidth x mmHeight (převedeno na body PDF) a přehraje metafile přes ShowEnhancedMetafile

5. EndJob zavolá HotPDF.EndDoc; pokud je výstup stream, zkopíruje bajty z dočasného souboru zapsaného interně

 

Vlastnosti

FileName - cílová cesta PDF. Použije se, pokud SetOutputStream nenainstaloval stream

Title / Author / Subject / Keywords - metadata dokumentu. Když je Title prázdné, device použije jako fallback FileName, takže PDF má vždy neprázdný titul

PDFVersion - úroveň specifikace PDF, na kterou má dokument cílit. Výchozí hodnota je pdf17

Compressed - zapne kompresi streamů HotPDF (výchozí True). Nastavte False pro diagnostická PDF

CompressionLevel - úroveň FlateDecode. Výchozí hodnota je clDefault

SetOutputStream(AStream) - směruje bajty PDF do AStream místo zápisu na disk. Zavolejte před tím, než report vyvolá StartJob

 

Typický pracovní postup

 

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;

 

Zachované schopnosti

Vektorový a rastrový obsah stránky vykreslený standardní draw-command pipeline ReportBuilder. Textové řetězce vyřešené přes GDI. Výchozí 200 DPI zachycení metafile (konfigurovatelné přes zděděné PixelsPerInch) poskytuje tiskovou kvalitu bez obrovských souborů

 

Omezení bridge přes metafile

Protože stránky jsou zachycené jako enhanced metafiles, PDF funkce specifické pro ReportBuilder, které vyžadují strukturální informace (pole AcroForm, pojmenované cíle, outlines, brány shody PDF/A nebo PDF/X), se nepřenášejí. Výstup je věrná vizuální reprodukce toho, co ReportBuilder vykreslí, ne strukturované PDF

 

Poznámka k balení

Device je umístěný v Lib\Addons\ReportBuilder\ a není součástí hlavních balíčků HotPDF*.dpk, takže závislost ReportBuilder si přitáhnou jen projekty, které se pro device výslovně rozhodnou. Smoke test (smoke_pp_hotpdf.dpr) je uložený vedle jednotky

 

Viz také: TfrxHotPDFExport, TQRHotPDFExportFilter, dxHotPDFExportReportLink, THPDFPage.ShowMetafile, Enhanced EMF/WMF – podpora