TppHotPDFDevice

Adaptador de ReportBuilder (Lib\Addons\ReportBuilder\ppHotPDFDevice.pas)

 

FastReport adapter  QuickReport adapter  DevExpress adapter

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

 

Declaración en Delphi:

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), así que se integra 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 hace mediante ppRptDeviceMap y no con RegisterComponents, no hay entrada en la paleta de componentes del IDE; los llamadores instancian TppHotPDFDevice directamente

 

Cada página que pasa por TppGraphicsDevice.ReceivePage se dibuja en un TMetafileCanvas transitorio (creado en BeforeRenderPage, finalizado en AfterRenderPage). Luego el TMetafile capturado se envía al importador de escalado automático ShowEnhancedMetafile de HotPDF:

 

1. StartJob crea la instancia THotPDF, establece los metadatos y llama a BeginDoc

2. BeforeRenderPage crea un TMetafile con tamaño spWidth x spHeight más un TMetafileCanvas, y lo asigna al Canvas heredado

3. RenderPage (heredado) recorre los DrawCommands y los canaliza a través de 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 del archivo temporal escrito internamente

 

Propiedades

FileName - ruta PDF de destino. Se usa salvo que SetOutputStream haya instalado un stream

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

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

Compressed - compresión de flujo HotPDF activada (True predeterminado). Ponga False para PDFs de diagnóstico

CompressionLevel - nivel FlateDecode. El valor predeterminado es clDefault

SetOutputStream(AStream) - enruta los bytes del PDF a AStream en lugar de escribirlos 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 rasterizado renderizado por la canalización estándar de comandos de dibujo de ReportBuilder. Cadenas de texto resueltas por GDI. La captura de metarchivo a 200 DPI por defecto (configurable mediante el PixelsPerInch heredado) da salida con calidad de impresión sin archivos enormes

 

Limitaciones del puente de metarchivos

Como las páginas se capturan como metarchivos mejorados, no se propagan 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). La salida es una reproducción visual fiel de lo que renderiza ReportBuilder, no un PDF estructurado

 

Nota de empaquetado

El dispositivo vive en Lib\Addons\ReportBuilder\ y no forma parte de los paquetes principales HotPDF*.dpk, así que la dependencia de ReportBuilder solo entra en los proyectos que optan por este dispositivo. Hay una prueba de humo (smoke_pp_hotpdf.dpr) junto a la unidad

 

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