حدد TrueType موقع الخطوط

يصف هذا الموضوع السلوك الافتراضي لـ Aspose.Words عندما يبحث عن TrueType الخطوط، بما في ذلك الاختلافات الخاصة بنظام التشغيل، ويوضح كيفية تحديد مصادر خطوط المستخدم.

يتم استخدام فئة FontSourceBase لتحديد مصادر الخطوط المختلفة. هناك العديد من تطبيقات فئة FontSourceBase:

يتم شرح تفاصيل التنفيذ لبعض الفئات أدناه.

تحميل الخطوط من النظام

هناك فئة SystemFontSource خاصة يتم استخدامها دائما بشكل افتراضي. وهو يمثل جميع TrueType الخطوط المثبتة على النظام. لذلك، من الممكن إنشاء قائمة مصدر باستخدام SystemFontSource وأي مصادر أخرى مطلوبة:

يتم تعريف مثيل واحد من فئة SystemFontSource افتراضيا في FontSettings. في أنظمة التشغيل المختلفة، قد توجد الخطوط في أماكن مختلفة. ومع ذلك، فإن استخدام مثيل FontSettings لكل مستند ليس حلا مثاليا. في معظم الحالات، يجب أن يكون استخدام DefaultInstance كافيا.

هناك حاجة إلى مثيلات لكل مستند فقط إذا كان مطلوبا استخدام مصادر خطوط مختلفة لمستندات مختلفة، وهي حالة نادرة. يؤدي استخدام عدة حالات FontSettings إلى تقليل الأداء لأنها لا تشارك ذاكرة التخزين المؤقت.

أين Aspose.Words يبحث عن TrueType الخطوط على Windows

في معظم الحالات، لا يواجه المستخدمون Windows مشاكل كبيرة مع الخطوط المفقودة أو التخطيطات غير الصحيحة. عادة، Aspose.Words يمر عبر مستند، وعندما يواجه رابط الخط، فإنه يجلب بيانات الخط بنجاح من مجلد النظام.

في Windows، Aspose.Words يأخذ أولا جميع الخطوط المتاحة من المجلد _%windir%\Fonts. سيعمل هذا الإعداد من أجلك معظم الوقت. يمكنك فقط تحديد مجلدات الخطوط الخاصة بك إذا كنت بحاجة إلى ذلك. Aspose.Words يبحث أيضا عن خطوط إضافية مسجلة في مفتاح التسجيل HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts. وبالإضافة إلى ذلك، Windows 10 تمكن تركيب الخطوط للمستخدم الحالي. يتم وضع الخطوط في مجلد %userprofile%\AppData\Local\Microsoft\Windows\Fonts ويتم تحديدها أيضا في سجل HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Fonts، حيث سيبحث Aspose.Words عن هذه الخطوط.

إذا كان المستند يحتوي على خطوط مضمنة، فيمكن Aspose.Words قراءة بيانات الخط ذات الصلة من المستند واستخدامها لإنشاء تخطيط المستند. قد تحتوي المستندات أيضا على روابط لخطوط غير موجودة في مجلدات النظام، وفي هذه الحالة تعمل السيناريوهات التالية:

  • يمكن للمستخدمين إعداد مصادر خطوط جديدة من خلال فئة FontSettings
  • Aspose.Words يمكن محاولة استبدال الخط غاب مع واحد مماثل

الخطوط على الأنظمة غيرWindows

Aspose.Words سيبحث عن الخطوط في مجلدات خطوط النظام. يمكن رؤية قائمة بهذه المجلدات بواسطة طريقة GetSystemFontFolders. إذا لم يتم العثور على الخطوط المعتمدة، Aspose.Words سوف تستخدم المدمج في الخط الافتراضي فانوود.الصندوق.

منذ مقاييس الخط من Windows وغيرWindows OS مختلفة، Aspose.Words يفعل كل شيء ممكن للعثور على خط مماثل وبناء تخطيط مماثل للأصل. ومع ذلك، هذا ليس ممكنا دائما. في هذه الحالات، يجب استخدام فئة FontSettings لإضافة خطوط مخصصة أو قواعد الاستبدال.

أين Aspose.Words يبحث عن TrueType الخطوط على Linux

قد تخزن التوزيعات Linux المختلفة الخطوط في مجلدات مختلفة. Aspose.Words يبحث عن الخطوط في عدة مواقع. بشكل افتراضي، Aspose.Words يبحث عن الخطوط في جميع المواقع التالية: /usr/share/fonts, /usr/local/share/fonts, /usr/X11R6/lib/X11/fonts. سيعمل هذا السلوك الافتراضي لمعظم التوزيعات Linux، ولكن ليس مضمونا العمل طوال الوقت، وفي هذه الحالة قد تحتاج إلى تحديد موقع خطوط النوع الحقيقي بشكل صريح. للقيام بذلك،تحتاج إلى معرفة مكان تثبيت TrueType الخطوط على التوزيع Linux.

حيث Aspose.Words يبحث عن TrueType الخطوط على ماك OS س

Aspose.Words يبحث عن الخطوط في المجلد /Library/Fonts، وهو الموقع القياسي ل TrueType الخطوط على ماك OS س. في حين أن هذا الإعداد سوف تعمل بالنسبة لك أكثر من مرة، قد تحتاج إلى تحديد الخطوط الخاصة بك المجلدات في حالة عندما كنت في حاجة إليها.

TrueType الخطوط على Android

في Android، يتم تغليف سير عمل الخطوط في فئة المحرف. هناك خمسة أنواع من المحارف، يمثل كل محرف مجموعة من عائلات الخطوط المتشابهة:

  • DEFAULT
  • DEFAULT_BOLD
  • MONOSPACE
  • SANS_SERIF
  • SERIF

على سبيل المثال، وفقا لـ Android الخطوط.شمل ملف التكوين، " تايمز “ينتمي إلى عائلة” الرقيق " حتى NotoSerif-العادية.سيتم استخدام الصناديق عند طلب " الأوقات:

الخطوط.شمل

<family name="serif">
        <font weight="400" style="normal">NotoSerif-Regular.ttf</font>
        <font weight="700" style="normal">NotoSerif-Bold.ttf</font>
        <font weight="400" style="italic">NotoSerif-Italic.ttf</font>
        <font weight="700" style="italic">NotoSerif-BoldItalic.ttf</font>
</family>
<alias name="times" to="serif" />
<alias name="times new roman" to="serif" />

للبحث عن خطوط مماثلة، يتم استخدام الاستراتيجيات الموضحة سابقا.

بالإضافة إلى ذلك، Aspose.Words لديها قائمة البدائل الخاصة بها لمنصة Android.

لنفترض أن المستند يحتوي على PMingLiيو-إكستب الخط، أولا وقبل كل شيء، Aspose.Words تبحث عن الخط المطلوب داخل مصادر النظام.

القائمة الافتراضية لمجلدات الخط Android هي:

  • / النظام / الخطوط
  • / النظام / الخط
  • / البيانات / الخطوط

ال Aspose.Words يبحث من خلال المصادر المعرفة من قبل المستخدم والتي تم تعيينها باستخدام الطريقة:

Java

fontSettings->SetFontsFolder(u"C:\\MyFonts\\", true);

في حالة تحديد بديل صريح، يستبدل Aspose.Words الخط المفقود باقتراح المستخدم:

Java

fontSettings->get_SubstitutionSettings()->get_TableSubstitution()->SetSubstitutes(u"PMingLiU-ExtB", System::MakeArray<System::String>({ u"Liberation Serif" }));

إذا لم تنجح أي من القواعد، Aspose.Words تحقق من جدول الاستبدال الداخلي. إذا كان الجدول يحتوي على معلومات حول ملاءمة جيدة، فسيتم استبدال الخط. في حالتنا Aspose.Words سوف حدد Typeface.SERIF. ولكن إذا كان الجدول لا يعرف أي شيء عن الخط المطلوب ثم Aspose.Words تلتقط الخط على أساس خاص MS قواعد كلمة أو أقرب مسافة في الفضاء بانوز.

TrueType الخطوط على .NET Core و Xamarin

بالنسبة إلى .NET Core و Xamarin، تنطبق نفس القاعدة على Aspose.Words ل Java الإصدار. بشكل افتراضي، تتوفر جميع خطوط النظام في النظام الأساسي الذي يتم تشغيل التطبيق عليه. يمكن العثور على قائمة المجلدات التي سيتم إجراء البحث فيها عن طريق استدعاء الطريقة:

Java

SystemFontSource()->GetAvailableFonts()

تحميل الخطوط من المجلد

إذا كان المستند الذي تتم معالجته يحتوي على روابط لخطوط غير موجودة على النظام، أو كنت لا تريد إضافتها إلى مجلد النظام، أو كنت تفتقر إلى الأذونات، فإن أفضل حل هو إضافة مجلد بخطوطك الخاصة باستخدام طريقة SetFontsSources. سيسمح ذلك باستبدال مصدر النظام بمصدر مستخدم. لن يبحث Aspose.Words بعد الآن عن الخطوط في مجلد التسجيل أو Windows\Font وبدلا من ذلك فقط ابحث عن الخطوط داخل المجلد(المجلدات) المحددة. ستعيد طريقة GetFontSources القيم المقابلة.

حدد مجلد خط واحد أو عدة مجلدات

الطرق SetFontsFolder و SetFontsFolders هي اختصارات لطريقة SetFontSources مع واحد أو عدة حالات FolderFontSource. تستخدم هذه الطرق للإشارة إلى المكان Aspose.Words يجب أن تبحث عن الخطوط. إذا كان المجلد غير موجود أو لا يمكن الوصول إليه، Aspose.Words يتجاهل هذا المجلد فقط. إذا تم تجاهل جميع المجلدات، بما في ذلك مصادر استبدال الخط، Aspose.Words سيستخدم خط فانوود كافتراضي.

يوضح المثال التالي كيفية تعيين المجلد أو المصدر، والذي سيستخدمه Aspose.Words لاحقا للبحث عن TrueType الخطوط أثناء عرض الخطوط أو تضمينها:

يمكنك تنزيل ملف القالب لهذا المثال من Aspose.Words GitHub.

تتحكم معلمة منطقية إضافية في ما إذا كان يتم فحص الخطوط بشكل متكرر من خلال جميع المجلدات، وبالتالي مسح جميع المجلدات الفرعية لمجلد محدد. يوضح المثال التالي كيفية تعيين Aspose.Words للبحث في مجلدات متعددة للخطوط TrueType عند عرض الخطوط أو تضمينها:

لاحظ الأولويات. إذا كانت هناك خطوط بنفس اسم العائلة والنمط في مصادر خطوط مختلفة، فسيقوم Aspose.Words بتحديد الخط من المصدر بأولوية أعلى. انظر وصف حقل “الأولوية” أدناه.

إذا كنت لا ترغب في استخدام خطوط النظام على الإطلاق، Aspose.Words يسمح لك بتجاهلها واستخدام الخطوط الخاصة بك فقط:

C++

System::SharedPtr<FontSettings> fontSettings = System::MakeObject<FontSettings>()->get_DefaultInstance();
fontSettings->SetFontsFolder(u"C:\\MyFonts\\", true);

الملكية ذات الأولوية

يتم استخدام الخاصية Priority عندما تكون هناك خطوط بنفس اسم العائلة والنمط في مصادر خطوط مختلفة. في هذه الحالة Aspose.Words يحدد الخط من المصدر بقيمة أولوية أعلى. على سبيل المثال، يوجد إصدار قديم من الخط في مجلد النظام وأضاف العميل إصدارا جديدا من نفس الخط في مجلد مخصص.

C++

System::SharedPtr<FolderFontSource> folderFontSource = System::MakeObject<FolderFontSource>(u"C:\\MyFonts\\", true, 1);

تحميل الخطوط من تيار

Aspose.Words يوفر فئة StreamFontSource، والتي تسمح بتحميل الخطوط من الدفق. لاستخدام مصدر خط الدفق، يحتاج المستخدم إلى إنشاء فئة مشتقة من StreamFontSource وتوفير تنفيذ لطريقة OpenFontDataStream. يمكن استدعاء طريقة OpenFontDataStream عدة مرات. لأول مرة، سيتم استدعاؤه عندما يقوم Aspose.Words بمسح مصادر الخطوط المتوفرة للحصول على قائمة بالخطوط المتاحة. في وقت لاحق قد يتم استدعاؤه إذا تم استخدام الخط في المستند لتحليل بيانات الخط ولتضمين بيانات الخط في بعض تنسيقات الإخراج. StreamFontSource قد يكون مفيدا لأنه يسمح بتحميل بيانات الخط فقط عندما يكون مطلوبا، وليس لتخزينه في الذاكرة لعمر FontSettings.

StreamFontSource

حفظ وتحميل ذاكرة التخزين المؤقت للبحث عن الخط

عند البحث عن خط لأول مرة، Aspose.Words يتكرر على مصادر الخط المحددة من قبل المستخدم ويشكل ذاكرة تخزين مؤقت للبحث عن الخط استنادا إلى البيانات من هذه المصادر. وبالتالي، ستجمع ذاكرة التخزين المؤقت معلومات حول الخطوط المتاحة: عائلة الخطوط والنمط واسم الخط الكامل وغيرها. في المكالمات اللاحقة، يبحث Aspose.Words عن معلومات حول الخط المطلوب باسمه في ذاكرة التخزين المؤقت للبحث عن الخطوط، وبعد ذلك يوزع الملفات المحددة لاستخدام الخط.

يستغرق إجراء تحليل جميع ملفات الخطوط المتاحة لتهيئة ذاكرة التخزين المؤقت وقتا طويلا. Aspose.Words يسمح لك بحفظ وتحميل ذاكرة التخزين المؤقت باستخدام طريقة SaveSearchCache لحل مشكلة الأداء. بمعنى، يمكن للمستخدم تحميل ذاكرة تخزين مؤقت محفوظة مسبقا من ملف وتخطي خطوة تحليل جميع ملفات الخطوط المتاحة.

احصل على قائمة بالخطوط المتاحة

إذا كنت ترغب في الحصول على قائمة الخطوط المتاحة، والتي، على سبيل المثال، يمكن استخدامها لعرض مستند PDF، يمكنك استخدام طريقة GetAvailableFonts، كما هو موضح في مثال الكود التالي. تحدد فئة PhysicalFontInfo معلومات حول الخط الفعلي المتاح لمحرك الخط Aspose.Words: