dxHotPDFExportReportLink

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

 

Adaptador FastReport  Adaptador QuickReport  Dispositivo ReportBuilder

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

 

Registo de opções:

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 ficheiro:

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 do DevExpress assenta em TBasedxReportLink - o link abstrato que liga um componente imprimível (cxGrid, cxRichEdit, cxScheduler, cxPivotGrid e semelhantes) a um TdxComponentPrinter. O printer / link compõe as páginas e expõe depois um método protegido PaintPage(ACanvas, APageBounds, APageIndex, AContinuousIndex, AZoomFactor) que desenha uma única página em qualquer TCanvas

 

Este adaptador espelha o ciclo do TdxPSPDFReportExportProvider.Build da própria DevExpress, mas em vez de encaminhar a saída do PaintPage para uma canvas PDF da DevExpress, encaminha-a para um TMetafileCanvas. O metaficheiro resultante é depois entregue ao importador de auto-escala 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, pede ao link o RenderInfo.GetActualPageRenderInfo, calcula o tamanho da página em pontos PDF (usando o rácio PointsPerInch / UnitsPerInch do próprio DevExpress), constrói um TMetafile à DPI de renderização escolhida e renderiza a página através de PaintPage(MetaCanvas, ...)

4. É acrescentada uma nova página HotPDF (ou é reutilizada a primeira página criada automaticamente), dimensionada para as dimensões em pontos calculadas, e o metaficheiro é reproduzido via ShowEnhancedMetafile

5. O HotPDF.EndDoc escreve o PDF; nas overloads de stream, o ficheiro temporário é depois copiado para a TStream fornecida pelo chamador

 

Opções

Title / Author / Subject / Keywords - metadados do documento. Quando Title está vazio, o adaptador recorre a AReportLink.ReportTitle.Text e depois a AReportLink.Name, para que o PDF tenha sempre um título não vazio

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

Compression - nível FlateDecode. A predefinição é clDefault

RenderDPI - densidade de píxeis usada ao rasterizar cada página através de TMetafileCanvas. Mais alta = texto e linhas mais nítidos, mas metaficheiro e PDF maiores. 200 (predefinição) dá resultados com qualidade de impressão sem ficheiros enormes. Valores ≤ 0 são fixados em 200

 

Fluxo de trabalho típico

 

dxComponentPrinter1.CurrentLink := cxGridReportLink1;

dxHotPDFExportReportLinkToFile(cxGridReportLink1, 'Grid.pdf');

 

Ou com opções personalizadas:

 

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. Isto cobre cxGrid, cxRichEdit, cxScheduler, cxPivotGrid, mais quaisquer links personalizados derivados da mesma classe base. O adaptador não depende do tipo específico de link porque o contrato PaintPage está definido na base

 

Capacidades preservadas

Conteúdo de páginas vetorial e raster 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; o metaficheiro regista fielmente as chamadas de texto GDI)

 

Limitações da ponte de metaficheiro

Como as páginas são capturadas como enhanced metafiles, as funcionalidades PDF específicas do 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 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 DevExpress renderiza, não um PDF estruturado

 

Nota de empacotamento

O adaptador vive em Lib\Addons\DevExpress\ e não faz parte dos pacotes principais HotPDF*.dpk, pelo que a dependência DevExpress ExpressPrinting só é trazida por projetos que optem pelo adaptador. Um teste smoke (smoke_dx_hotpdf.dpr) vive ao lado da unidade

 

Ver também: TfrxHotPDFExport, TQRHotPDFExportFilter, TppHotPDFDevice, THPDFPage.ShowMetafile, Suporte EMF/WMF melhorado