Verbeterde EMF/WMF-metafileondersteuning

Overzicht

HotPDF biedt nu aanzienlijk verbeterde ondersteuning voor de formaten Enhanced Metafile (EMF) en Windows Metafile (WMF). De nieuwe implementatie omvat automatische formaatdetectie, meerdere positioneringsopties, geavanceerde schaalregeling en betere renderingkwaliteit voor vectorafbeeldingen in PDF-documenten

Key Enhancements

  • Automatische EMF/WMF-formaatdetectie en passende verwerking
  • Meerdere positioneringsopties (gecentreerd, linksboven, eigen coördinaten)
  • Verbeterde schaal- en beeldverhoudingsregeling
  • Renderingopties per aanroep voor compressie, schaling, reference DC, penstyle-afhandeling, hatch-brush-behoud en null-objectdiagnostiek
  • Directe EMF-rendering om vectorafbeeldingen te behouden
  • Bitmapconversieoptie voor compatibiliteit
  • Verbeterd geheugenbeheer voor grote metafiles
  • Betere afhandeling van complexe vectorafbeeldingen en tekst

Positieregeling

De verbeterde metafileondersteuning bevat flexibele positioneringsopties:

  • mpCenter: Metafile gecentreerd op de pagina (defaultgedrag)
  • mpLeftTop: Metafile getoond in de linkerbovenhoek (X=0, Y=0)
  • mpCustom: Metafile getoond op de opgegeven positie (vereist de parameters X, Y)

Gebruiksvoorbeelden

Basisgebruik (default gecentreerde weergave)

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

Gebruik van positieregeling

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

Renderingopties per aanroep

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

Enhanced Methods

De verbeterde EMF/WMF-ondersteuning introduceert verschillende nieuwe methoden:

THPDFPage.ShowMetafile-overloads

  • ShowMetafile(MetaFile: TMetafile) - default gecentreerde weergave
  • ShowMetafile(MetaFile: TMetafile; Position: THPDFMetafilePosition) - positieregeling
  • ShowMetafile(MetaFile: TMetafile; Position: THPDFMetafilePosition; X, Y: Single) - eigen positionering
  • ShowMetafile(MetaFile: TMetafile; Options: THPDFEmfOptions) - renderingopties per aanroep
  • ShowMetafile(MetaFile: TMetafile; Position: THPDFMetafilePosition; X, Y: Single; Options: THPDFEmfOptions) - positieregeling met renderingopties per aanroep
  • ShowMetafileEx(MetaFile: TMetafile; Options: THPDFEmfOptions) - directe pagina-API met een EMF/WMF-optieoverride voor één tekenbeurt

Verbeterde verwerkingsmethoden

  • EnhancedShowMetafile - geavanceerde verwerking met uitgebreide functies
  • ShowEnhancedMetafile(Page, MetaFile, Options) - globale helper met renderingopties per aanroep
  • ShowEnhancedMetafile(Page, MetaFile, Position, X, Y, Options) - globale helper met positieregeling en renderingopties per aanroep
  • ShowEnhancedMetafile(Page, FileName, Options) - bestandsnaam-helper met renderingopties per aanroep
  • ShowEnhancedMetafile(Page, FileName, Position, X, Y, Options) - bestandsnaam-helper met positieregeling en renderingopties per aanroep
  • RenderEmfDirect - directe EMF-rendering voor vectorbehoud
  • RenderEmfAsBitmap - bitmapconversie voor compatibiliteit
  • RenderWmfAsBitmap - WMF-bitmaprendering met positieregeling

Technische implementatie

De verbeterde EMF/WMF-ondersteuning is geïmplementeerd via de HPDFEmf.pas-unit, die het volgende biedt:

  • THPDFEmfEnhanced: Kernverbeterklasse voor EMF-verwerking
  • THPDFEmfPatcher: Hulpklasse voor EMF-conversie en -rendering
  • THPDFMetafilePosition: Enum voor positieregeling
  • Verbeterde EMF-recordverwerking: Ondersteuning voor geavanceerde EMF-records

THPDFPageHelper en de C++-grens

Vanaf Delphi XE2 worden de hierboven genoemde overloads THPDFPage.ShowMetafile en THPDFPage.EnhancedShowMetafile geïnjecteerd door THPDFPageHelper, een class helper die in de unit HPDFEmf is gedeclareerd; HPDFEmf aan de uses-clause toevoegen is alles wat nodig is om ze op elke THPDFPage-instantie aan te roepen

Class helpers zijn een taalfeature die alleen Delphi kent en zijn onbereikbaar vanaf C++Builder: C++-aanroepers gebruiken in plaats daarvan de globale helpers ShowEnhancedMetafile(Page, MetaFile, ...) uit de sectie Verbeterde verwerkingsmethoden, precies zoals de ConvertTo-demo dat doet

Op Delphi-versies vóór XE2 is dezelfde functionaliteit beschikbaar als gewone compatibiliteitsprocedures die de pagina als eerste argument meekrijgen: THPDFPage_ShowMetafile(Page, MetaFile), THPDFPage_ShowMetafile(Page, MetaFile, Position, X, Y), THPDFPage_EnhancedShowMetafile(Page, MetaFile) en THPDFPage_EnhancedShowMetafile(Page, MetaFile, Position, X, Y)

Schakelaar voor verbeterde ondersteuning

Het verbeterde pad wordt bewaakt door de variabele EmfSupportEnabled: Boolean in HPDFEmf, met defaultwaarde True; op False zetten laat elke metafile-weergave terugvallen op het basisrenderpad

Roep EnableEnhancedEmfSupport aan om het verbeterde pad na een opt-out weer aan te zetten; dat is het patroon dat de demo's gebruiken vóór hun eerste ShowMetafile-aanroep

Advanced Features

EMF-recordondersteuning

  • EMR_BITBLT - bitmapoperaties
  • EMR_STRETCHDIBITS - uitgerekte bitmapoperaties
  • EMR_ALPHABLEND - alfablendoperaties
  • Verbeterde tekstrendering
  • Complexe path-operaties

Rendering Options

  • Vectorbehoud: houdt de kwaliteit van vectorafbeeldingen vast
  • Bitmapfallback: automatische fallback voor complexe graphics
  • Schaalopties: automatische en handmatige schaalregeling
  • Kwaliteitsregeling: configureerbare renderingkwaliteitsinstellingen
  • Canvas-laagvolgorde: zet THPDFEmfOptions.CanvasOver aan wanneer bestaande pagina-inhoud boven afgespeelde Canvas-metafile-inhoud moet schilderen
  • Redraw-regeling: laat THPDFEmfOptions.Redraw aan staan voor het default tijdelijke hertekenpad, of zet het uit om de originele metafile direct te parsen
  • Frame-clipping: zet THPDFEmfOptions.UseFrame aan om EMF-uitvoer te clippen op het headerframe wanneer geïmporteerde metafiles op framegrenzen vertrouwen
  • Hatch Brush Patterns: EMF/WMF-hatchbrushes worden gemapt op PDF-tilingpatronen, zodat geïmporteerde tekeningen hun vultextuur houden
  • Null-objectdiagnostiek: Null-pens en null-brushes blijven default onzichtbaar, of zet THPDFEmfOptions.ShowNullPen en THPDFEmfOptions.ShowNullBrush aan wanneer diagnostiek die paths of vullingen zichtbaar nodig heeft

Performance Optimizations

  • Geheugenefficiënte verwerking van grote metafiles
  • Geoptimaliseerd parsen van EMF-records
  • Intelligent caching van herhaalde elementen
  • Kleinere geheugenvoetafdruk tijdens conversie

Compatibiliteit en standaarden

  • Ondersteuning voor Windows EMF 1.0 en Enhanced EMF
  • Backward compatibility met Windows Metafile (WMF)
  • Cross-platform consistente rendering
  • Conform aan de PDF-standaarden voor vectorafbeeldingen

Troubleshooting

Veelvoorkomende problemen en oplossingen:

  • Grote metafiles: gebruik bitmaprendering voor zeer grote of complexe metafiles
  • Tekstrendering: zorg dat de fonts op het doelsysteem beschikbaar zijn
  • Complexe graphics: overweeg directe EMF-rendering voor betere kwaliteit
  • Positieproblemen: gebruik eigen positionering voor precieze plaatsing

Zie ook