TppHotPDFDevice

ReportBuilder-Adapter (Lib\Addons\ReportBuilder\ppHotPDFDevice.pas)

 

FastReport-Adapter  QuickReport-Adapter  DevExpress-Adapter

ReportBuilder-Geräteklasse, die HotPDF als zugrunde liegendes PDF-Backend anstelle des ReportBuilder-eigenen ppPDFDevice verwendet; gedacht für Projekte, die HotPDF bereits einbetten und ein einziges PDF-Backend in der gesamten Anwendung wünschen

 

Delphi-Deklaration:

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;

 

Beschreibung

TppHotPDFDevice stammt von TppGraphicsDevice ab (eine Ebene über TppCustomScreenDevice / TppImageDevice), sodass es sich in die Gerätekette von ReportBuilder einfügt, wenn es TppReport.PrinterDevice zugewiesen oder als Publisher-Gerät auf einem TppPublisher verwendet wird; der DeviceName wird als 'HotPDF' gemeldet; da die Geräteregistrierung in ReportBuilder über ppRptDeviceMap und nicht über RegisterComponents erfolgt, gibt es keinen IDE-Komponentenpaletteneintrag — Aufrufer instanziieren TppHotPDFDevice direkt

 

Jede Seite, die TppGraphicsDevice.ReceivePage durchläuft, wird auf eine temporäre TMetafileCanvas gezeichnet (erstellt in BeforeRenderPage, finalisiert in AfterRenderPage); die erfasste TMetafile wird dann dem automatisch skalierenden Importer ShowEnhancedMetafile von HotPDF übergeben:

 

1. StartJob erstellt die THotPDF-Instanz, legt Metadaten fest und ruft BeginDoc auf

2. BeforeRenderPage erstellt ein TMetafile der Größe spWidth x spHeight sowie ein TMetafileCanvas und legt dieses als geerbtes Canvas fest

3. RenderPage (geerbt) durchläuft die DrawCommands und leitet sie über den GraphicsContext auf unser Metadatei-Canvas um

4. AfterRenderPage schließt die Metadatei ab (gibt das Canvas frei), fügt eine neue HotPDF-Seite der Größe mmWidth x mmHeight (umgerechnet in PDF-Punkte) hinzu und spielt die Metadatei über ShowEnhancedMetafile ab

5. EndJob ruft HotPDF.EndDoc auf; wenn die Ausgabe ein Stream ist, werden die Bytes aus der intern geschriebenen temporären Datei kopiert

 

Eigenschaften

FileName — PDF-Zielpfad; wird verwendet, sofern nicht über SetOutputStream ein Stream eingerichtet wurde

Title / Author / Subject / Keywords — Dokumenten-Metadaten; wenn der titel leer ist, weicht das Gerät auf FileName aus, sodass das PDF immer einen nicht leeren Titel hat

PDFVersion — die PDF-Spezifikationsstufe, auf die das Dokument abzielen soll; Standardwert ist pdf17

Compressed — HotPDF-Stream-Komprimierung aktiviert (Standard True); auf False setzen für Diagnose-PDFs

CompressionLevel — FlateDecode-Stufe; Standardwert ist clDefault

SetOutputStream(AStream) — leitet die PDF-Bytes in AStream um, anstatt sie auf Festplatte zu schreiben; rufen Sie dies auf, bevor der Bericht StartJob auslöst

 

Typischer Workflow

 

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;

 

Erhaltener Funktionsumfang

Vektor- und Raster-Seiteninhalte, die durch die Standard-Zeichenbefehlspipeline von ReportBuilder gerendert werden; GDI-aufgelöste Textzeichenketten; die standardmäßige Erfassung von Metadateien mit 200 DPI (konfigurierbar über die geerbte Eigenschaft PixelsPerInch) liefert Ergebnisse in Druckqualität, ohne riesige Dateien zu erzeugen

 

Einschränkungen der Metadatei-Brücke

Da Seiten als erweiterte Metadateien erfasst werden, werden ReportBuilder-spezifische PDF-Funktionen, die Strukturinformationen erfordern (AcroForm-Felder, benannte Ziele, Gliederungen, PDF/A- oder PDF/X-Konformitätsprüfungen), nicht übertragen; die Ausgabe ist eine originalgetreue visuelle Reproduktion dessen, was ReportBuilder rendert, kein strukturiertes PDF

 

Hinweis zur Paketierung

Das Gerät befindet sich in Lib\Addons\ReportBuilder\ und ist nicht Teil der Hauptpakete HotPDF*.dpk, sodass die ReportBuilder-Abhängigkeit nur von Projekten geladen wird, die sich für das Gerät entscheiden; ein Smoke-Test (smoke_pp_hotpdf.dpr) befindet sich neben der Unit

 

Siehe auch: TfrxHotPDFExport, TQRHotPDFExportFilter, dxHotPDFExportReportLink, THPDFPage.ShowMetafile, Enhanced EMF/WMF Support