Ulepszona obsługa metaplików EMF/WMF

Omówienie

HotPDF zapewnia teraz znacznie rozszerzoną obsługę formatów Enhanced Metafile (EMF) i Windows Metafile (WMF) Nowa implementacja obejmuje automatyczne wykrywanie formatu, wiele opcji pozycjonowania, zaawansowane sterowanie skalowaniem, oraz lepszą jakość renderowania grafiki wektorowej w dokumentach PDF

Najważniejsze usprawnienia

  • Automatyczne wykrywanie formatu EMF/WMF i odpowiednie przetwarzanie
  • Wiele opcji pozycjonowania (środek, lewy górny róg, współrzędne niestandardowe)
  • Ulepszone skalowanie i kontrola proporcji
  • Bezpośrednie renderowanie EMF w celu zachowania grafiki wektorowej
  • Opcja konwersji do bitmapy dla zgodności
  • Usprawnione zarządzanie pamięcią dla dużych metaplików
  • Lepsza obsługa złożonej grafiki wektorowej i tekstu
  • Lepsza obsługa złożonej grafiki wektorowej i tekstu

Opcje kontroli położenia

Ulepszona obsługa metaplików obejmuje elastyczne opcje pozycjonowania:

  • mpCenter: Metaplik wyśrodkowany na stronie (zachowanie domyślne)
  • mpLeftTop: Metaplik wyświetlany w lewym górnym rogu (X=0, Y=0)
  • mpCustom: Metaplik wyświetlany w określonym położeniu (wymaga parametrów X, Y)

Przykłady użycia

Podstawowe użycie (domyślny widok wyśrodkowany)


// Przykład Delphi - domyślny widok wyśrodkowany
procedure ShowMetafileDefault;
var
  PDF: THotPDF;
  MetaFile: TMetafile;
begin
  PDF := THotPDF.Create(nil);
  MetaFile := TMetafile.Create;
  try
    PDF.BeginDoc;
    PDF.AddPage;

    // Wczytaj metaplik
    MetaFile.LoadFromFile('diagram.emf');

    // Wyświetl wyśrodkowany na stronie (domyślnie)
    PDF.CurrentPage.ShowMetafile(MetaFile);

    PDF.EndDoc;
  finally
    MetaFile.Free;
    PDF.Free;
  end;
end;
        

Użycie kontroli położenia


// Przykład Delphi - zaawansowane pozycjonowanie
procedure ShowMetafileAdvanced;
var
  PDF: THotPDF;
  MetaFile: TMetafile;
begin
  PDF := THotPDF.Create(nil);
  MetaFile := TMetafile.Create;
  try
    PDF.BeginDoc;
    PDF.AddPage;

    MetaFile.LoadFromFile('chart.wmf');

    // Wyświetl w lewym górnym rogu
    PDF.CurrentPage.ShowMetafile(MetaFile, mpLeftTop);

    // Wyświetl w niestandardowym położeniu
    PDF.CurrentPage.ShowMetafile(MetaFile, mpCustom, 100, 200);

    PDF.EndDoc;
  finally
    MetaFile.Free;
    PDF.Free;
  end;
end;
        

Ulepszone metody


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

Ulepszona obsługa EMF/WMF wprowadza kilka nowych metod:

Przeciążenia THPDFPage.ShowMetafile

Ulepszone metody przetwarzania

  • ShowMetafile(MetaFile: TMetafile) - domyślne wyświetlanie wyśrodkowane
  • ShowMetafile(MetaFile: TMetafile; Position: THPDFMetafilePosition) - kontrola pozycji
  • ShowMetafile(MetaFile: TMetafile; Position: THPDFMetafilePosition; X, Y: Single) - własne pozycjonowanie
  • ShowMetafile(MetaFile: TMetafile; Options: THPDFEmfOptions) - opcje renderowania per wywołanie
  • ShowMetafile(MetaFile: TMetafile; Position: THPDFMetafilePosition; X, Y: Single; Options: THPDFEmfOptions) - kontrola pozycji z opcjami renderowania per wywołanie
  • ShowMetafileEx(MetaFile: TMetafile; Options: THPDFEmfOptions) - bezpośrednie API strony z jednorazowym nadpisaniem opcji EMF/WMF

Metody przetwarzania rozszerzonego

  • EnhancedShowMetafile - przetwarzanie zaawansowane z rozszerzonymi funkcjami
  • ShowEnhancedMetafile(Page, MetaFile, Options) - helper globalny z opcjami renderowania per wywołanie
  • ShowEnhancedMetafile(Page, MetaFile, Position, X, Y, Options) - helper globalny z kontrolą pozycji i opcjami renderowania per wywołanie
  • ShowEnhancedMetafile(Page, FileName, Options) - helper po nazwie pliku z opcjami renderowania per wywołanie
  • ShowEnhancedMetafile(Page, FileName, Position, X, Y, Options) - helper po nazwie pliku z kontrolą pozycji i opcjami renderowania per wywołanie
  • RenderEmfDirect - bezpośredni render EMF z zachowaniem wektorów
  • RenderEmfAsBitmap - konwersja do bitmapy dla kompatybilności
  • RenderWmfAsBitmap - render WMF do bitmapy z kontrolą pozycji

Implementacja techniczna

Ulepszona obsługa EMF/WMF jest zaimplementowana w module HPDFEmf.pas, który udostępnia:

  • THPDFEmfEnhanced: Główna klasa usprawnień do przetwarzania EMF
  • THPDFEmfPatcher: Klasa narzędziowa do konwersji i renderowania EMF
  • THPDFMetafilePosition: Wyliczenie do kontroli położenia
  • Ulepszone przetwarzanie rekordów EMF: Obsługa zaawansowanych rekordów EMF

THPDFPageHelper a granica C++

Na Delphi XE2 i nowszych przeciążenia THPDFPage.ShowMetafile i THPDFPage.EnhancedShowMetafile wymienione powyżej są wstrzykiwane przez THPDFPageHelper, class helper zadeklarowany w jednostce HPDFEmf, więc dodanie HPDFEmf do klauzuli uses wystarcza, by wywoływać je na dowolnej instancji THPDFPage

Class helpers to funkcja języka dostępna tylko w Delphi i nieosiągalna z C++Builder: wywołujący C++ używają zamiast tego globalnych helperów ShowEnhancedMetafile(Page, MetaFile, ...) wymienionych przy metodach przetwarzania rozszerzonego, dokładnie tak jak robi to demo ConvertTo

W wersjach Delphi starszych niż XE2 ta sama funkcjonalność jest wystawiona jako zwykłe procedury kompatybilności przyjmujące stronę jako pierwszy argument: THPDFPage_ShowMetafile(Page, MetaFile), THPDFPage_ShowMetafile(Page, MetaFile, Position, X, Y), THPDFPage_EnhancedShowMetafile(Page, MetaFile) i THPDFPage_EnhancedShowMetafile(Page, MetaFile, Position, X, Y)

Przełącznik usprawnień

Ścieżkę rozszerzoną strzeże zmienna EmfSupportEnabled: Boolean w HPDFEmf, domyślnie True; ustawienie jej na False sprawia, że każdy wyświetlany metaplik wraca do podstawowej ścieżki renderowania

Wywołaj EnableEnhancedEmfSupport, by po rezygnacji włączyć ścieżkę rozszerzoną z powrotem — z tego wzorca korzystają dema przed swoim pierwszym wywołaniem ShowMetafile

Funkcje zaawansowane

Obsługa rekordów EMF

  • EMR_BITBLT - Operacje bitmapowe
  • EMR_STRETCHDIBITS - Operacje rozciągania bitmap
  • EMR_ALPHABLEND - Operacje mieszania alfa
  • Ulepszone renderowanie tekstu
  • Operacje na złożonych ścieżkach

Opcje renderowania

  • Zachowanie wektorów: Zachowuje jakość grafiki wektorowej
  • Awaryjne użycie bitmapy: Automatyczne rozwiązanie awaryjne dla złożonej grafiki
  • Opcje skalowania: Automatyczna i ręczna kontrola skalowania
  • Kontrola jakości: Konfigurowalne ustawienia jakości renderowania
  • Warstwy kanwy: ustaw THPDFEmfOptions.CanvasOver, gdy istniejąca treść strony ma być malowana ponad odtworzoną treścią metapliku Canvas
  • Sterowanie Redraw: zostaw włączone THPDFEmfOptions.Redraw dla domyślnej tymczasowej ścieżki przemalowania albo wyłącz je, by parsować oryginalny metaplik bezpośrednio
  • Przycinanie do ramki: ustaw THPDFEmfOptions.UseFrame, by przyciąć wyjście EMF do ramki z nagłówka, gdy importowane metapliki opierają się na granicach ramki
  • Wzory pędzli hatch: pędzle hatch EMF/WMF mapują się na wzory tiling PDF, więc importowane rysunki zachowują teksturę wypełnienia
  • Diagnostyka obiektów null: domyślnie utrzymuj niewidocznymi null-pióra i null-pędzle albo ustaw THPDFEmfOptions.ShowNullPen i THPDFEmfOptions.ShowNullBrush, gdy diagnostyka potrzebuje, by te ścieżki albo wypełnienia stały się widoczne

Optymalizacje wydajności

  • Oszczędne pamięciowo przetwarzanie dużych metaplików
  • Zoptymalizowane parsowanie rekordów EMF
  • Inteligentne buforowanie powtarzanych elementów
  • Zmniejszone użycie pamięci podczas konwersji

Zgodność i standardy

  • Obsługa Windows EMF 1.0 i Enhanced EMF
  • Zgodność wsteczna z Windows Metafile (WMF)
  • Spójność renderowania między platformami
  • Zgodność ze standardami grafiki wektorowej PDF

Rozwiązywanie problemów

Typowe problemy i rozwiązania:

  • Duże metapliki: Użyj renderowania bitmapowego dla bardzo dużych lub złożonych metaplików
  • Renderowanie tekstu: Upewnij się, że fonty są dostępne w systemie docelowym
  • Złożona grafika: Rozważ bezpośrednie renderowanie EMF dla lepszej jakości
  • Problemy z pozycjonowaniem: Użyj niestandardowego pozycjonowania dla precyzyjnego umieszczenia

Zobacz też