|
TppHotPDFDevice ReportBuilder adapter (
|
FastReport adapter QuickReport adapter DevExpress adapter |
|
Klasa device ReportBuilder, która używa HotPDF jako bazowego backendu PDF zamiast własnego ppPDFDevice ReportBuilder. Przeznaczona dla projektów, które już osadzają HotPDF i chcą jednego backendu PDF w całej aplikacji
Deklaracja 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;
Opis TppHotPDFDevice dziedziczy po TppGraphicsDevice (jeden poziom powyżej TppCustomScreenDevice / TppImageDevice), więc pasuje do device chain ReportBuilder po przypisaniu do TppReport.PrinterDevice lub użyciu jako publisher device w TppPublisher. DeviceName zgłasza się jako 'HotPDF'. Ponieważ rejestracja device w ReportBuilder odbywa się przez ppRptDeviceMap, a nie RegisterComponents, nie ma wpisu w palecie komponentów IDE - callers tworzą TppHotPDFDevice bezpośrednio
Każda strona przechodząca przez TppGraphicsDevice.ReceivePage jest rysowana na tymczasowym TMetafileCanvas (tworzonym w BeforeRenderPage i finalizowanym w AfterRenderPage). Przechwycony TMetafile jest następnie przekazywany do auto-scaling importer ShowEnhancedMetafile HotPDF:
1. StartJob tworzy instancję THotPDF, ustawia metadata i wywołuje BeginDoc 2. BeforeRenderPage tworzy TMetafile o rozmiarze spWidth x spHeight oraz TMetafileCanvas i ustawia go jako odziedziczony Canvas 3. RenderPage (odziedziczone) przechodzi przez DrawCommands i kieruje je przez GraphicsContext na nasz metafile canvas 4. AfterRenderPage finalizuje metafile (zwalnia canvas), dodaje nową stronę HotPDF o rozmiarze mmWidth x mmHeight (przeliczonym na PDF points) i odtwarza metafile przez ShowEnhancedMetafile 5. EndJob wywołuje HotPDF.EndDoc; jeśli output jest Stream, kopiuje bytes z pliku tymczasowego zapisanego wewnętrznie
Właściwości
Title / Author / Subject / Keywords - document metadata. Gdy Title jest puste, device używa fallbacku FileName, więc PDF zawsze ma niepusty tytuł PDFVersion - poziom specyfikacji PDF, w który ma celować dokument. Domyślnie pdf17
SetOutputStream(AStream) - kieruje PDF bytes do AStream zamiast zapisywać na dysk. Wywołaj przed uruchomieniem StartJob przez report
Typowy przepływ pracy
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;
Zachowane możliwości Zawartość strony vector i raster renderowana przez standardowy draw-command pipeline ReportBuilder. GDI-resolved text strings. Domyślne 200 DPI metafile capture (konfigurowalne przez odziedziczone PixelsPerInch) daje jakość druku bez ogromnych plików
Ograniczenia mostka metafile Ponieważ strony są przechwytywane jako enhanced metafiles, specyficzne dla ReportBuilder funkcje PDF wymagające informacji strukturalnych (AcroForm fields, named destinations, outlines, PDF/A lub PDF/X conformance gates) nie są propagowane. Wynik jest wierną wizualną reprodukcją tego, co renderuje ReportBuilder, a nie strukturalnym PDF
Uwaga o pakietowaniu Device znajduje się w Lib\Addons\ReportBuilder\ i nie jest częścią głównych pakietów HotPDF*.dpk, więc zależność ReportBuilder jest pobierana tylko przez projekty, które świadomie włączają device. Smoke test (smoke_pp_hotpdf.dpr) znajduje się obok unitu
Zobacz też: TfrxHotPDFExport, TQRHotPDFExportFilter, dxHotPDFExportReportLink, THPDFPage.ShowMetafile, Enhanced EMF/WMF Support |