การจัดการแบบอักษรและปัญหาประสิทธิภาพการทำงาน

กลไกการจัดการแบบอักษรที่มีอยู่ทั้งหมดอยู่ในชั้นเรียนFontSettings คลาสนี้รับผิดชอบในการดึงแบบอักษรภายในแหล่งที่มาแบบอักษรที่กำหนดไว้เช่นเดียวกับก.

การแยกแบบอักษรที่แก้ไขแล้ว

แบบอักษรจะถูกวิเคราะห์ในหลายขั้นตอน:

  1. การได้รับข้อมูลสำหรับแบบอักษร,การแก้ไขจากแบบอักษรที่มีอยู่ทั้งหมด.
  2. การแยกแบบอักษรที่ได้รับการแก้ไขเพื่อให้ได้สัญลักษณ์และตัวชี้วัดที่มีอยู่(แนวนอนและแนวตั้ง).
  3. การแยกแบบอักษรที่แก้ไขแล้วสำหรับการฝังและการตั้งค่าย่อย.

เมื่อAspose.Wordsพบแบบอักษรในเอกสารเป็นครั้งแรกจะพยายามขอรับข้อมูลแบบอักษรพื้นฐานเช่นชื่อเต็มแบบอักษรชื่อสกุลรุ่นสไตล์จากไฟล์แบบอักษรที่อยู่ในแหล่งข้อมูลแบบอักษรแต่ละตัว หลังจากดึงแบบอักษรทั้งหมดแล้วAspose.Wordsใช้รายละเอียดเหล่านี้เพื่อค้นหาข้อมูลแบบอักษรที่จำเป็นหรือการแทนที่ที่เหมาะสมสำหรับแบบอักษรที่ร้องขอ.

ปัญหาประสิทธิภาพเมื่อมีการเปลี่ยนแบบอักษร

เนื่องจากขั้นตอนที่อธิบายไว้ข้างต้นเป็นเวลานาน,มันอาจส่งผลกระทบต่อประสิทธิภาพกา อย่างไรก็ตามแต่ละอินสแตนซ์ของFontSettingsมีแคชของตัวเองซึ่งสามารถลดเวลาในการประมวลผล ตัวอย่างเช่น,คุณสามารถแบ่งปันอินสแตนซ์ของFontSettingsคลาสระหว่างเอกสารที่แตกต่างกัน,ซึ่งจะช่ ตัวอย่างต่อไปนี้แสดงให้เห็นถึงสิ่งนี้:

For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
System::SharedPtr<FontSettings> fontSettings = System::MakeObject<FontSettings>();
System::SharedPtr<TableSubstitutionRule> substitutionRule = fontSettings->get_SubstitutionSettings()->get_TableSubstitution();
// If "UnknownFont1" font family is not available then substitute it by "Comic Sans MS".
substitutionRule->AddSubstitutes(u"UnknownFont1", System::MakeArray<System::String>({ u"Comic Sans MS" }));
System::SharedPtr<LoadOptions> lo = System::MakeObject<LoadOptions>();
lo->set_FontSettings(fontSettings);
System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"MyDocument.docx", lo);

ในกรณีที่FontSettingsไม่ได้กำหนดไว้อย่างชัดเจนAspose.Wordsใช้ค่าดีฟอลต์FontSettingsอินสแตนซ์ อินสแตนซ์นี้จะใช้ร่วมกันโดยอัตโนมัติระหว่างเอกสารและสามารถแยกได้ดังนี้:

C++

System::SharedPtr<FontSettings> fontSettings = System::MakeObject<FontSettings>()->get_DefaultInstance();

ใช้อินสแตนซ์ดีฟอลต์FontSettings

หากคุณแน่ใจว่าเอกสารการประมวลผลทั้งหมดต้องการการตั้งค่าแบบอักษรเดียวกันขอแนะนำให้ตั้งค่าและใช้อินสแตนซ์เริ่มต้นFontSettings สมมติว่าคุณจำเป็นต้องใช้แหล่งที่มาแบบอักษรเดียวกันสำหรับเอกสารทั้งหมดของคุณ ในกรณีนี้,คุณก็สามารถแก้ไขอินสแตนซ์เริ่มต้นดังต่อไปนี้:

For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
System::SharedPtr<FontSettings> fontSettings = System::MakeObject<FontSettings>()->get_DefaultInstance();
fontSettings->SetFontsSources(System::MakeArray<System::SharedPtr<FontSourceBase>>(
{
System::MakeObject<SystemFontSource>(),
System::MakeObject<FolderFontSource>(u"/home/user/MyFonts", true)
}));