|
Soporte mejorado de metafiles EMF/WMF
Visión general
HotPDF proporciona ahora un soporte significativamente mejorado de los formatos Enhanced Metafile (EMF) y Windows Metafile (WMF). La nueva implementación incluye detección automática de formato, múltiples opciones de posicionamiento, control avanzado de escalado y una calidad de renderizado mejorada para gráficos vectoriales en documentos PDF
Mejoras clave
- Detección automática del formato EMF/WMF y procesamiento apropiado
- Múltiples opciones de posicionamiento (centro, arriba a la izquierda, coordenadas personalizadas)
- Escalado mejorado y control de la relación de aspecto
- Opciones de renderizado por llamada para compresión, escalado, DC de referencia, manejo de estilos de pluma, preservación de brochas de tramado y diagnósticos de objetos nulos
- Renderizado EMF directo para preservar los gráficos vectoriales
- Opción de conversión a bitmap por compatibilidad
- Gestión de memoria mejorada para metafiles grandes
- Mejor manejo de gráficos vectoriales complejos y de texto
Opciones de control de posición
El soporte de metafiles mejorados incluye opciones de posicionamiento flexibles:
- mpCenter: Metafile centrado en la página (comportamiento por defecto)
- mpLeftTop: Metafile mostrado en la esquina superior izquierda (X=0, Y=0)
- mpCustom: Metafile mostrado en la posición especificada (requiere parámetros X, Y)
Ejemplos de uso
Uso básico (presentación centrada por defecto)
// 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 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;
Opciones de renderizado por llamada
// 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;
Métodos mejorados
El soporte mejorado de EMF/WMF introduce varios métodos nuevos:
Sobrecargas de THPDFPage.ShowMetafile
ShowMetafile(MetaFile: TMetafile) - visualización centrada por defecto
ShowMetafile(MetaFile: TMetafile; Position: THPDFMetafilePosition) - Position control
ShowMetafile(MetaFile: TMetafile; Position: THPDFMetafilePosition; X, Y: Single) - Custom positioning
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 sobrescritura de las opciones EMF/WMF para un único dibujo
Métodos de procesado mejorado
EnhancedShowMetafile - procesamiento avanzado con funcionalidades mejoradas
ShowEnhancedMetafile(Page, MetaFile, Options) - helper global con opciones de renderizado por llamada
ShowEnhancedMetafile(Page, MetaFile, Position, X, Y, Options) - helper global con control de posición y opciones de renderizado por llamada
ShowEnhancedMetafile(Page, FileName, Options) - helper por nombre de archivo con opciones de renderizado por llamada
ShowEnhancedMetafile(Page, FileName, Position, X, Y, Options) - helper por nombre de archivo con control de posición y opciones de renderizado por llamada
RenderEmfDirect - Renderizado EMF directo para preservar vectores
RenderEmfAsBitmap - Conversión a bitmap por compatibilidad
RenderWmfAsBitmap - Renderizado WMF a bitmap con control de posición
Implementación técnica
El soporte mejorado de EMF/WMF está implementado mediante la unidad HPDFEmf.pas, que proporciona:
- THPDFEmfEnhanced: clase de mejora principal para el procesado de EMF
- THPDFEmfPatcher: clase de utilidad para conversión y renderizado de EMF
- THPDFMetafilePosition: enumeración para control de posición
- Procesado de registros EMF mejorados: soporte de registros EMF avanzados
THPDFPageHelper y el límite con C++
En Delphi XE2 y posteriores, las sobrecargas THPDFPage.ShowMetafile y THPDFPage.EnhancedShowMetafile listadas arriba las inyecta THPDFPageHelper, un class helper declarado en la unidad HPDFEmf, de modo que basta añadir 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 accesibles desde C++Builder: los llamadores de C++ usan en su lugar los helpers globales ShowEnhancedMetafile(Page, MetaFile, ...) listados bajo Métodos de procesado mejorado, exactamente igual que 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 de HPDFEmf, con valor por defecto True; asignarle False hace que toda visualización de metafiles recurra a la ruta de renderizado básica
Llame a EnableEnhancedEmfSupport para reactivar la ruta mejorada tras una desactivación, que es el patrón que los demos usan antes de su primera llamada a ShowMetafile
Características avanzadas
Soporte de registros EMF
- EMR_BITBLT - Operaciones de bitmap
- EMR_STRETCHDIBITS - Operaciones de bitmap estirado
- EMR_ALPHABLEND - Operaciones de mezcla alfa
- Renderizado de texto mejorado
- Operaciones de path complejas
Opciones de renderizado
- Preservación vectorial: mantiene la calidad de los gráficos vectoriales
- Fallback a bitmap: fallback automático para gráficos complejos
- Opciones de escalado: control de escalado automático y manual
- Control de calidad: ajustes de calidad de renderizado configurables
- Capas de canvas: establezca
THPDFEmfOptions.CanvasOver cuando el contenido existente de la página deba pintar sobre el contenido de canvas del metafile reproducido
- Control de redibujado: deje
THPDFEmfOptions.Redraw activado para la ruta temporal de redibujado por defecto, o desactívelo para parsear el metafile original directamente
- Recorte de marco: establezca
THPDFEmfOptions.UseFrame para recortar la salida EMF al marco de cabecera cuando los metafiles importados dependan de los límites del marco
- Patrones de hatch brush: los hatch brushes EMF/WMF se mapean a tiling patterns PDF para que los dibujos importados conserven su textura de relleno
- Diagnóstico de objetos nulos: mantenga plumas y brochas nulas invisibles por defecto, o establezca
THPDFEmfOptions.ShowNullPen y THPDFEmfOptions.ShowNullBrush cuando el diagnóstico necesite hacer visibles esos trazos o rellenos
Optimizaciones de rendimiento
- Procesado eficiente en memoria para metafiles grandes
- Parseo de registros EMF optimizado
- Cacheo inteligente de elementos repetidos
- Huella de memoria reducida durante la conversión
Compatibilidad y estándares
- Soporte de Windows EMF 1.0 y Enhanced EMF
- Compatibilidad hacia atrás con Windows Metafile (WMF)
- Consistencia de renderizado entre plataformas
- Conformidad con los estándares de gráficos vectoriales PDF
Solución de problemas
Problemas comunes y soluciones:
- Metafiles grandes: use renderizado a bitmap para metafiles muy grandes o complejos
- Renderizado de texto: asegúrese de que las fuentes estén disponibles en el sistema de destino
- Gráficos complejos: considere el renderizado EMF directo para mejor calidad
- Problemas de posicionamiento: use posicionamiento personalizado para una colocación precisa
Véase también
|