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