TQRHotPDFExportFilter

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

 

Adapter FastReport  Dispositivo ReportBuilder  Adapter DevExpress

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

 

Delphi declaration:

type

  TQRHotPDFExportFilter =class(TQRExportFilter)

  public

    constructor Create(Filename: string);override;

    procedure SetOutputStream(AStream: TStream);

    property Title, Author, Subject, Keywords: string;

    property PDFVersion: TPDFVersType;

    property PDFACompliance: string;

    property PDFXCompliance: string;

    property Compressed: Boolean;

    property CompressionLevel: TPDFCompressionLevel;

  end;

 

Descrição

TQRHotPDFExportFilter descende de TQRExportFilter, de modo que se encaixa no fluxo regular de MyReport.ExportToFilter(MyExporterInstance) sem qualquer mudança no núcleo do QuickReport. Como TQRExportFilter não é descendente de TComponent (é uma classe simples no design do QuickReport), não há registro de componente no IDE — os chamadores instanciam TQRHotPDFExportFilter diretamente via Create('out.pdf').

 

O QuickReport renderiza cada página preparada em um TMetafile guardado em cache em QRPrinter.PageList. Em vez de reimplementar todo o conjunto de callbacks TextOut / AcceptGraphic / AcceptBand por componente, o adapter os ignora (sobrescritas no-op) e colhe os metafiles por página em Finish:

 

1. Start(PaperWidth, PaperHeight, Font) — crie a instância THotPDF, defina os metadados, chame BeginDoc e salve (PaperWidth, PaperHeight) para que Finish possa dispor as páginas corretamente.

2. NewPage / EndPage / TextOut / AcceptGraphic — no-op (o metafile já tem o conteúdo renderizado).

3. Finish — para cada metafile QRPrinter.PageList[i] em cache, adicione (ou reutilize) uma página HotPDF dimensionada para PaperWidth / PaperHeight em pontos e chame ShowEnhancedMetafile. Depois EndDoc e libere.

 

Properties

Title / Author / Subject / Keywords - metadados do documento. Quando Title está vazio, o adapter recai em Filename, de modo que o PDF sempre tenha um título não vazio. Defina antes de ExportToFilter ser chamado.

PDFVersion - nível da especificação PDF que o documento deve mirar. Padrão: pdf17.

PDFACompliance e PDFXCompliance - encaminham os gates de conformidade com padrões do HotPDF para o PDF do relatório gerado. Os chamadores ainda preparam qualquer perfil ICC, OutputIntent, tagging ou ativo de prepress necessário pelo fluxo normal do HotPDF antes de confiar na reivindicação final de conformidade.

Compressed - compressão de stream do HotPDF ligada (padrão True). Defina False para PDFs de diagnóstico.

CompressionLevel - nível de FlateDecode. Padrão: clDefault.

SetOutputStream(AStream) - encaminha os bytes do PDF para AStream em vez de gravar no disco. Chame antes de ExportToFilter. Internamente um arquivo temporário é usado 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;

  Filter.PDFACompliance := '3B';

  QuickRep1.ExportToFilter(Filter);

finally

  Filter.Free;

end

 

Capacidades preservadas

Conteúdo vetorial e raster de páginas renderizado pelo pipeline padrão de preview / impressão do QuickReport. Strings de texto resolvidas por GDI. O dimensionamento das páginas segue o PaperWidth / PaperHeight entregue a Start pelo QuickReport.

 

Limitações da ponte de metafile

Como as páginas são capturadas como enhanced metafiles, as features PDF específicas do QuickReport que exigem informação estrutural (campos AcroForm, destinos nomeados e outlines) não são propagadas. As propriedades de gate PDF/A e PDF/X são encaminhadas ao HotPDF, mas ativos específicos de padrões, como perfis de OutputIntent, permanecem responsabilidade do chamador. A saída é uma reprodução visual fiel do que o QuickReport renderiza, não um PDF estruturado.

 

Nota sobre empacotamento

O adapter vive em Lib\Addons\QuickReport\ e não faz parte dos packages principais de HotPDF*.dpk, de modo que a dependência do QuickReport só é puxada por projetos que ativam o adapter. Um smoke test (smoke_qr_hotpdf.dpr) vive junto com a unidade.

 

See also: TfrxHotPDFExport, TppHotPDFDevice, dxHotPDFExportReportLink, THPDFPage.ShowMetafile, Suporte aprimorado a EMF/WMF