Förbättrat stöd för EMF/WMF-metafiler

Översikt

HotPDF ger nu väsentligt förbättrat stöd för formaten Enhanced Metafile (EMF) och Windows Metafile (WMF) Den nya implementationen innehåller automatisk formatidentifiering, flera positioneringsalternativ, avancerad skalningskontroll, och förbättrad renderingskvalitet för vektorgrafik i PDF-dokument

Viktiga förbättringar

  • Automatisk EMF/WMF-formatdetektering och lämplig behandling
  • Automatisk identifiering av EMF/WMF-format och lämplig bearbetning
  • Flera positioneringsalternativ (centrerat, övre vänstra hörnet, egna koordinater)
  • Förbättrad skalning och kontroll av bildförhållande
  • Direkt EMF-rendering för att bevara vektorgrafik
  • Alternativ för bitmapkonvertering för kompatibilitet
  • Förbättrad minneshantering för stora metafiler
  • Bättre hantering av komplex vektorgrafik och text

Alternativ för positionskontroll

Det förbättrade metafilstödet innehåller flexibla positioneringsalternativ:

  • mpCenter: Metafil centrerad på sidan (standardbeteende)
  • mpLeftTop: Metafil visas i övre vänstra hörnet (X=0, Y=0)
  • mpCustom: Metafil visas vid angiven position (kräver parametrarna X, Y)

Användningsexempel

Grundläggande användning (standardvisning centrerad)


// Delphi-exempel - standardvisning centrerad
procedure ShowMetafileDefault;
var
  PDF: THotPDF;
  MetaFile: TMetafile;
begin
  PDF := THotPDF.Create(nil);
  MetaFile := TMetafile.Create;
  try
    PDF.BeginDoc;
    PDF.AddPage;

    // Läs in metafil
    MetaFile.LoadFromFile('diagram.emf');

    // Visa centrerad på sidan (standard)
    PDF.CurrentPage.ShowMetafile(MetaFile);

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

Användning av positionskontroll


// Delphi-exempel - avancerad positionering
procedure ShowMetafileAdvanced;
var
  PDF: THotPDF;
  MetaFile: TMetafile;
begin
  PDF := THotPDF.Create(nil);
  MetaFile := TMetafile.Create;
  try
    PDF.BeginDoc;
    PDF.AddPage;

    MetaFile.LoadFromFile('chart.wmf');

    // Visa i övre vänstra hörnet
    PDF.CurrentPage.ShowMetafile(MetaFile, mpLeftTop);

    // Visa med anpassad position
    PDF.CurrentPage.ShowMetafile(MetaFile, mpCustom, 100, 200);

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

Förbättrade metoder


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

Utökade metoder

Det förbättrade EMF/WMF-stödet introducerar flera nya metoder:

Överlagringar av THPDFPage.ShowMetafile

  • ShowMetafile(MetaFile: TMetafile) - Standardvisning centrerad
  • ShowMetafile(MetaFile: TMetafile; Position: THPDFMetafilePosition) - Positionskontroll
  • ShowMetafile(MetaFile: TMetafile; Position: THPDFMetafilePosition; X, Y: Single) - Anpassad positionering
  • ShowMetafile(MetaFile: TMetafile; Options: THPDFEmfOptions) - renderingsalternativ per anrop
  • ShowMetafile(MetaFile: TMetafile; Position: THPDFMetafilePosition; X, Y: Single; Options: THPDFEmfOptions) - positionskontroll med renderingsalternativ per anrop
  • ShowMetafileEx(MetaFile: TMetafile; Options: THPDFEmfOptions) - direkt sid-API med en överskrivning av EMF/WMF-alternativen för ett anrop

Förbättrade bearbetningsmetoder

  • EnhancedShowMetafile - avancerad bearbetning med utökade funktioner
  • ShowEnhancedMetafile(Page, MetaFile, Options) - global hjälpfunktion med renderingsalternativ per anrop
  • ShowEnhancedMetafile(Page, MetaFile, Position, X, Y, Options) - global hjälpfunktion med positionskontroll och renderingsalternativ per anrop
  • ShowEnhancedMetafile(Page, FileName, Options) - filnamnshjälpfunktion med renderingsalternativ per anrop
  • EnhancedShowMetafile - Avancerad bearbetning med förbättrade funktioner
  • RenderEmfDirect - Direkt EMF-rendering för att bevara vektorer
  • RenderEmfAsBitmap - Bitmapkonvertering för kompatibilitet
  • RenderWmfAsBitmap - WMF-bitmaprendering med positionskontroll

Teknisk implementation

Det förbättrade EMF/WMF-stödet är implementerat genom enheten HPDFEmf.pas, som tillhandahåller:

  • THPDFEmfEnhanced: Central förbättringsklass för EMF-bearbetning
  • THPDFEmfPatcher: Verktygsklass för EMF-konvertering och rendering
  • THPDFMetafilePosition: Uppräkning för positionskontroll
  • Förbättrad bearbetning av EMF-poster: Stöd för avancerade EMF-poster

THPDFPageHelper och C++-gränsen

I Delphi XE2 och senare injiceras de ovan listade överlagringarna THPDFPage.ShowMetafile och THPDFPage.EnhancedShowMetafile av THPDFPageHelper, en klasshjälp som deklareras i enheten HPDFEmf, så att det räcker att lägga till HPDFEmf i uses-satsen för att kunna anropa dem på vilken THPDFPage-instans som helst

Klasshjälpare är en språkfunktion som bara finns i Delphi och kan inte nås från C++Builder: C++-anropare använder i stället de globala hjälprutinerna ShowEnhancedMetafile(Page, MetaFile, ...) som listas under Enhanced Processing Methods, exakt som demoen ConvertTo gör

I Delphi-versioner före XE2 exponeras samma funktionalitet som vanliga kompatibilitetsprocedurer som tar sidan som första argument: THPDFPage_ShowMetafile(Page, MetaFile), THPDFPage_ShowMetafile(Page, MetaFile, Position, X, Y), THPDFPage_EnhancedShowMetafile(Page, MetaFile) och THPDFPage_EnhancedShowMetafile(Page, MetaFile, Position, X, Y)

Brytare för utökad funktion

Den utökade vägen styrs av variabeln EmfSupportEnabled: Boolean i HPDFEmf, med standardvärdet True; sätter du den till False faller all metafilvisning tillbaka på den grundläggande renderingsvägen

Anropa EnableEnhancedEmfSupport för att slå på den utökade vägen igen efter ett avstående, vilket är mönstret som demoerna använder före sitt första ShowMetafile-anrop

Avancerade funktioner

Stöd för EMF-poster

  • EMR_BITBLT - Bitmapoperationer
  • EMR_STRETCHDIBITS - Sträckta bitmapoperationer
  • EMR_ALPHABLEND - Alfablendningsoperationer
  • Förbättrad textrendering
  • Komplexa sökvägsoperationer

Renderingsalternativ

  • Bevarande av vektorer: Bevarar vektorgrafikens kvalitet
  • Bitmapreserv: Automatisk reservlösning för komplex grafik
  • Skalningsalternativ: Automatisk och manuell skalningskontroll
  • Kvalitetskontroll: Konfigurerbara inställningar för renderingskvalitet
  • Canvas-lager: Ställ in THPDFEmfOptions.CanvasOver när befintligt sidinnehåll ska målas ovanpå uppspelat Canvas-metafilinnehåll
  • Omritningskontroll: Lämna THPDFEmfOptions.Redraw aktiverat för standardvägen med tillfällig omritning, eller inaktivera det för att parsa originalmetafilen direkt
  • Ramklippning: Ställ in THPDFEmfOptions.UseFrame för att klippa EMF-utdata till huvudramen när importerade metafiler förlitar sig på ramgränser
  • Skrafferingspenselmönster: EMF/WMF-skrafferingspenslar mappas till PDF-tilemönster så att importerade ritningar behåller sin fyllnadstextur
  • Diagnostik för null-objekt: Håll null-pennor och null-penslar osynliga som standard, eller sätt THPDFEmfOptions.ShowNullPen och THPDFEmfOptions.ShowNullBrush när diagnostiken behöver att de banorna eller fyllnaderna blir synliga

Prestandaoptimeringar

  • Minneseffektiv bearbetning av stora metafiler
  • Optimerad parsning av EMF-poster
  • Intelligent cachelagring av upprepade element
  • Minskat minnesavtryck vid konvertering

Kompatibilitet och standarder

  • Stöd för Windows EMF 1.0 och Enhanced EMF
  • Bakåtkompatibilitet med Windows Metafile (WMF)
  • Konsekvent rendering mellan plattformar
  • Efterlevnad av standarder för PDF-vektorgrafik

Felsökning

Vanliga problem och lösningar:

  • Stora metafiler: Använd bitmaprendering för mycket stora eller komplexa metafiler
  • Textrendering: Kontrollera att teckensnitten finns på målsystemet
  • Komplex grafik: Överväg direkt EMF-rendering för bättre kvalitet
  • Positioneringsproblem: Använd anpassad positionering för exakt placering

Se även