TppHotPDFDevice

ReportBuilder adapter (Lib\Addons\ReportBuilder\ppHotPDFDevice.pas)

 

FastReport adapter  QuickReport adapter  DevExpress adapter

Trieda zariadenia ReportBuilder, ktorá používa HotPDF ako základný PDF backend namiesto vlastného ppPDFDevice ReportBuildera. Určená pre projekty, ktoré už HotPDF vkladajú a chcú jeden PDF backend naprieč celou aplikáciou

 

Delphi declaration:

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;

 

Opis

TppHotPDFDevice dedí z TppGraphicsDevice (o úroveň vyššie než TppCustomScreenDevice / TppImageDevice), takže sa zapája do reťazca zariadení ReportBuildera, keď sa priradí k TppReport.PrinterDevice alebo použije ako publisher device na TppPublisher. DeviceName sa hlási ako 'HotPDF'. Keďže registrácia zariadenia v ReportBuilderi prebieha cez ppRptDeviceMap a nie cez RegisterComponents, v palete komponentov IDE nie je žiadna položka - volajúci vytvoria TppHotPDFDevice priamo

 

Každá stránka, ktorá prejde cez TppGraphicsDevice.ReceivePage, sa vykreslí na dočasný TMetafileCanvas (vytvorený v BeforeRenderPage, finalizovaný v AfterRenderPage). Zachytený TMetafile sa potom odovzdá automatickému importéru HotPDF ShowEnhancedMetafile s automatickým škálovaním:

 

1. StartJob vytvorí inštanciu THotPDF, nastaví metadáta a zavolá BeginDoc

2. BeforeRenderPage vytvorí TMetafile s rozmermi spWidth x spHeight spolu s TMetafileCanvas a nastaví ho ako zdedené Canvas

3. RenderPage (zdedené) prejde DrawCommands a nasmeruje ich cez GraphicsContext na naše metafile canvas

4. AfterRenderPage dokončí metafile (uvoľní canvas), pridá novú stranu HotPDF s rozmermi mmWidth x mmHeight prepočítanými na body PDF a prehrá metafile cez ShowEnhancedMetafile

5. EndJob zavolá HotPDF.EndDoc; ak je výstup Stream, skopíruje bajty z dočasného súboru zapísaného interne

 

Vlastnosti

FileName - target PDF path. Used unless SetOutputStream has installed a stream.

Title / Author / Subject / Keywords - metadáta dokumentu. Keď je Title prázdny, zariadenie sa vráti na FileName, takže PDF má vždy neprázdny názov

PDFVersion - úroveň špecifikácie PDF, na ktorú má dokument cieliť. Predvolené je pdf17

Compressed - zapína kompresiu prúdu HotPDF (predvolene True). Nastavte False pre diagnostické PDF

CompressionLevel - FlateDecode level. Defaults to clDefault.

SetOutputStream(AStream) - nasmeruje bajty PDF do AStream namiesto zápisu na disk. Zavolajte pred tým, než report spustí StartJob

 

Typical workflow

 

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;

 

Capabilities preserved

Vektorový aj rastrový obsah strany vykreslený štandardným draw-command pipeline ReportBuildera. Textové reťazce vyriešené cez GDI. Predvolené zachytávanie metafile pri 200 DPI (konfigurovateľné cez zdedené PixelsPerInch) dáva výstup v kvalite na tlač bez obrovských súborov

 

Limitations of the metafile bridge

Keďže strany sa zachytávajú ako enhanced metafiles, funkcie PDF špecifické pre ReportBuilder, ktoré vyžadujú štrukturálne informácie (polia AcroForm, pomenované ciele, osnovy, brány zhody PDF/A alebo PDF/X), sa neprenášajú. Výstup je verným vizuálnym zobrazením toho, čo ReportBuilder vykreslí, nie štruktúrované PDF

 

Packaging note

Zariadenie žije v Lib\Addons\ReportBuilder\ a nie je súčasťou hlavných balíkov HotPDF*.dpk, takže závislosť ReportBuilder sa pridá len do projektov, ktoré sa k zariadeniu prihlásia. Smoke test (smoke_pp_hotpdf.dpr) je uložený vedľa jednotky

 

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