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