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