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