TppHotPDFDevice

ReportBuilder adapter (Lib\Addons\ReportBuilder\ppHotPDFDevice.pas)

 

FastReport adapter  QuickReport adapter  DevExpress adapter

Clase de dispositivo ReportBuilder que usa HotPDF como backend PDF subyacente en lugar del ppPDFDevice propio de ReportBuilder. Está pensada para proyectos que ya integran HotPDF y quieren un único backend PDF en toda la aplicación

 

Delphi declaration:

type

  TppHotPDFDevice = class(TppGraphicsDevice)

  public

    class function DeviceName: String; override;

    procedure StartJob; override;

    procedure EndJob; override;

    procedure CancelJob; override;

    procedure SetOutputStream(AStream: TStream);

    property FileName: string;

    property Title, Author, Subject, Keywords: string;

    property PDFVersion: TPDFVersType;

    property Compressed: Boolean;

    property CompressionLevel: TPDFCompressionLevel;

  end;

 

Descripción

TppHotPDFDevice desciende de TppGraphicsDevice (un nivel por encima de TppCustomScreenDevice / TppImageDevice), por lo que encaja en la cadena de dispositivos de ReportBuilder cuando se asigna a TppReport.PrinterDevice o se usa como dispositivo publicador en un TppPublisher. DeviceName se informa como 'HotPDF'. Como el registro de dispositivos en ReportBuilder se realiza mediante ppRptDeviceMap en lugar de RegisterComponents, no hay entrada en la paleta de componentes del IDE; los llamadores instancian TppHotPDFDevice directamente

 

Cada página que llega por TppGraphicsDevice.ReceivePage se dibuja en un TMetafileCanvas transitorio (creado en BeforeRenderPage y finalizado en AfterRenderPage). El TMetafile capturado se pasa después al importador con escalado automático ShowEnhancedMetafile de HotPDF:

 

1. StartJob creates the THotPDF instance, sets metadata, and calls BeginDoc.

2. BeforeRenderPage creates a TMetafile sized to spWidth x spHeight plus a TMetafileCanvas, and sets it as the inherited Canvas.

3. RenderPage (heredado) recorre los DrawCommands y los enruta mediante GraphicsContext hacia nuestro lienzo de metarchivo

4. AfterRenderPage finaliza el metarchivo (libera el lienzo), agrega una nueva página HotPDF con tamaño mmWidth x mmHeight (convertido a puntos PDF) y reproduce el metarchivo mediante ShowEnhancedMetafile

5. EndJob llama a HotPDF.EndDoc; si la salida es un Stream, copia bytes desde el archivo temporal escrito internamente

 

Propiedades

FileName - target PDF path. Used unless SetOutputStream has installed a stream.

Title / Author / Subject / Keywords - metadatos del documento. Cuando Title está vacío, el dispositivo recurre a FileName, de modo que el PDF siempre tenga un título no vacío

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

Compressed - HotPDF stream compression on (default True). Set False for diagnostic PDFs.

CompressionLevel - FlateDecode level. Defaults to clDefault.

SetOutputStream(AStream): dirige los bytes PDF a AStream en lugar de escribir en disco. Llámelo antes de que el informe dispare StartJob

 

Flujo de trabajo típico

 

Dev := TppHotPDFDevice.Create(nil);

try

  Dev.FileName := 'Report.pdf';

  Dev.Title := 'Monthly Statement';

  Dev.PDFVersion := pdf17;

  ppReport1.DeviceType := 'HotPDF';

  ppReport1.PrinterDevice := Dev;

  ppReport1.Print;

finally

  Dev.Free;

end;

 

Capacidades preservadas

Contenido de página vectorial y raster renderizado por la canalización estándar de comandos de dibujo de ReportBuilder. Cadenas de texto resueltas por GDI. La captura de metarchivo predeterminada a 200 DPI (configurable mediante el PixelsPerInch heredado) proporciona salida con calidad de impresión sin archivos enormes

 

Limitaciones del puente de metaficheros

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

 

Nota de empaquetado

El dispositivo reside en Lib\Addons\ReportBuilder\ y no forma parte de los paquetes principales HotPDF*.dpk, por lo que la dependencia ReportBuilder solo se incorpora en los proyectos que optan por usar el dispositivo. Una prueba smoke (smoke_pp_hotpdf.dpr) reside junto a la unidad

 

Véase también: TfrxHotPDFExport, TQRHotPDFExportFilter, dxHotPDFExportReportLink, THPDFPage.ShowMetafile, Soporte EMF/WMF mejorado