TfrxHotPDFExport

FastReport 4 / FastReport VCL adapter (Lib\Addons\FastReport4\frxHotPDFExport.pas)

 

QuickReport adapter  ReportBuilder device  DevExpress adapter

Filtr eksportu PDF FastReport 4 / FastReport VCL, który używa HotPDF jako bazowego backendu PDF zamiast wbudowanego writer PDF FastReport. Przeznaczony dla projektów, które już osadzają HotPDF i chcą jednego backendu PDF w całej aplikacji

 

Deklaracja Delphi:

type

  TfrxHotPDFExport = class(TfrxCustomExportFilter)

  published

    property Compressed: Boolean default True;

    property Title, Author, Subject, Keywords: string;

    property PDFVersion: TPDFVersType default pdf17;

    property CompressionLevel: TPDFCompressionLevel default clDefault;

    property RenderDPI: Integer default 200;

  end;

 

Opis

TfrxHotPDFExport dziedziczy po TfrxCustomExportFilter, więc pasuje do zwykłego workflow MyReport.Export(MyExportInstance) bez zmian w rdzeniu FastReport. Unit wywołuje RegisterComponents('FastReport 4.0 Export Filters', [TfrxHotPDFExport]), więc filtr pojawia się w palecie komponentów IDE po dodaniu unitu do pakietu

 

Zamiast ponownie implementować pełny per-object PDF emitter FastReport, adapter kieruje każdą przygotowaną stronę przez enhanced-metafile importer HotPDF:

 

1. Start tworzy świeżą instancję THotPDF i ustawia document metadata (Title / Author / Subject / Keywords / PDFVersion / Compression)

2. StartPage ustawia rozmiar nowej strony HotPDF w points, aby odpowiadał milimetrowym wymiarom strony raportu FastReport

3. ExportObject jest no-op (cała strona jest przechwytywana w czasie FinishPage, a nie per-object)

4. FinishPage renderuje przygotowaną stronę FastReport do TMetafile przez Report.PreviewPages.DrawPage, a następnie odtwarza metafile przez auto-scaling importer ShowEnhancedMetafile HotPDF

5. Finish wywołuje EndDoc i w razie potrzeby kopiuje tymczasowy PDF do Stream dostarczonego przez callera

 

Właściwości

Compressed - kompresja streamów HotPDF włączona (domyślnie True). Ustaw False dla diagnostycznych PDFs (~5x większe pliki)

Title / Author / Subject / Keywords - document metadata. Gdy Title jest puste, adapter używa fallbacku Report.Name, więc PDF zawsze ma niepusty tytuł

PDFVersion - poziom specyfikacji PDF, w który ma celować dokument. Domyślnie pdf17

CompressionLevel - poziom FlateDecode. Domyślnie clDefault

RenderDPI - pixel density używane podczas rasteryzacji strony FastReport przez TMetafileCanvas. Wyższe = ostrzejszy tekst i linie, ale większy metafile i PDF. 96 to natywne screen DPI FastReport; 200 (domyślnie) daje jakość druku bez ogromnych plików

 

Typowy przepływ pracy

 

Exp := TfrxHotPDFExport.Create(nil);

try

  Exp.FileName := 'Report.pdf';

  Exp.Title := 'Monthly Statement';

  Exp.PDFVersion := pdf17;

  Exp.RenderDPI := 200;

  frxReport1.Export(Exp);

finally

  Exp.Free;

end;

 

Zachowane możliwości

Zawartość strony vector i raster (tekst, linie, prostokąty, wypełnienia, bitmapy) renderowana przez standardowy layout engine FastReport. GDI-resolved text strings (HotPDF osadza fonts rozwiązane przez Windows przez zwykłą ścieżkę HotPDF font subset). Metadata na poziomie dokumentu

 

Ograniczenia mostka metafile

Ponieważ strony są przechwytywane jako enhanced metafiles, specyficzne dla FastReport funkcje PDF wymagające informacji strukturalnych (AcroForm fields, named destinations, document outlines, PDF/A lub PDF/X conformance gates) nie są propagowane. Wynik jest wierną wizualną reprodukcją tego, co FastReport renderuje na ekran / drukarkę, a nie strukturalnym PDF. Projekty wymagające wyjścia AcroForm lub zgodności PDF/A powinny sterować HotPDF bezpośrednio przez jego native API

 

Uwaga o pakietowaniu

Adapter znajduje się w Lib\Addons\FastReport4\ i nie jest częścią głównych pakietów HotPDF*.dpk, więc zależność FastReport jest pobierana tylko przez projekty, które świadomie włączają adapter. Smoke test (smoke_frx_hotpdf.dpr) znajduje się obok unitu

 

Zobacz też: TQRHotPDFExportFilter, TppHotPDFDevice, dxHotPDFExportReportLink, THPDFPage.ShowMetafile, Enhanced EMF/WMF Support