TQRHotPDFExportFilter

QuickReport adapter (Lib\Addons\QuickReport\qrHotPDFExport.pas)

 

FastReport adapter  ReportBuilder device  DevExpress adapter

Filtr eksportu QuickReport, który używa HotPDF jako bazowego backendu PDF zamiast własnego QRPDFFilter QuickReport. Przeznaczony dla projektów, które już osadzają HotPDF i chcą jednego backendu PDF w całej aplikacji

 

Deklaracja Delphi:

type

  TQRHotPDFExportFilter = class(TQRExportFilter)

  public

    constructor Create(Filename: string); override;

    procedure SetOutputStream(AStream: TStream);

    property Title, Author, Subject, Keywords: string;

    property PDFVersion: TPDFVersType;

    property Compressed: Boolean;

    property CompressionLevel: TPDFCompressionLevel;

  end;

 

Opis

TQRHotPDFExportFilter dziedziczy po TQRExportFilter, więc pasuje do zwykłego workflow MyReport.ExportToFilter(MyExporterInstance) bez zmian w rdzeniu QuickReport. Ponieważ TQRExportFilter nie jest potomkiem TComponent (to zwykła klasa w projekcie QuickReport), nie ma rejestracji komponentu IDE - callers tworzą TQRHotPDFExportFilter bezpośrednio przez Create('out.pdf')

 

QuickReport renderuje każdą przygotowaną stronę do TMetafile cacheowanego w QRPrinter.PageList. Zamiast ponownie implementować cały zestaw callbacków per-component TextOut / AcceptGraphic / AcceptBand, adapter ignoruje je (no-op overrides) i zbiera metafiles per-page w Finish:

 

1. Start(PaperWidth, PaperHeight, Font) - tworzy instancję THotPDF, ustawia metadata, wywołuje BeginDoc i zapisuje (PaperWidth, PaperHeight), aby Finish mogło poprawnie ukształtować strony

2. NewPage / EndPage / TextOut / AcceptGraphic - no-op (metafile już zawiera wyrenderowaną zawartość)

3. Finish - dla każdego cacheowanego metafile QRPrinter.PageList[i] dodaje (lub ponownie używa) stronę HotPDF o rozmiarze PaperWidth / PaperHeight w points i wywołuje ShowEnhancedMetafile. Następnie EndDoc i zwolnienie

 

Właściwości

Title / Author / Subject / Keywords - document metadata. Gdy Title jest puste, adapter używa fallbacku Filename, więc PDF zawsze ma niepusty tytuł. Ustaw przed wywołaniem ExportToFilter

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

Compressed - kompresja streamów HotPDF włączona (domyślnie True). Ustaw False dla diagnostycznych PDFs

CompressionLevel - poziom FlateDecode. Domyślnie clDefault

SetOutputStream(AStream) - kieruje PDF bytes do AStream zamiast zapisywać na dysk. Wywołaj przed ExportToFilter. Wewnętrznie używany jest plik tymczasowy, ponieważ HotPDF zapisuje przy EndDoc; bytes są streamowane z powrotem w Finish

 

Typowy przepływ pracy

 

Filter := TQRHotPDFExportFilter.Create('Report.pdf');

try

  Filter.Title := 'Monthly Statement';

  Filter.PDFVersion := pdf17;

  QuickRep1.ExportToFilter(Filter);

finally

  Filter.Free;

end;

 

Zachowane możliwości

Zawartość strony vector i raster renderowana przez standardowy preview / printer pipeline QuickReport. GDI-resolved text strings. Rozmiar strony podąża za PaperWidth / PaperHeight przekazanymi do Start przez QuickReport

 

Ograniczenia mostka metafile

Ponieważ strony są przechwytywane jako enhanced metafiles, specyficzne dla QuickReport 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 QuickReport, a nie strukturalnym PDF

 

Uwaga o pakietowaniu

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

 

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