dxHotPDFExportReportLink

DevExpress ExpressPrinting System adapter (Lib\Addons\DevExpress\dxHotPDFExport.pas)

 

FastReport adapter  QuickReport adapter  ReportBuilder device

Adaptador de exportação de PDF do DevExpress ExpressPrinting System (XtraPrinting / XtraReports / links imprimíveis do cxGrid e similares) que utiliza o HotPDF como o backend PDF subjacente em vez do emissor dxPSExportToPDF / TdxPSPDFExport nativo do DevExpress. Destinado a projetos que já incorporam o HotPDF e desejam um único backend PDF em toda a aplicação.

 

Registro de opções:

type

  TdxHotPDFExportOpções = record

    Title, Author, Subject, Keywords: string;

    PDFVersion : TPDFVersType;  // default pdf17

    Compression: TPDFCompressionLevel;  // default clDefault

    RenderDPI  : Integer;  // default 200

  end;

 

function dxHotPDFDefaultOpções: TdxHotPDFExportOpções;

 

Pontos de entrada baseados em arquivo:

function dxHotPDFExportReportLinkToFile(

  AReportLink: TBasedxReportLink;

  const AOutputFileName: string;

  const AOpções: TdxHotPDFExportOpções): Boolean; overload;

function dxHotPDFExportReportLinkToFile(

  AReportLink: TBasedxReportLink;

  const AOutputFileName: string): Boolean; overload;

 

Pontos de entrada baseados em stream:

function dxHotPDFExportReportLinkToStream(

  AReportLink: TBasedxReportLink;

  AOutputStream: TStream;

  const AOpções: TdxHotPDFExportOpções): Boolean; overload;

function dxHotPDFExportReportLinkToStream(

  AReportLink: TBasedxReportLink;

  AOutputStream: TStream): Boolean; overload;

 

Descrição

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

 

Este adaptador reflete o loop no próprio TdxPSPDFReportExportProvider.Build da DevExpress, mas em vez de rotear a saída do PaintPage para um canvas PDF da DevExpress, ele o roteia para um TMetafileCanvas. O metafile resultante é então alimentado no importador de redimensionamento automático ShowEnhancedMetafile do HotPDF:

 

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

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

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

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

5. HotPDF.EndDoc escreve o PDF; para as sobrecargas de 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 estiver vazio, o adaptador recai em AReportLink.ReportTitle.Text, depois em AReportLink.Name, para que o PDF sempre tenha um título não vazio.

PDFVersion - o nível de especificação PDF que o documento deve focar. O padrão é pdf17.

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

RenderDPI - densidade de pixels usada ao rasterizar cada página por meio do TMetafileCanvas. Maior = texto e linhas mais nítidos, mas metafile e PDF maiores. 200 (padrão) fornece 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');

 

Ou com opções personalizadas:

 

Opts := dxHotPDFDefaultOpções;

Opts.Title := 'Q1 Sales';

Opts.RenderDPI := 300;

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

 

Famílias de links compatíveis

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

 

Capacidades preservadas

Conteúdo vetorial e raster de página emitido por todas as famílias de links DevExpress (cxGrid, cxScheduler, cxRichEdit, cxPivotGrid, links personalizados). Strings de texto resolvidas por GDI (o DevExpress renderiza texto via TCanvas; os registros do metafile preservam fielmente as chamadas de texto GDI)

 

Limitações da ponte de metafile

Como as páginas são capturadas como metafiles avançados, recursos PDF específicos do DevExpress que exigem informação estrutural (campos AcroForm interativos, destinos nomeados, bookmarks / 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 DevExpress renderiza, não um PDF estruturado

 

Nota de empacotamento

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

 

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