Supporto EMF/WMF migliorato Supporto EMF/WMF migliorato Supporto EMF/WMF migliorato Supporto EMF/WMF migliorato Supporto EMF/WMF migliorato Supporto EMF/WMF migliorato

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: