Erweiterte EMF/WMF-Metadatei-Unterstützung

Übersicht

HotPDF bietet nun eine deutlich verbesserte Unterstützung für Enhanced Metafile (EMF)- und Windows Metafile (WMF)-Formate; die neue Implementierung umfasst eine automatische Formaterkennung, mehrere Positionierungsoptionen, eine erweiterte Skalierungssteuerung und eine verbesserte Darstellungsqualität für Vektorgrafiken in PDF-Dokumenten

Wesentliche Verbesserungen

  • Automatische EMF/WMF-Formaterkennung mit passender Verarbeitung
  • Mehrere Positionierungsoptionen (zentriert, oben links, eigene Koordinaten)
  • Erweiterte Kontrolle von Skalierung und Seitenverhältnis
  • Rendering-Optionen pro Aufruf für Komprimierung, Skalierung, Referenz-DC, Pen-Stil-Handling, Erhalt von Hatch-Brushes und Null-Objekt-Diagnostik
  • Direktes EMF-Rendering zum Erhalt der Vektorgrafik
  • Bitmap-Konvertierung als Option für Kompatibilität
  • Verbessertes Speichermanagement für große Metafiles
  • Bessere Behandlung komplexer Vektorgrafiken und Texte

Optionen zur Positionssteuerung

Die verbesserte Metadatei-Unterstützung umfasst flexible Positionierungsoptionen:

  • mpCenter:Metadatei auf der Seite zentriert (Standardverhalten)
  • mpLeftTop:Metadatei in der linken oberen Ecke angezeigt (X=0, Y=0)
  • mpCustom:Metadatei an der angegebenen Position angezeigt (erfordert X-, Y-Parameter)

Anwendungsbeispiele

Grundlegende Verwendung (standardmäßig zentrierte Anzeige)


// Delphi example - Default centered display
procedure ShowMetafileDefault;
var
  PDF: THotPDF;
  MetaFile: TMetafile;
begin
  PDF := THotPDF.Create(nil);
  MetaFile := TMetafile.Create;
  try
    PDF.BeginDoc;
    PDF.AddPage;

    // Load metafile
    MetaFile.LoadFromFile('diagram.emf');

    // Display centered on page (default)
    PDF.CurrentPage.ShowMetafile(MetaFile);

    PDF.EndDoc;
  finally
    MetaFile.Free;
    PDF.Free;
  end;
end;
        

Positionssteuerung verwenden


// Delphi example - Advanced positioning
procedure ShowMetafileAdvanced;
var
  PDF: THotPDF;
  MetaFile: TMetafile;
begin
  PDF := THotPDF.Create(nil);
  MetaFile := TMetafile.Create;
  try
    PDF.BeginDoc;
    PDF.AddPage;

    MetaFile.LoadFromFile('chart.wmf');

    // Top-left corner display
    PDF.CurrentPage.ShowMetafile(MetaFile, mpLeftTop);

    // Custom position display
    PDF.CurrentPage.ShowMetafile(MetaFile, mpCustom, 100, 200);

    PDF.EndDoc;
  finally
    MetaFile.Free;
    PDF.Free;
  end;
end;
        

Render-Optionen pro Aufruf


// Delphi example - Per-call options
procedure ShowMetafileWithOptions;
var
  PDF: THotPDF;
  MetaFile: TMetafile;
  Options: THPDFEmfOptions;
begin
  PDF := THotPDF.Create(nil);
  MetaFile := TMetafile.Create;
  Options := THPDFEmfOptions.Create;
  try
    Options.EmfBitmapScale := 1;
    Options.ColorImageCompression := icFlate;
    Options.UseScreenReferenceDC := False;
    Options.CanvasOver := True;
    Options.Redraw := False;
    Options.UseFrame := True;
    Options.ShowNullPen := True;
    Options.ShowNullBrush := True;

    PDF.BeginDoc;
    PDF.AddPage;
    MetaFile.LoadFromFile('diagram.emf');
    PDF.CurrentPage.ShowMetafile(MetaFile, mpCenter, 0, 0, Options);
    PDF.EndDoc;
  finally
    Options.Free;
    MetaFile.Free;
    PDF.Free;
  end;
end;
        

Erweiterte Methoden

Die verbesserte EMF/WMF-Unterstützung führt mehrere neue Methoden ein:

Überladungen von THotPDFPage.ShowMetafile

  • ShowMetafile(MetaFile: TMetafile) - Standardmäßig zentrierte Anzeige
  • ShowMetafile(MetaFile: TMetafile; Position: THPDFMetafilePosition) - Positionskontrolle
  • ShowMetafile(MetaFile: TMetafile; Position: THPDFMetafilePosition; X, Y: Single) - Eigene Positionierung
  • ShowMetafile(MetaFile: TMetafile; Options: THPDFEmfOptions) - Rendering-Optionen pro Aufruf
  • ShowMetafile(MetaFile: TMetafile; Position: THPDFMetafilePosition; X, Y: Single; Options: THPDFEmfOptions) - Positionskontrolle mit Rendering-Optionen pro Aufruf
  • ShowMetafileEx(MetaFile: TMetafile; Options: THPDFEmfOptions) - direkte Seiten-API mit einem EMF/WMF-Options-Override für einen einzigen Zeichenvorgang

Erweiterte Verarbeitungsmethoden

  • EnhancedShowMetafile - Erweiterte Verarbeitung mit zusätzlichen Features
  • ShowEnhancedMetafile(Page, MetaFile, Options) - globaler Helfer mit Rendering-Optionen pro Aufruf
  • ShowEnhancedMetafile(Page, MetaFile, Position, X, Y, Options) - globaler Helfer mit Positionskontrolle und Rendering-Optionen pro Aufruf
  • ShowEnhancedMetafile(Page, FileName, Options) - Dateinamen-Helfer mit Rendering-Optionen pro Aufruf
  • ShowEnhancedMetafile(Page, FileName, Position, X, Y, Options) - Dateinamen-Helfer mit Positionskontrolle und Rendering-Optionen pro Aufruf
  • RenderEmfDirect - direktes EMF-Rendering zum Erhalt der Vektoren
  • RenderEmfAsBitmap - Bitmap-Konvertierung für Kompatibilität
  • RenderWmfAsBitmap - WMF-Bitmap-Rendering mit Positionskontrolle

Technische Implementierung

Die verbesserte EMF/WMF-Unterstützung ist in der Einheit HPDFEmf.pas implementiert, welche Folgendes bietet:

  • THPDFEmfEnhanced:Kern-Erweiterungsklasse für die EMF-Verarbeitung
  • THPDFEmfPatcher:Hilfsklasse für die EMF-Konvertierung und das Rendering
  • THPDFMetafilePosition:Enumeration für die Positionssteuerung
  • Erweiterte EMF-Record-Verarbeitung:Unterstützung für erweiterte EMF-Records

THPDFPageHelper und die C++-Grenze

Ab Delphi XE2 werden die oben gelisteten Overloads THPDFPage.ShowMetafile und THPDFPage.EnhancedShowMetafile von THPDFPageHelper injiziert, einem in der Unit HPDFEmf deklarierten Class Helper; HPDFEmf in die uses-Klausel aufzunehmen genügt, um sie auf jeder THPDFPage-Instanz aufzurufen

Class Helper sind ein Sprachfeature nur für Delphi und aus C++Builder nicht erreichbar: C++-Aufrufer verwenden stattdessen die unter Erweiterte Verarbeitungsmethoden gelisteten globalen Helfer ShowEnhancedMetafile(Page, MetaFile, ...), genau wie das ConvertTo-Demo

In Delphi-Versionen vor XE2 ist dieselbe Funktionalität als schlichte Kompatibilitätsprozeduren verfügbar, die die Seite als erstes Argument nehmen: THPDFPage_ShowMetafile(Page, MetaFile), THPDFPage_ShowMetafile(Page, MetaFile, Position, X, Y), THPDFPage_EnhancedShowMetafile(Page, MetaFile) und THPDFPage_EnhancedShowMetafile(Page, MetaFile, Position, X, Y)

Erweiterungsschalter

Der erweiterte Pfad wird von der Variablen EmfSupportEnabled: Boolean in HPDFEmf bewacht, Standard True; setzt man sie auf False, fällt jede Metadatei-Anzeige auf den grundlegenden Rendering-Pfad zurück

Rufen Sie EnableEnhancedEmfSupport auf, um den erweiterten Pfad nach einem Opt-out wieder einzuschalten – genau so machen es die Demos vor ihrem ersten ShowMetafile-Aufruf

Erweiterte Funktionen

Unterstützung für EMF-Records

  • EMR_BITBLT - Bitmap-Vorgänge
  • EMR_STRETCHDIBITS - Gestreckte Bitmap-Vorgänge
  • EMR_ALPHABLEND - Alpha-Blending-Vorgänge
  • Erweiterte Textdarstellung
  • Komplexe Pfadoperationen

Rendering-Optionen

  • Vektorerhalt: Bewahrt die Qualität der Vektorgrafik
  • Bitmap-Fallback: automatischer Fallback für komplexe Grafiken
  • Skalierungsoptionen: automatische und manuelle Skalierungskontrolle
  • Qualitätskontrolle: konfigurierbare Rendering-Qualitätseinstellungen
  • Canvas-Schichtung: Setzen Sie THPDFEmfOptions.CanvasOver, wenn vorhandener Seiteninhalt über dem wiedergegebenen Canvas-Metafile-Inhalt gemalt werden soll
  • Redraw-Steuerung: Lassen Sie THPDFEmfOptions.Redraw für den standardmäßigen temporären Redraw-Pfad aktiviert oder deaktivieren Sie es, um das Original-Metafile direkt zu parsen
  • Frame-Clipping: Setzen Sie THPDFEmfOptions.UseFrame, um die EMF-Ausgabe auf den Header-Frame zu begrenzen, wenn importierte Metafiles von Frame-Grenzen abhängen
  • Hatch-Brush-Muster: EMF/WMF-Hatch-Brushes werden auf PDF-Tiling-Patterns abgebildet, damit importierte Zeichnungen ihre Fülltextur behalten
  • Null-Objekt-Diagnostik: Null-Pens und Null-Brushes bleiben standardmäßig unsichtbar; setzen Sie THPDFEmfOptions.ShowNullPen und THPDFEmfOptions.ShowNullBrush, wenn die Diagnostik diese Pfade oder Füllungen sichtbar machen soll

Leistungsoptimierungen

  • Speichereffiziente Verarbeitung für große Metadateien
  • Optimiertes EMF-Record-Parsing
  • Intelligentes Caching für wiederholte Elemente
  • Reduzierter Speicherbedarf während der Konvertierung

Kompatibilität und Standards

  • Unterstützung für Windows EMF 1.0 und Enhanced EMF
  • Abwärtskompatibilität für Windows Metafile (WMF)
  • Plattformübergreifende Konsistenz bei der Darstellung
  • Konformität mit PDF-Vektorgrafikstandards

Fehlerbehebung

Häufige Probleme und Lösungen:

  • Große Metadateien:Verwenden Sie Bitmap-Rendering für sehr große oder komplexe Metadateien
  • Textdarstellung:Stellen Sie sicher, dass Schriftarten auf dem Zielsystem verfügbar sind
  • Komplexe Grafiken:Erwägen Sie die direkte EMF-Darstellung für eine bessere Qualität
  • Positionierungsprobleme:Verwenden Sie benutzerdefinierte Positionierung für eine präzise Platzierung

Siehe auch