TppHotPDFDevice

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

 

Adaptateur FastReport  Adaptateur QuickReport  Adaptateur DevExpress

Classe de périphérique ReportBuilder qui utilise HotPDF comme backend PDF sous-jacent au lieu du ppPDFDevice natif de ReportBuilder. Destinée aux projets qui intègrent déjà HotPDF et veulent un seul backend PDF pour toute l’application

 

Déclaration 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;

 

Description

TppHotPDFDevice dérive de TppGraphicsDevice (un niveau au-dessus de TppCustomScreenDevice / TppImageDevice), ce qui lui permet de s’insérer dans la chaîne de périphériques ReportBuilder lorsqu’il est assigné à TppReport.PrinterDevice ou utilisé comme périphérique d’édition sur un TppPublisher. DeviceName est signalé comme 'HotPDF'. Comme l’enregistrement de périphérique dans ReportBuilder se fait via ppRptDeviceMap plutôt que RegisterComponents, il n’y a pas d’entrée dans la palette de composants de l’IDE - les appelants instancient TppHotPDFDevice directement

 

Chaque page reçue via TppGraphicsDevice.ReceivePage est dessinée sur un TMetafileCanvas temporaire (créé dans BeforeRenderPage, finalisé dans AfterRenderPage). Le TMetafile capturé est ensuite transmis à l’importeur à mise à l’échelle automatique ShowEnhancedMetafile de HotPDF :

 

1. StartJob crée l’instance THotPDF, définit les métadonnées et appelle BeginDoc

2. BeforeRenderPage crée un TMetafile dimensionné selon spWidth x spHeight plus un TMetafileCanvas, puis l’affecte au Canvas hérité

3. RenderPage (hérité) parcourt les DrawCommands et les achemine via le GraphicsContext vers notre canvas de metafile

4. AfterRenderPage finalise le metafile (canvas libéré), ajoute une nouvelle page HotPDF dimensionnée selon mmWidth x mmHeight (converties en points PDF), puis joue le metafile via ShowEnhancedMetafile

5. EndJob appelle HotPDF.EndDoc; si la sortie est un flux, copie les octets depuis le fichier temporaire écrit en interne

 

Propriétés

FileName - chemin PDF cible. Utilisé sauf si SetOutputStream a installé un flux

Title / Author / Subject / Keywords - métadonnées du document. Quand Title est vide, le périphérique retombe sur FileName afin que le PDF ait toujours un titre non vide

PDFVersion - niveau de spécification PDF que le document doit viser. Valeur par défaut pdf17

Compressed - compression de flux HotPDF activée (True par défaut). Mettre False pour les PDF de diagnostic

CompressionLevel - niveau FlateDecode. Valeur par défaut clDefault

SetOutputStream(AStream) - achemine les octets PDF vers AStream au lieu d’écrire sur le disque. À appeler avant que le rapport déclenche StartJob

 

Flux de travail type

 

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;

 

Capacités préservées

Contenu vectoriel et raster des pages rendu par le pipeline standard de commandes de dessin de ReportBuilder. Chaînes de texte résolues par GDI. La capture metafile par défaut à 200 DPI (configurable via le PixelsPerInch hérité) fournit une sortie de qualité impression sans fichiers énormes

 

Limites du pont metafile

Comme les pages sont capturées sous forme d’Enhanced Metafiles, les fonctionnalités PDF spécifiques à ReportBuilder qui exigent des informations structurelles (champs AcroForm, destinations nommées, signets, contrôles de conformité PDF/A ou PDF/X) ne sont pas propagées. La sortie est une reproduction visuelle fidèle de ce que rend ReportBuilder, pas un PDF structuré

 

Note de packaging

Le périphérique se trouve dans Lib\Addons\ReportBuilder\ et ne fait pas partie des packages principaux HotPDF*.dpk, donc la dépendance ReportBuilder n’est ajoutée que par les projets qui choisissent ce périphérique. Un smoke test (smoke_pp_hotpdf.dpr) se trouve à côté de l’unité

 

Voir aussi: TfrxHotPDFExport, TQRHotPDFExportFilter, dxHotPDFExportReportLink, THPDFPage.ShowMetafile, Prise en charge EMF/WMF améliorée