|
Enhanced EMF/WMF Metafile Support
Vue d’ensemble
HotPDF fournit désormais une prise en charge nettement améliorée des formats Enhanced Metafile (EMF) et Windows Metafile (WMF)
La nouvelle implémentation ajoute la détection automatique du format, plusieurs options de positionnement, un contrôle avancé de l’échelle
et une meilleure qualité de rendu pour les graphiques vectoriels dans les documents PDF
Améliorations principales
- Détection automatique du format EMF/WMF et traitement approprié
- Plusieurs options de positionnement (centré, coin supérieur gauche, coordonnées personnalisées)
- Contrôle amélioré de l’échelle et du ratio d’aspect
- Rendu EMF direct pour préserver les graphiques vectoriels
- Option de conversion en bitmap pour la compatibilité
- Meilleure gestion mémoire pour les gros métafiles
- Meilleure prise en charge des graphiques vectoriels complexes et du texte
- Gestion mémoire améliorée pour les gros métafichiers
Options de contrôle du positionnement
La prise en charge améliorée des métafiles inclut des options de positionnement flexibles :
- mpCenter: Métafile centré sur la page (comportement par défaut)
- mpLeftTop: Métafile affiché dans le coin supérieur gauche (X=0, Y=0)
- mpCustom: Métafile affiché à la position spécifiée (paramètres X et Y requis)
Exemples d’utilisation
Utilisation de base (affichage centré par défaut)
// 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;
Utilisation du contrôle de position
// 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;
Méthodes améliorées
// Exemple Delphi - Options par appel
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;
Méthodes enrichies
La prise en charge EMF/WMF améliorée introduit plusieurs nouvelles méthodes :
Surcharges de THPDFPage.ShowMetafile
ShowMetafile(MetaFile: TMetafile) - Affichage centré par défaut
ShowMetafile(MetaFile: TMetafile; Position: THPDFMetafilePosition) - Contrôle du positionnement
ShowMetafile(MetaFile: TMetafile; Position: THPDFMetafilePosition; X, Y: Single) - Positionnement personnalisé
ShowMetafile(MetaFile: TMetafile; Options: THPDFEmfOptions) - Options de rendu par appel
ShowMetafile(MetaFile: TMetafile; Position: THPDFMetafilePosition; X, Y: Single; Options: THPDFEmfOptions) - Contrôle de position avec options de rendu par appel
ShowMetafileEx(MetaFile: TMetafile; Options: THPDFEmfOptions) - API de page directe avec une dérogation d’options EMF/WMF en un seul dessin
Méthodes de traitement améliorées
EnhancedShowMetafile - Traitement avancé avec fonctionnalités enrichies
ShowEnhancedMetafile(Page, MetaFile, Options) - Helper global avec options de rendu par appel
ShowEnhancedMetafile(Page, MetaFile, Position, X, Y, Options) - Helper global avec contrôle de position et options de rendu par appel
ShowEnhancedMetafile(Page, FileName, Options) - Helper par nom de fichier avec options de rendu par appel
EnhancedShowMetafile - Traitement avancé avec fonctions améliorées
RenderEmfDirect - Rendu EMF direct pour préserver les vecteurs
RenderEmfAsBitmap - Conversion en bitmap pour la compatibilité
RenderWmfAsBitmap - Rendu bitmap WMF avec contrôle du positionnement
Implémentation technique
La prise en charge EMF/WMF améliorée est implémentée dans l’unité HPDFEmf.pas, qui fournit :
- THPDFEmfEnhanced: Classe centrale d’amélioration pour le traitement EMF
- THPDFEmfPatcher: Classe utilitaire pour la conversion et le rendu EMF
- THPDFMetafilePosition: Énumération pour le contrôle du positionnement
- Enhanced EMF Record Processing: Prise en charge des enregistrements EMF avancés
THPDFPageHelper et la frontière C++
Sur Delphi XE2 et ultérieur, les surcharges THPDFPage.ShowMetafile et THPDFPage.EnhancedShowMetafile listées ci-dessus sont injectées par THPDFPageHelper, un class helper déclaré dans l’unité HPDFEmf : ajouter HPDFEmf à la clause uses suffit pour les appeler sur n’importe quelle instance de THPDFPage
Les class helpers sont une fonctionnalité du langage propre à Delphi et inaccessibles depuis C++Builder : les appelants C++ utilisent les aides globales ShowEnhancedMetafile(Page, MetaFile, ...) listées sous Méthodes de traitement avancé, exactement comme le fait la démo ConvertTo
Sur les versions de Delphi antérieures à XE2, la même fonctionnalité est exposée sous forme de procédures de compatibilité simples prenant la page en premier argument : THPDFPage_ShowMetafile(Page, MetaFile), THPDFPage_ShowMetafile(Page, MetaFile, Position, X, Y), THPDFPage_EnhancedShowMetafile(Page, MetaFile) et THPDFPage_EnhancedShowMetafile(Page, MetaFile, Position, X, Y)
Interrupteur d’enrichissement
Le chemin enrichi est protégé par la variable EmfSupportEnabled: Boolean de HPDFEmf, à True par défaut ; le passer à False fait retomber tout affichage de metafile sur le chemin de rendu de base
Appelez EnableEnhancedEmfSupport pour réactiver le chemin enrichi après une désactivation, c’est le schéma qu’utilisent les démos avant leur premier appel à ShowMetafile
Fonctions avancées
Prise en charge des enregistrements EMF
- EMR_BITBLT - Opérations bitmap
- EMR_STRETCHDIBITS - Opérations bitmap étirées
- EMR_ALPHABLEND - Opérations de fusion alpha
- Rendu du texte amélioré
- Opérations de chemins complexes
Options de rendu
- Préservation des vecteurs: Conserve la qualité des graphiques vectoriels
- Solution de secours bitmap: Repli automatique pour les graphiques complexes
- Options d’échelle: Contrôle automatique et manuel de l’échelle
- Contrôle qualité: Paramètres de qualité de rendu configurables
- Superposition de canvas : définissez
THPDFEmfOptions.CanvasOver lorsque le contenu de page existant doit peindre au-dessus du contenu de métafichier Canvas rejoué
- Contrôle du redessin : laissez
THPDFEmfOptions.Redraw activé pour le chemin de redessin temporaire par défaut, ou désactivez-le pour analyser directement le métafichier d’origine
- Rognage par cadre : définissez
THPDFEmfOptions.UseFrame pour rogner la sortie EMF au cadre d’en-tête lorsque les métafichiers importés s’appuient sur les bornes du cadre
- Motifs de pinceaux hachurés : les pinceaux hachurés EMF/WMF sont projetés en motifs de tiling PDF afin que les dessins importés conservent leur texture de remplissage
- Diagnostics d’objets nuls : gardez les plumes et pinceaux nuls invisibles par défaut, ou définissez
THPDFEmfOptions.ShowNullPen et THPDFEmfOptions.ShowNullBrush lorsque les diagnostics ont besoin que ces tracés ou remplissages deviennent visibles
Optimisations de performance
- Traitement économe en mémoire pour les grands métafiles
- Analyse optimisée des enregistrements EMF
- Mise en cache intelligente pour les éléments répétés
- Empreinte mémoire réduite pendant la conversion
Compatibility and Standards
- Windows EMF 1.0 and Enhanced EMF support
- Windows Metafile (WMF) backward compatibility
- Cross-platform rendering consistency
- PDF vector graphics standards compliance
Troubleshooting
Common Issues and Solutions:
- Gros métafichiers : utilisez le rendu bitmap pour les métafichiers très volumineux ou complexes
- Rendu du texte : assurez-vous que les polices sont disponibles sur le système cible
- Complex Graphics: Consider direct EMF rendering for better quality
- Positioning Issues: Use custom positioning for precise placement
Voir aussi
|