نظرة عامة

العديد من صيغ المستندات مرتبطة ارتباطًا وثيقًا بالخطوط. على سبيل المثال، عندما يضيف المستخدم نصًا إلى مستند DOCX، يكون لهذا النص دائمًا خطًا محددًا. بعض صيغ المستندات عادةً ما تخزن بيانات الخط مضمّنة داخل ملف المستند نفسه، مثل PDF. لكن صيغ أخرى، مثل صيغ عائلة Office، غالبًا ما تعتمد على الخطوط المثبَّتة في نظام التشغيل.

هناك أيضًا الكثير من صيغ الخطوط. على سبيل المثال، معظم الخطوط المثبَّتة تُقدَّم بصيغة TTF (TrueType) وOTF (OpenType). تعمل مستندات Office Open XML أيضًا مع صيغة EOT (Embedded OpenType). وعلى الويب، تُستخدم صيغ WOFF وWOFF2 بصورة أكبر.

جدول المحتويات

جلب جميع الخطوط المستخدمة

الميزة الأكثر فائدة في سياق الخطوط هي سردها وإرجاعها. يقدم GroupDocs.Viewer طريقة خاصة GetAllFonts() — عندما يتم تحميل المستند إلى نسخة من الفئة Viewer ، استدعِ هذه الطريقة للحصول على قائمة بجميع الخطوط المستخدمة في هذا المستند. في القائمة المرجعة سيُقدَّم كل خط ككائن من النوع الذي يطبق واجهة IFontInfo . تحتوي هذه الواجهة على خصائص مشتركة لكل خط محتمل: اسم العائلة، النمط، الصيغة، ومحتوى ثنائي.

عائلات صيغ محددة، مثل WordProcessing وSpreadsheet وPresentation وPDF، لديها تطبيقات متخصصة للواجهة IFontInfo؛ هذه التطبيقات توفر بيانات إضافية خاصة بعائلة الصيغ المعنية. على سبيل المثال، تحتوي الأنواع WordProcessingFontInfo وPresentationFontInfo وPdfFontInfo على الخاصية المنطقية IsEmbedded — علامة تشير إلى مكان تخزين الخط (是否嵌入 في نص المستند المحمل أو مثبت في نظام التشغيل). يحتوي النوع SpreadsheetFontInfo على الكثير من بيانات الخط الخاصة بجداول البيانات: لونه، ما إذا كان تحت خط أو مشطوب. قد يحتوي WordProcessingFontInfo على اسم عائلة بديل. وهكذا.

مثال قصير أدناه:

using GroupDocs.Viewer;
// ...

const string filename = "sample.docx";
string inputPath = "\full\path\" + filename;

using (Viewer viewer = new Viewer(inputPath))
{
    Fonts.IFontInfo[] allFonts = viewer.GetAllFonts();
    Console.WriteLine("{0} fonts found in the '{1}' document", allFonts.Length, filename);
    foreach (Fonts.IFontInfo font in allFonts)
    {
        Console.WriteLine("Font '{0}' of '{1}' style has {2} bytes and is of '{3}' format",
            font.FamilyName,
            font.Style,
            font.Content.Length,
            font.Format);
    }
}

يرجى ملاحظة أن استخراج الخطوط مدعوم فقط لعائلات الصيغ WordProcessing وSpreadsheet وPresentation وPDF؛ بالنسبة لجميع صيغ المستندات الأخرى تُعيد طريقة GetAllFonts() مصفوفة فارغة.

معالجة الخطوط المفقودة

الموقف الذي يُنشأ فيه مستند على جهاز المؤلف ويستخدم خطًا باسم “AAA”، ثم يُعالج باستخدام GroupDocs.Viewer على جهاز العميل حيث الخط “AAA” مفقود، هو موقف شائع. في هذه الحالة يحاول GroupDocs.Viewer استبدال هذا الخط باستخدام قواعد استبدال خطية معقّدة: فهو يحلل بيانات المستند الوصفية، الأسماء البديلة للخط المفقود، إعدادات المستند، إعدادات نظام التشغيل، قائمة جميع الخطوط المتاحة المثبَّتة في نظام التشغيل، إلخ. أخيرًا، إذا كان نظام التشغيل «نظيفًا» ولا يحتوي على أي خطوط مثبتة، سيستبدل GroupDocs.Viewer الخط المفقود بالخط المضمّن داخل تجميع GroupDocs.Viewer (DLL)؛ هذا الخط سيعمل كـ«ملاذ أخير» في حال عدم توفر أي خطوط أخرى. على سبيل المثال، في عائلة صيغ WordProcessing، يخزن GroupDocs.Viewer داخليًا الخط المجاني «Fanwood».

في الوقت الحالي تقوم GroupDocs.Viewer بعملية استبدال الخط «صامتًا» أثناء عرض المستند (عند استدعاء طريقة Viewer.View()) — لا توجد رسائل أو أحداث تُبلغ عن تفعيل آلية استبدال الخط أو توضح أي خط مفقود وما هو الخط المستبدل به، ولا للمستند المحدد. هذه الميزة يصعب تنفيذها لأنها غير واضحة ولا توجد طريقة موحدة للإشعار.

مع ذلك، توفر GroupDocs.Viewer للمستخدمين طريقتين محتملتين لحل هذا الموقف: تحديد الخط المفقود يدويًا واستبداله يدويًا.

تحديد الخط المفقود

عندما يعلم المستخدم في البداية أن مستندًا ما يستخدم خطًا اسمه “AAA”، ويعلم أيضًا أن هذا الخط غير مثبت على الجهاز المستهدف حيث سيُعرض المستند، ولديه محتوى الثنائي لهذا الخط “AAA”، يمكنه تحديده قبل استدعاء طريقة Viewer.View().

لإضافة خط أو أكثر مخصص غير مثبت في نظام التشغيل المستهدف، يجب على المستخدم إضافة مصدر خط(مصادر) مخصص. مصدر الخط هو في الواقع مجلد يحتوي على خط أو أكثر. يُمثل ذلك بواسطة الفئة FolderFontSource. وفئة FontSettings تحتوي على طريقة SetFontSources() لإضافة مصادر الخط إلى GroupDocs.Viewer.

الكود التالي يوضح ذلك. لنفترض أن مستند “sample.docx” يستخدم خطًا نادرًا “AAA.ttf” غير مثبت على نظام التشغيل المستهدف. يضع المستخدم الملف “AAA.ttf” في المجلد "C:\custom_fonts" ثم يُنشئ نسخة من الفئة FolderFontSource التي تشير إلى هذا المجلد. ثم تُمرّر هذه النسخة إلى الفئة الثابتة FontSettings، وبعد ذلك يُعرض ملف “sample.docx” إلى صيغة HTML. كنتيجة لذلك، سيُستخدم الخط “AAA” في مستند HTML الناتج.

using GroupDocs.Viewer;
using GroupDocs.Viewer.Options;
using GroupDocs.Viewer.Fonts;
// ...

// Specify the font source.
FolderFontSource fontSource = 
    new FolderFontSource(@"C:\custom_fonts", SearchOption.TopFolderOnly);
FontSettings.SetFontSources(fontSource);

using (Viewer viewer = new Viewer("sample.docx"))
{
    // Create an HTML file.
    HtmlViewOptions viewOptions = HtmlViewOptions.ForEmbeddedResources();
    viewer.View(viewOptions);
}

استبدال الخط المفقود

عندما يعلم المستخدم في البداية أن مستندًا ما يستخدم خطًا اسمه “AAA”، ويعلم أيضًا أن هذا الخط غير مثبت على الجهاز المستهدف حيث سيُعرض المستند، لكنه لا يملك محتوى الخط الثنائي، يمكنه تحديد خط آخر “BBB” ليُستخدم بدلاً من الخط المفقود “AAA”. على عكس الحالة السابقة، يتم ذلك عبر خيارات العرض التي تُمرَّر إلى طريقة Viewer.View().

هذا الخيار يُدعى [DefaultFontName]، وهو خاصية من نوع السلسلة، مُعلن عنها في الفئة المجردة BaseViewOptions، لذا هي شائعة لجميع خيارات العرض: HtmlViewerOptions، PdfViewOptions، PngViewOptions، وJpgViewOptions.

عند تحديد هذا الخيار، يستخدم GroupDocs.Viewer الخط المحدد أثناء العرض بدلاً من أي خطوط غير متاحة. على سبيل المثال، إذا كان المستند يحتوي على خط يحتوي على أحرف غير إنجليزية، حدد اسم الخط الافتراضي لضمان أن يُستبدل أي خط مفقود بخط يحتوي على نفس مجموعة الأحرف. بالطبع، يجب أن يكون الخط المذكور في خاصية DefaultFontName مُثبتًا على نظام التشغيل الذي يُظهر فيه GroupDocs.Viewer المستند.

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

using GroupDocs.Viewer;
using GroupDocs.Viewer.Options;
// ...

using (Viewer viewer = new Viewer("sample.pptx"))
{
    // Create options for rendering HTML document with embedded resources
    HtmlViewOptions viewOptions = HtmlViewOptions.ForEmbeddedResources();
   
    // Specify a default font name is the options
    viewOptions.DefaultFontName = "Courier New";
    
    // Render input PPTX to output HTML
    viewer.View(viewOptions);
}          

استبعاد الخطوط عند التحويل إلى HTML

عند تحويل المستندات إلى صيغة HTML، تصدر GroupDocs.Viewer افتراضيًا جميع الخطوط المستخدمة إلى مستند HTML. هذا يضمن العرض الصحيح بغض النظر عما إذا كانت الخطوط المطلوبة موجودة على جهاز المشاهد أم لا. يمكن تخزين الخطوط في مستند HTML الناتج كموارد خارجية (HtmlViewOptions.ForExternalResources) أو تضمينها مباشرة في العلامات باستخدام مخطط data URI عبر الترميز base64 (HtmlViewOptions.ForEmbeddedResources). تدعم معظم صيغ المستندات التي تدعم الخطوط نفسها تصدير الخطوط إلى صيغة HTML: Microsoft Office (باستثناء Excel)، صيغ OpenDocument، الرسائل البريدية، PDF، الكتب الإلكترونية، إلخ.

مع ذلك، قد يكون هذا السلوك غير مرغوب فيه أحيانًا. فعندما تُضمّن الخطوط، تزيد بشكل كبير حجم مستند HTML الناتج. لذا إذا كان الجهاز أو المتصفح الذي سيعرض مستند HTML يحتوي بالفعل على جميع الخطوط المستخدمة مثبتة، يمكنه الاعتماد على الخطوط النظامية.

لحل هذه المتطلبات، توفر GroupDocs.Viewer إمكانية استبعاد الخطوط من مستند HTML المنتج، ويمكن القيام بذلك بطريقتين: استبعاد جميع الخطوط واستبعاد خطوط معينة فقط.

كلا الخيارين ممثلين في فئة HtmlViewOptions كخصائص مختلفة:

  • ExcludeFonts هي علامة تُعطّل تصدير جميع الخطوط المستخدمة إلى مستند HTML المُنتج عندما تكون مفعّلة (true). بشكل افتراضي هذه الخاصية معطّلة (false).
  • FontsToExclude هي قائمة من السلاسل، كل عنصر فيها يمثل اسم خط يجب استثناؤه من مستند HTML المُنتج. بشكل افتراضي القائمة فارغة — لا يُستثنى أي خط. يرجى ملاحظة أن هذا الخيار يعمل فقط إذا كانت خاصية ExcludeFonts مُعطلة (false).

يوضح المقتطفان البرمجيان أدناه كلا الاحتمالين: الأول يُظهر استخدام ExcludeFonts، والثاني — FontsToExclude.

using GroupDocs.Viewer;
using GroupDocs.Viewer.Options;
// ...

using (Viewer viewer = new Viewer("sample.docx"))
{
    // Create an HTML file.
    var viewOptions = HtmlViewOptions.ForEmbeddedResources();    
    viewOptions.ExcludeFonts = true;
    viewer.View(viewOptions);
}
using GroupDocs.Viewer;
using GroupDocs.Viewer.Options;
// ...

using (Viewer viewer = new Viewer("presentation.pptx"))
{
    // Create an HTML file.
    var viewOptions = HtmlViewOptions.ForEmbeddedResources();    
    viewOptions.FontsToExclude.Add("Times New Roman");// Exclude the Times New Roman font.
    viewOptions.FontsToExclude.Add("Arial");// Exclude the Arial font.
    viewer.View(viewOptions);
}

الخاتمة

يُركز GroupDocs.Viewer أساسًا على تحويل المستندات ذات الصيغ المختلفة إلى الصيغ «القابلة للعرض» الشائعة — HTML، PDF، JPEG، وPNG. ولكن خلال الفترة الأخيرة أضفنا عدة ميزات مفيدة تتعلق بمعالجة الخطوط تتيح مراجعة الخطوط المستخدمة، ضبط تصديرها، وتعديل استبدال الخطوط.

انظر أيضًا

احصل على نسخة تجريبية مجانية

يمكنك تنزيل نسخة تجريبية مجانية من GroupDocs.Viewer لـ .NET من releases.groupdocs.com. يمكنك أيضًا الحصول على رخصة مؤقتة لتجربة جميع الميزات والوظائف بدون قيود من هنا.