Geliştirilmiş EMF/WMF desteği

Genel bakış

HotPDF artık Enhanced Metafile (EMF) ve Windows Metafile (WMF) biçimleri için belirgin biçimde gelişmiş destek sunuyor. Yeni uygulama; otomatik biçim algılama, çok sayıda konumlama seçeneği, gelişmiş ölçekleme kontrolü ve PDF belgelerindeki vektör grafikleri için iyileştirilmiş çizim kalitesi içeriyor.

Öne çıkan geliştirmeler

  • Otomatik EMF/WMF biçim algılama ve uygun işleme
  • Çok sayıda konumlama seçeneği (orta, sol üst, özel koordinatlar)
  • Gelişmiş ölçekleme ve en-boy oranı kontrolü
  • Sıkıştırma, ölçekleme, referans DC, kalem stili işlemesi, tarama fırçası korunumu ve boş nesne tanılaması için çağrı başına çizim seçenekleri
  • Vektör grafik korunumu için doğrudan EMF çizimi
  • Uyumluluk için bitmap dönüşümü seçeneği
  • Büyük meta dosyaları için iyileştirilmiş bellek yönetimi
  • Karmaşık vektör grafikleri ve metnin daha iyi işlenmesi

Konum kontrol seçenekleri

Gelişmiş meta dosya desteği esnek konumlama seçenekleri içerir:

  • mpCenter: Meta dosya sayfada ortalanır (varsayılan davranış)
  • mpLeftTop: Meta dosya sol üst köşede gösterilir (X=0, Y=0)
  • mpCustom: Meta dosya belirtilen konumda gösterilir (X, Y parametreleri gerekir)

Kullanım örnekleri

Temel kullanım (varsayılan ortalanmış gösterim)


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

Konum kontrol kullanımı


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

Çağrı başına çizim seçenekleri


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

Gelişmiş metotlar

Gelişmiş EMF/WMF desteği birkaç yeni metot getirir:

THPDFPage.ShowMetafile aşırı yüklemeleri

  • ShowMetafile(MetaFile: TMetafile) - Varsayılan ortalanmış gösterim
  • ShowMetafile(MetaFile: TMetafile; Position: THPDFMetafilePosition) - Konum kontrolü
  • ShowMetafile(MetaFile: TMetafile; Position: THPDFMetafilePosition; X, Y: Single) - Özel konumlama
  • ShowMetafile(MetaFile: TMetafile; Options: THPDFEmfOptions) - Çağrı başına çizim seçenekleri
  • ShowMetafile(MetaFile: TMetafile; Position: THPDFMetafilePosition; X, Y: Single; Options: THPDFEmfOptions) - Çağrı başına çizim seçenekleriyle konum kontrolü
  • ShowMetafileEx(MetaFile: TMetafile; Options: THPDFEmfOptions) - tek çizimlik EMF/WMF seçenek geçersiz kılmalı doğrudan sayfa API'si

Gelişmiş işleme metotları

  • EnhancedShowMetafile - Gelişmiş özelliklerle ileri işleme
  • ShowEnhancedMetafile(Page, MetaFile, Options) - Çağrı başına çizim seçenekli global yardımcı
  • ShowEnhancedMetafile(Page, MetaFile, Position, X, Y, Options) - Konum kontrolü ve çağrı başına çizim seçenekleri olan global yardımcı
  • ShowEnhancedMetafile(Page, FileName, Options) - Çağrı başına çizim seçenekleri olan dosya adı yardımcısı
  • ShowEnhancedMetafile(Page, FileName, Position, X, Y, Options) - Konum kontrolü ve çağrı başına çizim seçenekleri olan dosya adı yardımcısı
  • RenderEmfDirect - Vektör korunumu için doğrudan EMF çizimi
  • RenderEmfAsBitmap - Uyumluluk için bitmap dönüşümü
  • RenderWmfAsBitmap - Konum kontrollü WMF bitmap çizimi

Teknik uygulama

Gelişmiş EMF/WMF desteği, şunları sağlayan HPDFEmf.pas birimi üzerinden uygulanır:

  • THPDFEmfEnhanced: EMF işlemesi için çekirdek geliştirme sınıfı
  • THPDFEmfPatcher: EMF dönüşümü ve çizimi için yardımcı sınıf
  • THPDFMetafilePosition: Konum kontrolü için enumerasyon
  • Gelişmiş EMF kayıt işlemesi: İleri EMF kayıtları desteği

THPDFPageHelper ve C++ sınırı

Delphi XE2 ve sonrasında yukarıda listelenen THPDFPage.ShowMetafile ve THPDFPage.EnhancedShowMetafile overload'ları, HPDFEmf biriminde bildirilen bir class helper olan THPDFPageHelper tarafından enjekte edilir; yani uses cümlesine HPDFEmf eklemek, herhangi bir THPDFPage örneği üzerinde onları çağırmak için gereken tek şeydir

Class helper'lar yalnızca Delphi'ye özgü bir dil özelliğidir ve C++Builder'dan erişilemez: C++ çağıranlar bunun yerine Gelişmiş İşleme Metotları altında listelenen global ShowEnhancedMetafile(Page, MetaFile, ...) yardımcılarını kullanır; tıpkı ConvertTo demosunun yaptığı gibi

XE2 öncesi Delphi sürümlerinde aynı işlevsellik, sayfayı ilk argüman olarak alan düz uyumluluk prosedürleri olarak sunulur: THPDFPage_ShowMetafile(Page, MetaFile), THPDFPage_ShowMetafile(Page, MetaFile, Position, X, Y), THPDFPage_EnhancedShowMetafile(Page, MetaFile) ve THPDFPage_EnhancedShowMetafile(Page, MetaFile, Position, X, Y)

Geliştirme anahtarı

Gelişmiş yol, HPDFEmf içindeki, varsayılanı True olan EmfSupportEnabled: Boolean değişkeniyle korunur; onu False yapmak her meta dosya gösterimini temel render yoluna düşürür

Vazgeçtikten sonra gelişmiş yolu yeniden açmak için EnableEnhancedEmfSupport çağırın; demolar ilk ShowMetafile çağrılarından önce bu deseni kullanır

İleri özellikler

EMF kayıt desteği

  • EMR_BITBLT - Bitmap işlemleri
  • EMR_STRETCHDIBITS - Gerilmiş bitmap işlemleri
  • EMR_ALPHABLEND - Alfa harmanlama işlemleri
  • Gelişmiş metin çizimi
  • Karmaşık yol işlemleri

Çizim seçenekleri

  • Vektör korunumu: Vektör grafik kalitesini korur
  • Bitmap geri dönüşü: Karmaşık grafikler için otomatik yedek
  • Ölçekleme seçenekleri: Otomatik ve manuel ölçekleme kontrolü
  • Kalite kontrolü: Yapılandırılabilir çizim kalitesi ayarları
  • Tuval katmanlaması: Var olan sayfa içeriği, yeniden oynatılan Canvas meta dosyası içeriğinin üzerinde çizilecekse THPDFEmfOptions.CanvasOver ayarlayın
  • Yeniden çizim kontrolü: Varsayılan geçici yeniden çizim yolu için THPDFEmfOptions.Redraw'u etkin bırakın ya da özgün meta dosyayı doğrudan ayrıştırmak için devre dışı bırakın
  • Çerçeve kırpma: İçe aktarılan meta dosyalar çerçeve sınırlarına güveniyorsa EMF çıktısını başlık çerçevesine kırpmak için THPDFEmfOptions.UseFrame'i ayarlayın
  • Tarama fırçası desenleri: EMF/WMF tarama fırçaları PDF döşeme desenlerine eşlenir; böylece içe aktarılan çizimler dolgu dokusunu korur
  • Boş nesne tanılaması: Boş kalemleri ve boş fırçaları varsayılan olarak görünmez tutun ya da tanılama, o yolların veya dolguların görünür olmasını gerektiriyorsa THPDFEmfOptions.ShowNullPen ile THPDFEmfOptions.ShowNullBrush ayarlayın

Performans iyileştirmeleri

  • Büyük meta dosyalar için bellek verimli işleme
  • İyileştirilmiş EMF kayıt ayrıştırma
  • Yinelenen öğeler için akıllı önbellekleme
  • Dönüştürme sırasında küçülmüş bellek ayak izi

Uyumluluk ve standartlar

  • Windows EMF 1.0 ve Enhanced EMF desteği
  • Windows Metafile (WMF) geriye dönük uyumluluk
  • Platformlar arası çizim tutarlılığı
  • PDF vektör grafik standartları uyumluluğu

Sorun giderme

Yaygın sorunlar ve çözümleri:

  • Büyük meta dosyalar: Çok büyük ya da karmaşık meta dosyalar için bitmap çizimi kullanın
  • Metin çizimi: Hedef sistemde yazı tiplerinin bulunduğundan emin olun
  • Karmaşık grafikler: Daha iyi kalite için doğrudan EMF çizimini düşünün
  • Konumlama sorunları: Hassas yerleştirme için özel konumlama kullanın

Ayrıca bakın