dxHotPDFExportReportLink

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

 

FastReport adapter  QuickReport adapter  ReportBuilder device

Adaptador de exportación PDF de DevExpress ExpressPrinting System (XtraPrinting / XtraReports / cxGrid printable links y similares) que usa HotPDF como backend PDF subyacente en lugar del emisor dxPSExportToPDF / TdxPSPDFExport de DevExpress. Pensado para proyectos que ya integran HotPDF y quieren un único backend PDF en toda la aplicación

 

Options record:

type

  TdxHotPDFExportOptions = record

    Title, Author, Subject, Keywords: string;

    PDFVersion : TPDFVersType;  // default pdf17

    Compression: TPDFCompressionLevel;  // default clDefault

    RenderDPI  : Integer;  // default 200

  end;

 

function dxHotPDFDefaultOptions: TdxHotPDFExportOptions;

 

File-based entry points:

function dxHotPDFExportReportLinkToFile(

  AReportLink: TBasedxReportLink;

  const AOutputFileName: string;

  const AOptions: TdxHotPDFExportOptions): Boolean; overload;

function dxHotPDFExportReportLinkToFile(

  AReportLink: TBasedxReportLink;

  const AOutputFileName: string): Boolean; overload;

 

Stream-based entry points:

function dxHotPDFExportReportLinkToStream(

  AReportLink: TBasedxReportLink;

  AOutputStream: TStream;

  const AOptions: TdxHotPDFExportOptions): Boolean; overload;

function dxHotPDFExportReportLinkToStream(

  AReportLink: TBasedxReportLink;

  AOutputStream: TStream): Boolean; overload;

 

Descripción

El sistema de impresión de DevExpress se centra en TBasedxReportLink, el vínculo abstracto que conecta un componente imprimible (cxGrid, cxRichEdit, cxScheduler, cxPivotGrid y similares) con un TdxComponentPrinter. El printer / link compone páginas y luego expone un método protegido PaintPage(ACanvas, APageBounds, APageIndex, AContinuousIndex, AZoomFactor) que dibuja una sola página sobre cualquier TCanvas

 

Este adaptador refleja el ciclo de TdxPSPDFReportExportProvider.Build de DevExpress, pero en lugar de enrutar la salida de PaintPage a un lienzo PDF de DevExpress, la envía a un TMetafileCanvas. Luego el metarchivo resultante se entrega al importador de escalado automático ShowEnhancedMetafile de HotPDF:

 

1. Quien llama invoca dxHotPDFExportReportLinkToFile o dxHotPDFExportReportLinkToStream con el TBasedxReportLink preparado

2. El adaptador llama a AReportLink.RebuildReport para componer las páginas

3. Para cada índice de página, pide al vínculo RenderInfo.GetActualPageRenderInfo, calcula el tamaño de la página en puntos PDF (usando la propia relación PointsPerInch / UnitsPerInch de DevExpress), construye un TMetafile con el DPI de render elegido y renderiza la página mediante PaintPage(MetaCanvas, ...)

4. Se agrega una nueva página de HotPDF (o se reutiliza la primera página creada automáticamente), con tamaño según las dimensiones calculadas en puntos, y el metarchivo se reproduce mediante ShowEnhancedMetafile

5. HotPDF.EndDoc escribe el PDF; para las sobrecargas de flujo, el archivo temporal se copia después al TStream proporcionado por quien llama

 

Opciones

Title / Author / Subject / Keywords - metadatos del documento. Cuando Title está vacío, el adaptador recurre a AReportLink.ReportTitle.Text y luego a AReportLink.Name, de modo que el PDF siempre tenga un título no vacío

PDFVersion - el nivel de especificación PDF al que debe apuntar el documento. El valor predeterminado es pdf17

Compression - nivel de FlateDecode. El valor predeterminado es clDefault

RenderDPI - densidad de píxeles usada al rasterizar cada página mediante TMetafileCanvas. Más alto = texto y líneas más nítidos, pero metarchivo y PDF más grandes. 200 (valor predeterminado) ofrece resultados de calidad de impresión sin archivos enormes. Los valores ≤ 0 se ajustan a 200

 

Flujo de trabajo típico

 

dxComponentPrinter1.CurrentLink := cxGridReportLink1;

dxHotPDFExportReportLinkToFile(cxGridReportLink1, 'Grid.pdf');

 

O con opciones personalizadas:

 

Opts := dxHotPDFDefaultOptions;

Opts.Title := 'Q1 Sales';

Opts.RenderDPI := 300;

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

 

Familias de vínculos admitidas

Cualquier descendiente de TBasedxReportLink. Esto cubre cxGrid, cxRichEdit, cxScheduler, cxPivotGrid, además de cualquier vínculo personalizado derivado de la misma clase base. El adaptador no depende del tipo concreto de vínculo porque el contrato PaintPage está definido en la base

 

Capacidades preservadas

Contenido de página vectorial y raster emitido por cada familia de vínculos de DevExpress (cxGrid, cxScheduler, cxRichEdit, cxPivotGrid, vínculos personalizados). Cadenas de texto resueltas por GDI (DevExpress renderiza el texto mediante TCanvas; el metarchivo registra fielmente las llamadas de texto de GDI)

 

Limitaciones del puente de metarchivos

Como las páginas se capturan como metarchivos enriquecidos, las funciones PDF específicas de DevExpress que requieren información estructural (campos AcroForm interactivos, destinos con nombre, marcadores / esquemas, controles de conformidad PDF/A o PDF/X) no se propagan. La salida es una reproducción visual fiel de lo que renderiza DevExpress, no un PDF estructurado

 

Nota de empaquetado

El adaptador vive en Lib\Addons\DevExpress\ y no forma parte de los paquetes principales HotPDF*.dpk, por lo que la dependencia de DevExpress ExpressPrinting solo la incorporan los proyectos que optan por el adaptador. Una prueba de humo (smoke_dx_hotpdf.dpr) vive junto a la unidad

 

Ver también: TfrxHotPDFExport, TQRHotPDFExportFilter, TppHotPDFDevice, THPDFPage.ShowMetafile, Soporte EMF/WMF mejorado