dxHotPDFExportReportLink

Adapter do DevExpress ExpressPrinting System (Lib\Addons\DevExpress\dxHotPDFExport.pas)

 

Adapter FastReport  Adapter QuickReport  Dispositivo ReportBuilder

Adapter de exportação PDF do DevExpress ExpressPrinting System (XtraPrinting / XtraReports / links imprimíveis cxGrid / e similares) que usa o HotPDF como backend PDF subjacente em vez do emissor dxPSExportToPDF / TdxPSPDFExport da própria DevExpress. Destinado a projetos que já embutem o HotPDF e querem um único backend PDF em toda a aplicação.

 

Options record:

type

  TdxHotPDFExportOptions =record

    Title, Author, Subject, Keywords: string;

    PDFVersion : TPDFVersType;  // default pdf17

    PDFACompliance: string;

    PDFXCompliance: string;

    Compression: TPDFCompressionLevel;  // default clDefault

    RenderDPI  : Integer;  // default 200

  end;

 

function dxHotPDFDefaultOptions: TdxHotPDFExportOptions;

 

Pontos de entrada baseados em arquivo:

function dxHotPDFExportReportLinkToFile(

  AReportLink: TBasedxReportLink;

  const AOutputFileName: string;

  const AOptions: TdxHotPDFExportOptions): Boolean;overload;

function dxHotPDFExportReportLinkToFile(

  AReportLink: TBasedxReportLink;

  const AOutputFileName: string): Boolean;overload;

 

Pontos de entrada baseados em stream:

function dxHotPDFExportReportLinkToStream(

  AReportLink: TBasedxReportLink;

  AOutputStream: TStream;

  const AOptions: TdxHotPDFExportOptions): Boolean;overload;

function dxHotPDFExportReportLinkToStream(

  AReportLink: TBasedxReportLink;

  AOutputStream: TStream): Boolean;overload;

 

Descrição

O sistema de impressão da DevExpress gira em torno de TBasedxReportLink — o link abstrato que conecta um componente imprimível (cxGrid, cxRichEdit, cxScheduler, cxPivotGrid e similares) a um TdxComponentPrinter. O printer / link compõe as páginas e depois expõe um método protegido PaintPage(ACanvas, APageBounds, APageIndex, AContinuousIndex, AZoomFactor) que desenha uma única página em qualquer TCanvas.

 

Este adapter espelha o loop do próprio TdxPSPDFReportExportProvider.Build da DevExpress, mas em vez de encaminhar a saída do PaintPage para um canvas PDF da DevExpress, encaminha-a para um TMetafileCanvas. O metafile resultante é então alimentado ao importador auto-escalável ShowEnhancedMetafile do HotPDF:

 

1. O chamador invoca dxHotPDFExportReportLinkToFile ou dxHotPDFExportReportLinkToStream com o TBasedxReportLink preparado.

2. O adapter chama AReportLink.RebuildReport para compor as páginas.

3. Para cada índice de página, pede o RenderInfo.GetActualPageRenderInfo ao link, calcula o tamanho da página em pontos PDF (usando a razão PointsPerInch / UnitsPerInch da própria DevExpress), constrói um TMetafile no DPI de renderização escolhido e renderiza a página por meio de PaintPage(MetaCanvas, ...).

4. Uma nova página HotPDF é adicionada (ou a primeira página auto-criada é reutilizada), dimensionada para as dimensões em pontos calculadas, e o metafile é reproduzido via ShowEnhancedMetafile.

5. HotPDF.EndDoc grava o PDF; para as sobrecargas em stream, o arquivo temporário é então copiado para o TStream fornecido pelo chamador.

 

Opções

Title / Author / Subject / Keywords - metadados do documento. Quando Title está vazio, o adapter recai em AReportLink.ReportTitle.Text e depois em AReportLink.Name, de modo que o PDF sempre tenha um título não vazio.

PDFVersion - o 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.

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

RenderDPI - densidade de pixels usada ao rasterizar cada página por meio de TMetafileCanvas. Maior = texto e linhas mais nítidos, mas metafile e PDF maiores. 200 (padrão) dá resultados com qualidade de impressão sem arquivos enormes. Valores ≤ 0 são limitados a 200.

 

Fluxo de trabalho típico

 

dxComponentPrinter1.CurrentLink := cxGridReportLink1;

dxHotPDFExportReportLinkToFile(cxGridReportLink1, 'Grid.pdf');

 

Or with custom options:

 

Opts := dxHotPDFDefaultOptions;

Opts.Title := 'Q1 Sales';

Opts.PDFACompliance := '3B';

Opts.RenderDPI := 300;

dxHotPDFExportReportLinkToFile(cxGridReportLink1, 'Grid.pdf', Opts);

 

Famílias de links suportadas

Qualquer descendente de TBasedxReportLink. Isso cobre cxGrid, cxRichEdit, cxScheduler, cxPivotGrid, mais quaisquer links customizados derivados da mesma classe base. O adapter não depende do tipo específico de link, porque o contrato de PaintPage é definido na base.

 

Capacidades preservadas

Conteúdo de páginas vetorial e raster emitido por toda família de links da DevExpress (cxGrid, cxScheduler, cxRichEdit, cxPivotGrid, links customizados). Strings de texto resolvidas por GDI (a DevExpress renderiza texto via TCanvas; o metafile registra as chamadas de texto GDI fielmente).

 

Limitações da ponte de metafile

Como as páginas são capturadas como enhanced metafiles, as features PDF específicas da DevExpress que exigem informação estrutural (campos AcroForm interativos, destinos nomeados e bookmarks / outlines) não são propagadas. Os campos de opções PDF/A e PDF/X são encaminhados 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 a DevExpress renderiza, não um PDF estruturado.

 

Nota sobre empacotamento

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

 

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