|
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
|