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