تكوين الخطوط لعرض أوراق العمل باستخدام C++

سيناريوهات الاستخدام المحتملة

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

اختيار الخطوط

فيما يلي العملية التي تتبعها واجهات برمجة تطبيقات Aspose.Cells خلف الكواليس:

  1. تحاول الواجهة البرمجية الخارجية العثور على الخطوط في نظام الملفات تطابق اسم الخط المستخدم في الجدول الخليوي.
  2. إذا لم يتمكن API من العثور على الخطوط بنفس الاسم تمامًا، فإنه يحاول استخدام الخط الافتراضي المحدد تحت الخاصية DefaultStyle.Font في الـWorkbook.
  3. إذا لم يتمكن API من تحديد موقع الخط المحدد في خاصية DefaultStyle.Font للـWorkbook، فإنه يحاول استخدام الخط المحدد في PdfSaveOptions.PaginatedSaveOptions(PaginatedSaveOptions_Impl impl)* أو الخاصية ImageOrPrintOptions.DefaultFont.
  4. إذا لم يتمكن API من تحديد موقع الخط المحدد في PdfSaveOptions.PaginatedSaveOptions(PaginatedSaveOptions_Impl impl)* أو الخاصية ImageOrPrintOptions.DefaultFont، فإنه يحاول استخدام الخط المحدد في الخاصية FontConfigs.DefaultFontName.
  5. إذا لم يتمكن API من تحديد موقع الخط المحدد في الخاصية FontConfigs.DefaultFontName، فإنه يحاول اختيار الخطوط الأنسب من جميع الخطوط المتاحة.
  6. أخيرًا، إذا لم يتمكن API من العثور على أي خطوط على نظام الملفات، فإنه يعرض الورقة باستخدام خط Arial.

تعيين مجلدات الخط المخصصة

يبحث API الخاص بـ Aspose.Cells في الدليل الافتراضي لنظام تشغيل الخطوط المطلوبة. إذا كانت الخطوط المطلوبة غير متاحة في دليل الخطوط في النظام، يبحث API في أدلة مخصصة (محددة من قبل المستخدم). توفر فئة FontConfigs عدة طرق لضبط أدلة الخطوط المخصصة، كما هو موضح أدناه:

  1. FontConfigs.SetFontFolder: تُفيد هذه الطريقة إذا كان هناك مجلد واحد فقط يجب تعيينه.
  2. FontConfigs.SetFontFolders: هذه الطريقة مفيدة عندما تكون الخطوط موجودة في عدة مجلدات، ويرغب المستخدم في تعيين جميع المجلدات بشكل منفصل بدلاً من دمج جميع الخطوط في مجلد واحد.
  3. FontConfigs.SetFontSources: هذا الآلية مفيدة عندما يرغب المستخدم في تحميل الخطوط من مجلدات متعددة، أو ملف خط واحد، أو بيانات الخط من مصفوفة من البايتات.
#include <iostream>
#include <fstream>
#include "Aspose.Cells.h"
using namespace Aspose::Cells;

Vector<uint8_t> GetDataFromFile(const U16String& file)
{
    std::string f = file.ToUtf8();
    // open a file 
    std::ifstream fileStream(f, std::ios::binary);

    if (!fileStream.is_open()) {
        std::cerr << "Failed to open the file." << std::endl;
        return 1;
    }

    // Get file size
    fileStream.seekg(0, std::ios::end);
    std::streampos fileSize = fileStream.tellg();
    fileStream.seekg(0, std::ios::beg);

    // Read file contents into uint8_t array
    uint8_t* buffer = new uint8_t[fileSize];
    fileStream.read(reinterpret_cast<char*>(buffer), fileSize);
    fileStream.close();

    Vector<uint8_t>data(buffer, fileSize);
    delete[] buffer;

    return data;
}

int main()
{
    Aspose::Cells::Startup();

    U16String srcDir(u"..\\Data\\01_SourceDirectory\\");
    U16String fontFolder1 = srcDir + u"Arial";
    U16String fontFolder2 = srcDir + u"Calibri";
    U16String fontFile = srcDir + u"arial.ttf";

    FontConfigs::SetFontFolder(fontFolder1, true);

    Vector<U16String> fontFolders{ fontFolder1 , fontFolder2 };

    FontConfigs::SetFontFolders(fontFolders, false);

    FolderFontSource sourceFolder(fontFolder1, false);
    FileFontSource sourceFile(fontFile);
    Vector<uint8_t> fontData = GetDataFromFile(fontFile);
    MemoryFontSource sourceMemory(fontData);

    Vector<FontSourceBase> fontSources{ sourceFolder ,sourceFile ,sourceMemory };

    FontConfigs::SetFontSources(fontSources);

    Aspose::Cells::Cleanup();
}

آلية الاستبدال للخطوط

توفر واجهات برمجة التطبيقات Aspose.Cells أيضًا القدرة على تحديد خطوط بديلة لأغراض العرض. هذه الآلية مفيدة عندما لا يتوفر الخط المطلوب على الجهاز الذي يتم عليه التحويل. يمكن للمستخدمين توفير قائمة بأسماء الخطوط كبديل للخط المطلوب أصلاً. لتحقيق ذلك، كشفت واجهات برمجة التطبيقات Aspose.Cells عن طريقة FontConfigs.SetFontSubstitutes، التي تقبل معلمين اثنين. المعامل الأول هو من نوع string، والذي يجب أن يكون اسم الخط الذي يحتاج إلى استبداله. المعامل الثاني هو مصفوفة من نوع string. يمكن للمستخدمين توفير قائمة بأسماء الخطوط كبديل عن الاسم الأصلي للخط (المحدد في المعامل الأول).

إليك سيناريو استخدام بسيط:

#include <iostream>
#include "Aspose.Cells.h"
using namespace Aspose::Cells;

int main()
{
    Aspose::Cells::Startup();

    // Substituting the Arial font with Times New Roman & Calibri
    Vector<U16String> substituteFonts{ u"Times New Roman", u"Calibri" };
    FontConfigs::SetFontSubstitutes(u"Arial", substituteFonts);

    Aspose::Cells::Cleanup();
}

تجميع المعلومات

بالإضافة إلى الطرق المذكورة أعلاه، توفر واجهات برمجة التطبيقات Aspose.Cells أيضًا وسائل لجمع المعلومات حول المصادر والاستبدالات التي تم إعدادها:

  1. ترجع طريقة FontConfigs.GetFontSources مصفوفة من نوع FontSourceBase تحتوي على قائمة بمصادر الخطوط المحددة. إذا لم يتم تعيين مصادر، ستعيد طريقة FontConfigs.GetFontSources مصفوفة فارغة.
  2. تقبل طريقة FontConfigs.GetFontSubstitutes معلمة من نوع string، تتيح لك تحديد اسم الخط الذي تم تعيين استبداله. إذا لم يتم تعيين استبدال للخط المحدد، ستعيد طريقة FontConfigs.GetFontSubstitutes قيمة null.

الموضوعات المتقدمة