|
Suporte aprimorado a metafiles EMF/WMF
Visão geral
O HotPDF agora oferece suporte significativamente aprimorado aos formatos Enhanced Metafile (EMF) e Windows Metafile (WMF). A nova implementação inclui detecção automática de formato, múltiplas opções de posicionamento, controle avançado de escala e qualidade de renderização melhorada para gráficos vetoriais em documentos PDF
Key Enhancements
- Detecção automática de formato EMF/WMF e processamento adequado
- Múltiplas opções de posicionamento (centro, canto superior esquerdo, coordenadas personalizadas)
- Controle aprimorado de escala e proporção
- Opções de renderização por chamada para compressão, escala, DC de referência, tratamento de estilo de caneta, preservação de hatch brush e diagnósticos de objetos nulos
- Renderização EMF direta para preservação de gráficos vetoriais
- Opção de conversão para bitmap por compatibilidade
- Gerenciamento de memória melhorado para metafiles grandes
- Tratamento melhor de gráficos vetoriais complexos e de texto
Position Control Options
The enhanced metafile support includes flexible positioning options:
- mpCenter: Metafile centralizado na página (comportamento padrão)
- mpLeftTop: Metafile exibido no canto superior esquerdo (X=0, Y=0)
- mpCustom: Metafile exibido na posição especificada (exige parâmetros X, Y)
Usage Examples
Uso básico (exibição centralizada padrão)
// 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;
Position Control Usage
// 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;
Opções de renderização por chamada
// 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;
Enhanced Methods
O suporte aprimorado a EMF/WMF introduz vários métodos novos:
THPDFPage.ShowMetafile Overloads
ShowMetafile(MetaFile: TMetafile) - exibição centralizada padrão
ShowMetafile(MetaFile: TMetafile; Position: THPDFMetafilePosition) - controle de posição
ShowMetafile(MetaFile: TMetafile; Position: THPDFMetafilePosition; X, Y: Single) - posicionamento personalizado
ShowMetafile(MetaFile: TMetafile; Options: THPDFEmfOptions) - opções de renderização por chamada
ShowMetafile(MetaFile: TMetafile; Position: THPDFMetafilePosition; X, Y: Single; Options: THPDFEmfOptions) - controle de posição com opções de renderização por chamada
ShowMetafileEx(MetaFile: TMetafile; Options: THPDFEmfOptions) - API direta de página com uma sobrescrita de opções EMF/WMF para um único desenho
Enhanced Processing Methods
EnhancedShowMetafile - processamento avançado com features aprimoradas
ShowEnhancedMetafile(Page, MetaFile, Options) - helper global com opções de renderização por chamada
ShowEnhancedMetafile(Page, MetaFile, Position, X, Y, Options) - helper global com controle de posição e opções de renderização por chamada
ShowEnhancedMetafile(Page, FileName, Options) - helper por nome de arquivo com opções de renderização por chamada
ShowEnhancedMetafile(Page, FileName, Position, X, Y, Options) - helper por nome de arquivo com controle de posição e opções de renderização por chamada
RenderEmfDirect - renderização EMF direta para preservação vetorial
RenderEmfAsBitmap - conversão para bitmap por compatibilidade
RenderWmfAsBitmap - renderização de bitmap WMF com controle de posição
Technical Implementation
O suporte aprimorado a EMF/WMF é implementado pela unidade HPDFEmf.pas, que fornece:
- THPDFEmfEnhanced: classe central de aprimoramento para processamento EMF
- THPDFEmfPatcher: classe utilitária para conversão e renderização EMF
- THPDFMetafilePosition: enumeração para controle de posição
- Enhanced EMF Record Processing: Suporte a registros EMF avançados
THPDFPageHelper e a fronteira com o C++
No Delphi XE2 e posteriores, as overloads de THPDFPage.ShowMetafile e THPDFPage.EnhancedShowMetafile listadas acima são injetadas por THPDFPageHelper, um class helper declarado na unidade HPDFEmf; basta adicionar HPDFEmf à cláusula uses para chamá-las em qualquer instância de THPDFPage
Class helpers são um recurso exclusivo da linguagem Delphi e ficam inacessíveis no C++Builder: chamadores C++ usam os helpers globais ShowEnhancedMetafile(Page, MetaFile, ...) listados em Enhanced Processing Methods, exatamente como faz a demo ConvertTo
Em versões do Delphi anteriores ao XE2, a mesma funcionalidade é exposta como procedures de compatibilidade simples que recebem a página como primeiro argumento: THPDFPage_ShowMetafile(Page, MetaFile), THPDFPage_ShowMetafile(Page, MetaFile, Position, X, Y), THPDFPage_EnhancedShowMetafile(Page, MetaFile) e THPDFPage_EnhancedShowMetafile(Page, MetaFile, Position, X, Y)
Chave de aprimoramento
O caminho aprimorado é controlado pela variável EmfSupportEnabled: Boolean em HPDFEmf, com padrão True; defini-la como False faz toda exibição de metafile cair no caminho básico de renderização
Chame EnableEnhancedEmfSupport para religar o caminho aprimorado depois de uma desativação, que é o padrão que as demos usam antes da primeira chamada a ShowMetafile
Advanced Features
EMF Record Support
- EMR_BITBLT - operações de bitmap
- EMR_STRETCHDIBITS - operações de bitmap esticado
- EMR_ALPHABLEND - operações de alpha blending
- Renderização de texto aprimorada
- Operações complexas de path
Rendering Options
- Vector Preservation: Mantém a qualidade dos gráficos vetoriais
- Bitmap Fallback: Fallback automático para gráficos complexos
- Scaling Options: Controle de escala automático e manual
- Quality Control: Configurações de qualidade de renderização ajustáveis
- Canvas Layering: Defina
THPDFEmfOptions.CanvasOver quando o conteúdo existente da página deve pintar acima do conteúdo de Canvas do metafile reproduzido
- Redraw Control: Deixe
THPDFEmfOptions.Redraw habilitado para o caminho padrão de redesenho temporário, ou desabilite-o para parsear o metafile original diretamente
- Frame Clipping: Defina
THPDFEmfOptions.UseFrame para fazer o clip da saída EMF ao frame do header quando os metafiles importados dependerem dos limites do frame
- Hatch Brush Patterns: Hatch brushes EMF/WMF mapeiam para padrões de tiling PDF, de modo que os desenhos importados mantenham a textura de preenchimento
- Null Object Diagnostics: Mantenha null pens e null brushes invisíveis por padrão, ou defina
THPDFEmfOptions.ShowNullPen e THPDFEmfOptions.ShowNullBrush quando os diagnósticos precisarem que esses paths ou preenchimentos fiquem visíveis
Performance Optimizations
- Processamento eficiente em memória para metafiles grandes
- Parse otimizado de registros EMF
- Cache inteligente para elementos repetidos
- Menor pegada de memória durante a conversão
Compatibilidade e padrões
- Suporte a Windows EMF 1.0 e Enhanced EMF
- Compatibilidade retroativa com Windows Metafile (WMF)
- Consistência de renderização entre plataformas
- Conformidade com os padrões de gráficos vetoriais PDF
Troubleshooting
Common Issues and Solutions:
- Large Metafiles: Use renderização em bitmap para metafiles muito grandes ou complexos
- Text Rendering: Garanta que as fontes estejam disponíveis no sistema alvo
- Complex Graphics: Considere a renderização EMF direta para melhor qualidade
- Positioning Issues: Use posicionamento personalizado para colocação precisa
See Also
|