|
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á incorporam o 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 PDFACompliance: string;
property PDFXCompliance: string;
property Compressed: Boolean;
property CompressionLevel: TPDFCompressionLevel;
end;
Descrição
O TQRHotPDFExportFilter desce de TQRExportFilter, por isso encaixa no fluxo de trabalho normal MyReport.ExportToFilter(MyExporterInstance) sem qualquer alteração ao núcleo do QuickReport. Como o TQRExportFilter não é descendente de TComponent (é uma classe simples no desenho do QuickReport), não há registo de componentes no IDE - os chamadores instanciam TQRHotPDFExportFilter diretamente via Create('out.pdf')
O QuickReport renderiza cada página preparada num TMetafile em cache em QRPrinter.PageList. Em vez de reimplementar todo o conjunto de callbacks TextOut / AcceptGraphic / AcceptBand por componente, o adaptador ignora esses callbacks (overrides no-op) e colhe os metaficheiros por página no Finish:
1. Start(PaperWidth, PaperHeight, Font) - cria a instância THotPDF, define os metadados, chama BeginDoc e guarda (PaperWidth, PaperHeight) para que o Finish possa moldar as páginas corretamente
2. NewPage / EndPage / TextOut / AcceptGraphic - no-op (o metaficheiro já tem o conteúdo renderizado)
3. Finish - para cada metaficheiro em cache em QRPrinter.PageList[i], acrescenta (ou reutiliza) uma página HotPDF dimensionada para PaperWidth / PaperHeight em pontos e chama ShowEnhancedMetafile. Depois EndDoc e libertação
Propriedades
Title / Author / Subject / Keywords - metadados do documento. Quando Title está vazio, o adaptador recorre a Filename, para que o PDF tenha sempre um título não vazio. Definir antes de ExportToFilter ser chamado
PDFVersion - nível da especificação PDF a que o documento deve obedecer. A predefinição é pdf17
PDFACompliance e PDFXCompliance - encaminham para o PDF do relatório gerado os portões de conformidade com normas do HotPDF. Os chamadores continuam a preparar quaisquer perfis ICC, OutputIntent, tagging ou ativos de pré-impressão necessários através do fluxo de trabalho HotPDF normal antes de dependerem da declaração final de conformidade
Compressed - compressão de streams do HotPDF ligada (predefinição True). Defina False para PDFs de diagnóstico
CompressionLevel - nível FlateDecode. A predefinição é clDefault
SetOutputStream(AStream) - encaminha os bytes do PDF para AStream em vez de gravar em disco. Chamar antes de ExportToFilter. Internamente é usado um ficheiro temporário, porque o HotPDF grava no EndDoc; os bytes são devolvidos em stream no 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 das páginas renderizado pelo pipeline standard de pré-visualização / impressão do QuickReport. Strings de texto resolvidas por GDI. O dimensionamento das páginas segue o PaperWidth / PaperHeight entregues ao Start pelo QuickReport
Limitações da ponte de metaficheiro
Como as páginas são capturadas como enhanced metafiles, as funcionalidades PDF específicas do QuickReport que exigem informação estrutural (campos AcroForm, destinos nomeados e outlines) não são propagadas. As propriedades de portão PDF/A e PDF/X são encaminhadas para o HotPDF, mas ativos específicos de normas, como perfis de OutputIntent, continuam a ser responsabilidade do chamador. A saída é uma reprodução visual fiel do que o QuickReport renderiza, não um PDF estruturado
Nota de empacotamento
O adaptador vive em Lib\Addons\QuickReport\ e não faz parte dos pacotes principais HotPDF*.dpk, pelo que a dependência QuickReport só é trazida por projetos que optem pelo adaptador. Um teste smoke (smoke_qr_hotpdf.dpr) vive ao lado da unidade
Ver também: TfrxHotPDFExport, TppHotPDFDevice, dxHotPDFExportReportLink, THPDFPage.ShowMetafile, Suporte EMF/WMF melhorado
|