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