Soporte mejorado de metarchivos EMF/WMF

Descripción general

HotPDF ahora ofrece soporte mucho más amplio para los formatos Enhanced Metafile (EMF) y Windows Metafile (WMF) La nueva implementación incluye detección automática del formato, múltiples opciones de posicionamiento, control avanzado de escalado y mejor calidad de renderizado para gráficos vectoriales en documentos PDF

Mejoras principales

  • Automatic EMF/WMF format detection and appropriate processing
  • Detección automática del formato EMF/WMF y procesamiento adecuado
  • Múltiples opciones de posicionamiento (centro, esquina superior izquierda, coordenadas personalizadas)
  • Control mejorado de escalado y proporción de aspecto
  • Renderizado directo de EMF para conservar los gráficos vectoriales
  • Opción de conversión a mapa de bits para compatibilidad
  • Administración de memoria mejorada para metarchivos grandes
  • Mejor manejo de gráficos vectoriales complejos y texto

Opciones de control de posición

El soporte mejorado de metarchivos incluye opciones de posicionamiento flexibles:

  • mpCenter: Metarchivo centrado en la página (comportamiento predeterminado)
  • mpLeftTop: Metarchivo mostrado en la esquina superior izquierda (X=0, Y=0)
  • mpCustom: Metarchivo mostrado en la posición especificada (requiere parámetros X, Y)

Ejemplos de uso

Uso básico (visualización centrada predeterminada)


// Delphi example - Visualización centrada predeterminada
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 control de posición


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

Métodos mejorados


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

Opciones de renderizado por llamada

El soporte mejorado de EMF/WMF introduce varios métodos nuevos:

Sobrecargas de THPDFPage.ShowMetafile

  • ShowMetafile(MetaFile: TMetafile) - Visualización centrada predeterminada
  • ShowMetafile(MetaFile: TMetafile; Position: THPDFMetafilePosition) - Control de posición
  • ShowMetafile(MetaFile: TMetafile; Position: THPDFMetafilePosition; X, Y: Single) - Posicionamiento personalizado
  • ShowMetafile(MetaFile: TMetafile; Options: THPDFEmfOptions) - Per-call rendering options
  • ShowMetafile(MetaFile: TMetafile; Position: THPDFMetafilePosition; X, Y: Single; Options: THPDFEmfOptions) - Position control with per-call rendering options
  • ShowMetafileEx(MetaFile: TMetafile; Options: THPDFEmfOptions) - API directa de página con una anulación de las opciones EMF/WMF para un solo dibujo

Métodos de procesamiento mejorados

  • EnhancedShowMetafile - Advanced processing with enhanced features
  • ShowEnhancedMetafile(Page, MetaFile, Options) - Global helper with per-call rendering options
  • ShowEnhancedMetafile(Page, MetaFile, Position, X, Y, Options) - Helper global con control de posición y opciones de renderizado por llamada
  • ShowEnhancedMetafile(Page, FileName, Options) - File-name helper with per-call rendering options
  • EnhancedShowMetafile - Procesamiento avanzado con funciones mejoradas
  • RenderEmfDirect - Renderizado directo de EMF para conservar vectores
  • RenderEmfAsBitmap - Conversión a mapa de bits para compatibilidad
  • RenderWmfAsBitmap - Renderizado WMF a mapa de bits con control de posición

Implementación técnica

El soporte mejorado de EMF/WMF se implementa mediante la unidad HPDFEmf.pas, que ofrece:

  • THPDFEmfEnhanced: Clase central de mejora para el procesamiento de EMF
  • THPDFEmfPatcher: Clase utilitaria para la conversión y el renderizado de EMF
  • THPDFMetafilePosition: Enumeración para control de posición
  • Procesamiento mejorado de registros EMF: Compatibilidad con registros EMF avanzados

THPDFPageHelper y el límite de C++

En Delphi XE2 y posteriores, las sobrecargas de THPDFPage.ShowMetafile y THPDFPage.EnhancedShowMetafile listadas arriba las inyecta THPDFPageHelper, un class helper declarado en la unidad HPDFEmf, así que basta con agregar HPDFEmf a la cláusula uses para poder llamarlas sobre cualquier instancia de THPDFPage

Los class helpers son una característica exclusiva del lenguaje Delphi y no son alcanzables desde C++Builder: quienes llaman desde C++ usan en su lugar los helpers globales ShowEnhancedMetafile(Page, MetaFile, ...) listados bajo Métodos de procesamiento mejorados, exactamente como lo hace el demo ConvertTo

En versiones de Delphi anteriores a XE2 la misma funcionalidad se expone como procedimientos de compatibilidad sencillos que reciben la página como primer argumento: THPDFPage_ShowMetafile(Page, MetaFile), THPDFPage_ShowMetafile(Page, MetaFile, Position, X, Y), THPDFPage_EnhancedShowMetafile(Page, MetaFile) y THPDFPage_EnhancedShowMetafile(Page, MetaFile, Position, X, Y)

Interruptor de mejora

La ruta mejorada está protegida por la variable EmfSupportEnabled: Boolean en HPDFEmf, con valor por defecto True; asignarle False hace que toda visualización de metafiles recaiga en la ruta de renderizado básica

Llame a EnableEnhancedEmfSupport para reactivar la ruta mejorada después de desactivarla, que es el patrón que los demos usan antes de su primera llamada a ShowMetafile

Funciones avanzadas

Compatibilidad con registros EMF

  • EMR_BITBLT - Operaciones de mapa de bits
  • EMR_STRETCHDIBITS - Operaciones de mapa de bits escalado
  • EMR_ALPHABLEND - Operaciones de mezcla alfa
  • Renderizado de texto mejorado
  • Operaciones de trazado complejas

Opciones de renderizado

  • Vector Preservation: Mantiene la calidad de los gráficos vectoriales
  • Bitmap Fallback: Alternativa automática para gráficos complejos
  • Scaling Options: Control de escalado automático y manual
  • Quality Control: Configuración ajustable de calidad de renderizado
  • Canvas Layering: Set THPDFEmfOptions.CanvasOver when existing page content should paint above replayed Canvas metafile content
  • Control de redibujado: Deje THPDFEmfOptions.Redraw habilitado para usar la ruta de redibujado temporal predeterminada, o deshabilítelo para procesar directamente el metafile original
  • Recorte por marco: Establezca THPDFEmfOptions.UseFrame para recortar la salida EMF al marco del encabezado cuando los metafiles importados dependen de los límites del marco
  • Hatch Brush Patterns: EMF/WMF hatch brushes map to PDF tiling patterns so imported drawings keep their fill texture
  • Diagnóstico de objetos nulos: Los lápices y pinceles nulos permanecen invisibles de forma predeterminada; establezca THPDFEmfOptions.ShowNullPen y THPDFEmfOptions.ShowNullBrush cuando el diagnóstico requiera que esos trazos o rellenos se vean

Optimizaciones de rendimiento

  • Procesamiento eficiente en memoria para metarchivos grandes
  • Análisis optimizado de registros EMF
  • Caché inteligente para elementos repetidos
  • Menor consumo de memoria durante la conversión

Compatibilidad y estándares

  • Compatibilidad con Windows EMF 1.0 y EMF mejorado
  • Compatibilidad hacia atrás con Windows Metafile (WMF)
  • Consistencia de renderizado multiplataforma
  • Cumplimiento de los estándares de gráficos vectoriales PDF

Solución de problemas

Problemas comunes y soluciones:

  • Large Metafiles: Usa renderizado a mapa de bits para metarchivos muy grandes o complejos
  • Text Rendering: Asegúrate de que las fuentes estén disponibles en el sistema de destino
  • Complex Graphics: Considera el renderizado directo de EMF para obtener mejor calidad
  • Positioning Issues: Usa posicionamiento personalizado para una colocación precisa

Véase también