TQRHotPDFExportFilter

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

 

FastReport adapter  ReportBuilder device  DevExpress adapter

Filtro de exportação QuickReport que usa HotPDF como backend PDF subjacente em vez do QRPDFFilter próprio do QuickReport. Destina-se a projetos que já incorporam HotPDF e querem um único backend PDF em toda a aplicação

 

Declaração 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;

 

Descrição

TQRHotPDFExportFilter descende de TQRExportFilter, portanto encaixa no fluxo normal MyReport.ExportToFilter(MyExporterInstance) sem mudanças no núcleo do QuickReport. Como TQRExportFilter não é descendente de TComponent (é uma classe comum no design do QuickReport), não há registro de componente na IDE; os chamadores instanciam TQRHotPDFExportFilter diretamente via Create('out.pdf')

 

O QuickReport renderiza cada página preparada em um TMetafile armazenado em QRPrinter.PageList. Em vez de reimplementar todo o conjunto de callbacks TextOut / AcceptGraphic / AcceptBand por componente, o adaptador ignora esses callbacks (sobrescritas sem efeito) e coleta os metafiles por página em Finish:

 

1. Start(PaperWidth, PaperHeight, Font) - cria a instância THotPDF, define metadados, chama BeginDoc e salva (PaperWidth, PaperHeight) para que Finish possa dimensionar as páginas corretamente

2. NewPage / EndPage / TextOut / AcceptGraphic - no-op (the metafile already has the rendered content).

3. Finish - para cada metafile QRPrinter.PageList[i] em cache, adiciona (ou reutiliza) uma página HotPDF dimensionada para PaperWidth / PaperHeight em pontos e chama ShowEnhancedMetafile. Depois chama EndDoc e libera

 

Propriedades

Title / Author / Subject / Keywords - metadados do documento. Quando Title está vazio, o adaptador usa Filename como fallback para que o PDF sempre tenha um título não vazio. Defina antes de chamar ExportToFilter

PDFVersion - PDF specification level the document should target. Defaults to pdf17.

Compressed - Compressão de fluxo do HotPDF ativada (padrão True). Set False for diagnostic PDFs.

CompressionLevel - Nível de FlateDecode. O padrão é clDefault.

SetOutputStream(AStream) - direciona os bytes do PDF para AStream em vez de gravar em disco. Chame antes de ExportToFilter. Internamente é usado um arquivo temporário porque o HotPDF salva em EndDoc; os bytes são transmitidos de volta em Finish

 

Fluxo de trabalho típico

 

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

try

  Filter.Title := 'Monthly Statement';

  Filter.PDFVersion := pdf17;

  QuickRep1.ExportToFilter(Filter);

finally

  Filter.Free;

end;

 

Capacidades preservadas

Vector and raster page content rendered by QuickReport's standard preview / printer pipeline. GDI-resolved text strings. Page sizing follows the PaperWidth / PaperHeight handed to Start by QuickReport.

 

Limitações da ponte de metafile

Como as páginas são capturadas como metafiles avançados, recursos PDF específicos do QuickReport que exigem informação estrutural (campos AcroForm, destinos nomeados, outlines, gates de conformidade PDF/A ou PDF/X) não são propagados. A saída é uma reprodução visual fiel do que o QuickReport renderiza, não um PDF estruturado

 

Nota de empacotamento

O adaptador fica em Lib\Addons\QuickReport\ e não faz parte dos pacotes principais HotPDF*.dpk, portanto a dependência QuickReport só é puxada por projetos que optam pelo adaptador. Um teste smoke (smoke_qr_hotpdf.dpr) fica junto da unit

 

Veja também: TfrxHotPDFExport, TppHotPDFDevice, dxHotPDFExportReportLink, THPDFPage.ShowMetafile, Enhanced EMF/WMF Support