Enhanced EMF/WMF Metafile Support

نظرة عامة

يوفر HotPDF الآن دعمًا محسّنًا بوضوح لتنسيقات Enhanced Metafile (EMF) وWindows Metafile (WMF). يتضمن التنفيذ الجديد كشف التنسيق تلقائيًا، وخيارات وضع متعددة، وتحكمًا متقدمًا في التحجيم، وجودة عرض أفضل للرسوم المتجهة داخل مستندات PDF

Key Enhancements

  • كشف تلقائي لصيغ EMF/WMF ومعالجة مناسبة لكل منها
  • Automatic EMF/WMF format detection and appropriate processing
  • Multiple positioning options (center, top-left, custom coordinates)
  • Enhanced scaling and aspect ratio control
  • Direct EMF rendering for vector graphics preservation
  • Bitmap conversion option for compatibility
  • Improved memory management for large metafiles
  • معالجة أفضل للرسومات المتجهية والنصوص المعقدة

Position Control Options

يتضمن دعم metafile المحسن خيارات وضع مرنة:

  • mpCenter: توسيط الـ Metafile في الصفحة (السلوك الافتراضي)
  • mpLeftTop: Metafile displayed at the top-left corner (X=0, Y=0)
  • mpCustom: Metafile displayed at specified position (requires X, Y parameters)

Usage Examples

Basic Usage (Default Centered Display)


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

Enhanced Methods


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

التوابع المحسّنة

ينفذ دعم EMF/WMF المحسن عبر الوحدة HPDFEmf.pas، وهي توفر:

THPDFPage.ShowMetafile Overloads

  • ShowMetafile(MetaFile: TMetafile) - Default centered display
  • ShowMetafile(MetaFile: TMetafile; Position: THPDFMetafilePosition) - Position control
  • ShowMetafile(MetaFile: TMetafile; Position: THPDFMetafilePosition; X, Y: Single) - Custom positioning
  • ShowMetafile(MetaFile: TMetafile; Options: THPDFEmfOptions) - خيارات عرض لكل استدعاء
  • ShowMetafile(MetaFile: TMetafile; Position: THPDFMetafilePosition; X, Y: Single; Options: THPDFEmfOptions) - تحكم في الموضع مع خيارات عرض لكل استدعاء
  • ShowMetafileEx(MetaFile: TMetafile; Options: THPDFEmfOptions) - واجهة صفحة مباشرة مع تجاوز واحد لخيارات EMF/WMF في الرسم

Enhanced Processing Methods

  • EnhancedShowMetafile - معالجة متقدمة بميزات محسّنة
  • ShowEnhancedMetafile(Page, MetaFile, Options) - مساعد عام بخيارات عرض لكل استدعاء
  • ShowEnhancedMetafile(Page, MetaFile, Position, X, Y, Options) - مساعد عام بالتحكم في الموضع وبخيارات عرض لكل استدعاء
  • ShowEnhancedMetafile(Page, FileName, Options) - مساعد باسم الملف وبخيارات عرض لكل استدعاء
  • EnhancedShowMetafile - Advanced processing with enhanced features
  • RenderEmfDirect - Direct EMF rendering for vector preservation
  • RenderEmfAsBitmap - Bitmap conversion for compatibility
  • RenderWmfAsBitmap - WMF bitmap rendering with position control

Technical Implementation

يقدّم الدعم المحسّن لـ EMF/WMF عدة دوال جديدة:

  • THPDFEmfEnhanced: Core enhancement class for EMF processing
  • THPDFEmfPatcher: فئة مساعدة لتحويل EMF وعرضه
  • THPDFMetafilePosition: Enumeration for position control
  • Enhanced EMF Record Processing: Support for advanced EMF records

THPDFPageHelper وحدّ C++

في Delphi XE2 وما بعدها، تُحقن نسخ THPDFPage.ShowMetafile وTHPDFPage.EnhancedShowMetafile المذكورة أعلاه بواسطة THPDFPageHelper، وهو class helper معلن في الوحدة HPDFEmf؛ فلا يلزم سوى إضافة HPDFEmf إلى جملة uses لاستدعائها على أي نسخة من THPDFPage

Class helpers ميزة لغوية خاصة بـ Delphi ولا يمكن الوصول إليها من C++Builder: يستخدم المستدعون من C++ الدوال المساعدة العامة ShowEnhancedMetafile(Page, MetaFile, ...) المدرجة تحت Enhanced Processing Methods بدلًا منها، تمامًا كما يفعل مثال ConvertTo

في إصدارات Delphi السابقة لـ XE2 تتاح الوظيفة نفسها كإجراءات توافق عادية تتلقى الصفحة كأول معامل: THPDFPage_ShowMetafile(Page, MetaFile) وTHPDFPage_ShowMetafile(Page, MetaFile, Position, X, Y) وTHPDFPage_EnhancedShowMetafile(Page, MetaFile) وTHPDFPage_EnhancedShowMetafile(Page, MetaFile, Position, X, Y)

مفتاح التفعيل

يحمي المتغير EmfSupportEnabled: Boolean في HPDFEmf المسارَ المحسّن، وقيمته الافتراضية True؛ وضبطه على False يجعل كل عرض metafile يتراجع إلى مسار العرض الأساسي

استدعِ EnableEnhancedEmfSupport لإعادة تشغيل المسار المحسّن بعد الاستبعاد الاختياري، وهو النمط الذي تتبعه الأمثلة قبل أول استدعاء لـ ShowMetafile

Advanced Features

EMF Record Support

  • EMR_BITBLT - Bitmap operations
  • EMR_STRETCHDIBITS - Stretched bitmap operations
  • EMR_ALPHABLEND - Alpha blending operations
  • Enhanced text rendering
  • Complex path operations

Rendering Options

  • Vector Preservation: Maintains vector graphics quality
  • Bitmap Fallback: Automatic fallback for complex graphics
  • Scaling Options: Automatic and manual scaling control
  • Quality Control: Configurable rendering quality settings
  • تراكب الطبقات على الـ Canvas: اضبط THPDFEmfOptions.CanvasOver عندما ينبغي أن يُرسم محتوى الصفحة القائم فوق محتوى metafile المعاد تشغيله على الـ Canvas
  • التحكم في إعادة الرسم: أبقِ THPDFEmfOptions.Redraw ممكنًا لمسار إعادة الرسم المؤقت الافتراضي، أو عطّله لتحليل ملف metafile الأصلي مباشرة
  • قص الإطار: اضبط THPDFEmfOptions.UseFrame لقص ناتج EMF إلى إطار الترويسة عندما تعتمد ملفات metafile المستوردة على حدود الإطار
  • أنماط فرش التظليل: تُحوَّل فرش Hatch في EMF/WMF إلى أنماط بلاط PDF فيحتفظ الرسم المستورد بملمس تعبئته
  • تشخيص الكائنات الفارغة: أبقِ الأقلام الفارغة والفرش الفارغة غير مرئية افتراضيًا، أو اضبط THPDFEmfOptions.ShowNullPen وTHPDFEmfOptions.ShowNullBrush عندما تحتاج التشخيصات إلى إظهار تلك المسارات أو التعبئات

Performance Optimizations

  • Memory-efficient processing for large metafiles
  • Optimized EMF record parsing
  • Intelligent caching for repeated elements
  • Reduced memory footprint during conversion

Compatibility and Standards

  • Windows EMF 1.0 and Enhanced EMF support
  • Windows Metafile (WMF) backward compatibility
  • Cross-platform rendering consistency
  • PDF vector graphics standards compliance

Troubleshooting

Common Issues and Solutions:

  • ملفات Metafile الكبيرة: استخدم العرض بالصور النقطية مع الملفات الكبيرة جدًا أو المعقدة
  • عرض النصوص: تأكد من توفر الخطوط على النظام المستهدف
  • Complex Graphics: Consider direct EMF rendering for better quality
  • Positioning Issues: Use custom positioning for precise placement

انظر أيضا