|
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 PDFACompliance: string;
property PDFXCompliance: string;
property Compressed: Boolean;
property CompressionLevel: TPDFCompressionLevel;
property RenderMode: TppHotPDFRenderMode;
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 poté buď přehraje metafile přes ShowEnhancedMetafile, nebo nativně vysílá podporované draw commands, když RenderMode má hodnotu hprmNativeDrawCommands
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
PDFACompliance a PDFXCompliance - propustí brány shody HotPDF s normami do generovaného reportového PDF. Požadovaný ICC profil, OutputIntent, tagování nebo tiskové předlohy si volající pořád připraví běžným pracovním postupem HotPDF dřív, než se spolehne na finální tvrzení o shodě.
Compressed - zapne kompresi streamů HotPDF (výchozí True). Nastavte False pro diagnostická PDF
CompressionLevel - úroveň FlateDecode. Výchozí hodnota je clDefault
RenderMode - výchozí hprmPageMetafile pro původní vizuální most. Nastavte hprmNativeDrawCommands, aby se podporované draw commands ReportBuilder mapovaly přímo na textové, vektorové, obrazové a URI link operace HotPDF. Stránky s nepodporovanými commands automaticky spadnou zpět na most přes metafile
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;
Dev.PDFACompliance := '3B';
Dev.RenderMode := hprmNativeDrawCommands;
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ů. Nativní režim draw commands mapuje běžné commands textu, tvarů, čar, obrázků a URI hypertextových odkazů přímo na stránkové operace HotPDF, když stránka obsahuje jen podporované commands
Omezení bridge přes metafile
Protože stránky jsou zachycené jako enhanced metafiles, funkce PDF specifické pro ReportBuilder vyžadující strukturální informace (pole AcroForm, pojmenované cíle a osnovy) se nepřenášejí. Vlastnosti bran PDF/A a PDF/X se přeposílají do HotPDF, ale předměty specifické pro normy, jako profily OutputIntent, zůstávají v odpovědnosti volajícího.
Nativní režim draw commands v současnosti pokrývá běžnou sadu draw commands ReportBuilder a záměrně spadne zpět na most přes metafile u stránek s nepodporovanými commands, jako jsou složité vlastní renderery nebo gradienty; zachová tak vizuální výstup místo částečně vyslané stránky.
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
|