|
TppHotPDFDevice ReportBuilder adapter (
|
FastReport adapter QuickReport adapter DevExpress adapter |
|
ReportBuilder device class som använder HotPDF som underliggande PDF-backend i stället för ReportBuilders egen ppPDFDevice. Avsedd för projekt som redan bäddar in HotPDF och vill ha en enda PDF-backend i hela applikationen
Delphi-deklaration: 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;
Beskrivning TppHotPDFDevice ärver från TppGraphicsDevice (en nivå ovanför TppCustomScreenDevice / TppImageDevice), så den passar in i ReportBuilders device chain när den tilldelas TppReport.PrinterDevice eller används som publisher device på en TppPublisher. DeviceName rapporteras som 'HotPDF'. Eftersom device registration i ReportBuilder görs via ppRptDeviceMap i stället för RegisterComponents finns ingen IDE component palette entry - callers skapar TppHotPDFDevice direkt
Varje sida som kommer genom TppGraphicsDevice.ReceivePage ritas på en transient TMetafileCanvas (skapad i BeforeRenderPage, finaliserad i AfterRenderPage). Den fångade TMetafile matas sedan till HotPDFs ShowEnhancedMetafile auto-scaling importer:
1. StartJob skapar THotPDF-instansen, sätter metadata och anropar BeginDoc 2. BeforeRenderPage skapar en TMetafile med storleken spWidth x spHeight plus en TMetafileCanvas och sätter den som ärvd Canvas 3. RenderPage (ärvd) går igenom DrawCommands och dirigerar dem via GraphicsContext till vår metafile canvas 4. AfterRenderPage finaliserar metafilen (frigör canvas), lägger till en ny HotPDF-sida med storleken mmWidth x mmHeight (konverterad till PDF points) och spelar metafilen via ShowEnhancedMetafile 5. EndJob anropar HotPDF.EndDoc; om output är en Stream kopieras bytes från den temporära fil som skrivits internt
Egenskaper
Title / Author / Subject / Keywords - document metadata. När Title är tom faller devicen tillbaka till FileName, så PDF:en alltid har en icke-tom titel PDFVersion - PDF-specifikationsnivån som dokumentet ska rikta sig mot. Standard är pdf17
SetOutputStream(AStream) - skickar PDF bytes till AStream i stället för att skriva till disk. Anropa innan rapporten utlöser StartJob
Typiskt arbetsflöde
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;
Bevarade funktioner Vector- och raster page content renderat av ReportBuilders standard draw-command pipeline. GDI-resolved text strings. Standard 200 DPI metafile capture (konfigurerbart via ärvda PixelsPerInch) ger utskriftskvalitet utan enorma filer
Begränsningar i metafile-bryggan Eftersom sidor fångas som enhanced metafiles propageras inte ReportBuilder-specifika PDF-funktioner som kräver strukturell information (AcroForm fields, named destinations, outlines, PDF/A eller PDF/X conformance gates). Utdata är en trogen visuell återgivning av vad ReportBuilder renderar, inte en strukturerad PDF
Paketeringsanteckning Devicen finns i Lib\Addons\ReportBuilder\ och är inte del av huvudpaketen HotPDF*.dpk, så ReportBuilder-beroendet dras bara in av projekt som aktivt väljer devicen. Ett smoke test (smoke_pp_hotpdf.dpr) finns bredvid uniten
Se även: TfrxHotPDFExport, TQRHotPDFExportFilter, dxHotPDFExportReportLink, THPDFPage.ShowMetafile, Enhanced EMF/WMF Support |