|
Supporto esteso metafile EMF/WMF
Panoramica
HotPDF ora fornisce un supporto significativamente esteso per i formati Enhanced Metafile (EMF) e Windows Metafile (WMF). La nuova implementazione include rilevamento automatico del formato, più opzioni di posizionamento, controllo avanzato della scala e qualità di rendering migliorata per la grafica vettoriale nei documenti PDF
Estensioni chiave
- Rilevamento automatico del formato EMF/WMF ed elaborazione adeguata
- Multiple positioning options (center, top-left, custom coordinates)
- Scala e controllo del rapporto d'aspetto estesi
- Opzioni di rendering per chiamata per compressione, scala, DC di riferimento, gestione degli stili penna, preservazione dei hatch brush e diagnostica degli oggetti nulli
- Rendering EMF diretto per preservare la grafica vettoriale
- Opzione di conversione bitmap per compatibilità
- Gestione della memoria migliorata per metafile grandi
- Gestione migliore di grafica vettoriale complessa e testo
Opzioni di controllo della posizione
Il supporto metafile esteso include opzioni di posizionamento flessibili:
- mpCenter: Metafile centered on the page (default behavior)
- mpLeftTop: Metafile displayed at the top-left corner (X=0, Y=0)
- mpCustom: Metafile displayed at specified position (requires X, Y parameters)
Esempi d'uso
Basic Usage (Default Centered Display)
// 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;
Uso del controllo della posizione
// 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;
Opzioni di rendering per chiamata
// 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;
Metodi estesi
Il supporto EMF/WMF esteso introduce diversi nuovi metodi:
Overload di THPDFPage.ShowMetafile
ShowMetafile(MetaFile: TMetafile) - Visualizzazione centrata predefinita
ShowMetafile(MetaFile: TMetafile; Position: THPDFMetafilePosition) - Controllo della posizione
ShowMetafile(MetaFile: TMetafile; Position: THPDFMetafilePosition; X, Y: Single) - Posizionamento personalizzato
ShowMetafile(MetaFile: TMetafile; Options: THPDFEmfOptions) - Opzioni di rendering per chiamata
ShowMetafile(MetaFile: TMetafile; Position: THPDFMetafilePosition; X, Y: Single; Options: THPDFEmfOptions) - Controllo della posizione con opzioni di rendering per chiamata
ShowMetafileEx(MetaFile: TMetafile; Options: THPDFEmfOptions) - API di pagina diretta con override delle opzioni EMF/WMF in un solo disegno
Metodi di elaborazione estesi
EnhancedShowMetafile - Elaborazione avanzata con funzionalità estese
ShowEnhancedMetafile(Page, MetaFile, Options) - Helper globale con opzioni di rendering per chiamata
ShowEnhancedMetafile(Page, MetaFile, Position, X, Y, Options) - Helper globale con controllo della posizione e opzioni di rendering per chiamata
ShowEnhancedMetafile(Page, FileName, Options) - Helper su nome file con opzioni di rendering per chiamata
ShowEnhancedMetafile(Page, FileName, Position, X, Y, Options) - Helper su nome file con controllo della posizione e opzioni di rendering per chiamata
RenderEmfDirect - Rendering EMF diretto per preservare i vettori
RenderEmfAsBitmap - Conversione bitmap per compatibilità
RenderWmfAsBitmap - Rendering bitmap WMF con controllo della posizione
Implementazione tecnica
Il supporto EMF/WMF esteso è implementato tramite l'unità HPDFEmf.pas, che fornisce:
- THPDFEmfEnhanced: Classe di estensione principale per l'elaborazione EMF
- THPDFEmfPatcher: Classe di utilità per conversione e rendering EMF
- THPDFMetafilePosition: Enumerazione per il controllo della posizione
- Elaborazione estesa dei record EMF: Supporto per record EMF avanzati
THPDFPageHelper e il confine C++
Su Delphi XE2 e successivi gli overload THPDFPage.ShowMetafile e THPDFPage.EnhancedShowMetafile elencati sopra vengono iniettati da THPDFPageHelper, un class helper dichiarato nell'unità HPDFEmf: aggiungere HPDFEmf alla clausola uses è tutto ciò che serve per chiamarli su qualsiasi istanza di THPDFPage
I class helper sono una caratteristica del solo Delphi e non sono raggiungibili da C++Builder: i chiamanti C++ usano gli helper globali ShowEnhancedMetafile(Page, MetaFile, ...) elencati tra i metodi di elaborazione estesa, esattamente come fa la demo ConvertTo
Sulle versioni di Delphi precedenti alla XE2 la stessa funzionalità è esposta come semplici procedure di compatibilità che prendono la pagina come primo argomento: THPDFPage_ShowMetafile(Page, MetaFile), THPDFPage_ShowMetafile(Page, MetaFile, Position, X, Y), THPDFPage_EnhancedShowMetafile(Page, MetaFile) e THPDFPage_EnhancedShowMetafile(Page, MetaFile, Position, X, Y)
Switch del percorso esteso
Il percorso esteso è guardato dalla variabile EmfSupportEnabled: Boolean in HPDFEmf, predefinito True; impostarla a False fa sì che ogni visualizzazione di metafile ripieghi sul percorso di rendering di base
Chiama EnableEnhancedEmfSupport per riattivare il percorso esteso dopo un opt-out, che è il pattern usato dalle demo prima della prima chiamata a ShowMetafile
Funzionalità avanzate
Supporto dei record EMF
- EMR_BITBLT - Operazioni bitmap
- EMR_STRETCHDIBITS - Operazioni bitmap allungate
- EMR_ALPHABLEND - Operazioni di alpha blending
- Rendering del testo esteso
- Operazioni di percorsi complessi
Opzioni di rendering
- Preservazione vettoriale: Mantiene la qualità della grafica vettoriale
- Fallback bitmap: Fallback automatico per grafica complessa
- Opzioni di scala: Controllo di scala automatico e manuale
- Controllo qualità: Impostazioni di qualità di rendering configurabili
- Sovrapposizione canvas: Imposta
THPDFEmfOptions.CanvasOver quando il contenuto di pagina esistente deve dipingere sopra il contenuto metafile Canvas ri-eseguito
- Controllo del ridisegno: Leave
THPDFEmfOptions.Redraw abilitato per il percorso di ridisegno temporaneo predefinito o disabilitalo per analizzare direttamente il metafile originale
- Clipping dei frame: Imposta
THPDFEmfOptions.UseFrame to clip EMF output to the header frame when imported metafiles rely on frame bounds
- Pattern di hatch brush: I hatch brush EMF/WMF vengono mappati su pattern di tiling PDF così i disegni importati conservano la texture di riempimento
- Diagnostica degli oggetti nulli: Mantieni penne e pennelli nulli invisibili per impostazione predefinita, oppure imposta
THPDFEmfOptions.ShowNullPen e THPDFEmfOptions.ShowNullBrush quando la diagnostica ha bisogno che quei percorsi o riempimenti diventino visibili
Ottimizzazioni delle prestazioni
- Elaborazione efficiente in memoria per metafile grandi
- Parsing ottimizzato dei record EMF
- Cache intelligente per elementi ripetuti
- Footprint di memoria ridotto durante la conversione
Compatibilità e standard
- Supporto Windows EMF 1.0 ed Enhanced EMF
- Windows Metafile (WMF) backward compatibility
- Coerenza di rendering cross-platform
- conformità agli standard della grafica vettoriale PDF
Troubleshooting
Problemi comuni e soluzioni:
- Metafile grandi: Usa il rendering bitmap per metafile molto grandi o complessi
- Rendering del testo: Assicurati che i font siano disponibili sul sistema di destinazione
- Grafica complessa: Considera il rendering EMF diretto per una qualità migliore
- Problemi di posizionamento: Usa il posizionamento personalizzato per un piazzamento preciso
Vedi anche:
|