TppHotPDFDevice

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

 

FastReport adapter  QuickReport adapter  DevExpress adapter

Classe de dispositivo ReportBuilder que usa HotPDF como backend PDF subjacente em vez do ppPDFDevice próprio do ReportBuilder. Destina-se a projetos que já incorporam HotPDF e querem um único backend PDF em toda a aplicação

 

Declaração 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;

 

Descrição

TppHotPDFDevice descende de TppGraphicsDevice (um nível acima de TppCustomScreenDevice / TppImageDevice), portanto encaixa na cadeia de dispositivos do ReportBuilder quando atribuído a TppReport.PrinterDevice ou usado como dispositivo publicador em um TppPublisher. DeviceName é relatado como 'HotPDF'. Como o registro de dispositivo no ReportBuilder é feito via ppRptDeviceMap e não por RegisterComponents, não há entrada na paleta de componentes da IDE; os chamadores instanciam TppHotPDFDevice diretamente

 

Cada página que passa por TppGraphicsDevice.ReceivePage é desenhada em um TMetafileCanvas transitório (criado em BeforeRenderPage, finalizado em AfterRenderPage). O TMetafile capturado é então enviado ao importador com autoescala ShowEnhancedMetafile do 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 (herdado) percorre os DrawCommands e os roteia pelo GraphicsContext para o nosso canvas de metafile

4. AfterRenderPage finaliza o metafile (libera o canvas), adiciona uma nova página HotPDF dimensionada para mmWidth x mmHeight (convertidos para pontos PDF) e reproduz o metafile via ShowEnhancedMetafile

5. EndJob chama HotPDF.EndDoc; se a saída for um Stream, copia bytes do arquivo temporário gravado internamente

 

Propriedades

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

Title / Author / Subject / Keywords - metadados do documento. Quando Title está vazio, o dispositivo usa FileName como fallback para que o PDF sempre tenha um título não vazio

PDFVersion - o nível de especificação PDF que o documento deve focar. O padrão é pdf17.

Compressed - Compressão de fluxo do HotPDF ativada (padrão True). Set False for diagnostic PDFs.

CompressionLevel - Nível de FlateDecode. O padrão é clDefault.

SetOutputStream(AStream) - direciona os bytes do PDF para AStream em vez de gravar em disco. Chame antes de o relatório disparar StartJob

 

Fluxo de trabalho 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

Conteúdo vetorial e raster de página renderizado pelo pipeline padrão de draw-command do ReportBuilder. Strings de texto resolvidas por GDI. A captura de metafile padrão de 200 DPI (configurável via PixelsPerInch herdado) oferece saída com qualidade de impressão sem arquivos enormes

 

Limitações da ponte de metafile

Como as páginas são capturadas como metafiles avançados, recursos PDF específicos do ReportBuilder que exigem informação estrutural (campos AcroForm, destinos nomeados, outlines, gates de conformidade PDF/A ou PDF/X) não são propagados. A saída é uma reprodução visual fiel do que o ReportBuilder renderiza, não um PDF estruturado

 

Nota de empacotamento

O dispositivo fica em Lib\Addons\ReportBuilder\ e não faz parte dos pacotes principais HotPDF*.dpk, portanto a dependência ReportBuilder só é puxada por projetos que optam pelo dispositivo. Um teste smoke (smoke_pp_hotpdf.dpr) fica junto da unit

 

Veja também: TfrxHotPDFExport, TQRHotPDFExportFilter, dxHotPDFExportReportLink, THPDFPage.ShowMetafile, Enhanced EMF/WMF Support