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