กำหนดการแทนที่แบบอักษรในงานนำเสนอด้วย C++
ภาพรวม
การแทนที่แบบอักษรทำให้ Aspose.Slides สามารถใช้แบบอักษรที่มีอยู่แทนแบบอักษรที่ไม่สามารถเข้าถึงได้เมื่อทำการแสดงผลหรือแปลงงานนำเสนอ การแทนที่จะส่งผลต่อผลลัพธ์ที่แสดงผลเท่านั้น; ไม่ทำการเปลี่ยนแบบอักษรที่กำหนดให้กับเนื้อหาของงานนำเสนอ
คุณสามารถกำหนดแบบอักษรที่จะใช้เมื่อแบบอักษรเฉพาะไม่มีอยู่ได้ และคุณสามารถตรวจสอบการแทนที่ที่ Aspose.Slides จะทำระหว่างการเรนเดอร์ ซึ่งช่วยให้ผลลัพธ์คงที่สม่ำเสมอระหว่างสภาพแวดล้อมที่มีแบบอักษรติดตั้งแตกต่างกัน
รับการแทนที่แบบอักษร
ใช้เมธอด IFontsManager::GetSubstitutions เพื่อระบุว่าแบบอักษรใดจะถูกแทนที่เมื่อทำการแสดงผลงานนำเสนอ เมธอดนี้จะคืนค่าอ็อบเจกต์ FontSubstitutionInfo ที่บ่งบอกชื่อแบบอักษรเดิมและแบบอักษรที่แทนที่
ตัวอย่าง C++ ด้านล่างจะแสดงรายการการแทนที่แบบอักษรทั้งหมดสำหรับงานนำเสนอหนึ่งรายการ:
#include <DOM/FontSubstitutionInfo.h>
#include <DOM/IFontsManager.h>
#include <DOM/Presentation.h>
#include <system/console.h>
using namespace Aspose::Slides;
using namespace System;
auto presentation = MakeObject<Presentation>(u"Presentation.pptx");
for (auto&& substitution : presentation->get_FontsManager()->GetSubstitutions())
{
Console::WriteLine(u"{0} -> {1}", substitution->get_OriginalFontName(), substitution->get_SubstitutedFontName());
}
presentation->Dispose();
รับการแทนที่แบบอักษรสำหรับสไลด์ที่เลือก
ใช้เมธอดโอเวอร์โหลดของ IFontsManager::GetSubstitutions พร้อมอาร์กิวเมนต์ System::ArrayPtr<int32_t> slides เพื่อดูการแทนที่ที่จำเป็นต่อการเรนเดอร์สไลด์เฉพาะเท่านั้น สิ่งนี้มีประโยชน์เมื่อคุณกำลังเรนเดอร์หรือส่งออกส่วนของงานนำเสนอ ตรวจสอบงานนำเสนอขนาดใหญ่เป็นช่วงๆ ค้นหาสไลด์ที่พึ่งพาแบบอักษรที่ไม่มีอยู่ เตรียมชุดแบบอักษรขั้นต่ำสำหรับเซิร์ฟเวอร์หรือคอนเทนเนอร์ หรือวิเคราะห์ความแตกต่างของการเรนเดอร์โดยไม่ต้องประมวลผลสไลด์ที่ไม่ได้เกี่ยวข้อง
อาร์เรย์ slides มีดัชนีสไลด์แบบอิงหนึ่ง: 1 ระบุสไลด์แรก ในขณะที่เมธอด Presentation::get_Slide ใช้ดัชนีเริ่มต้นที่ศูนย์ ดังนั้นสไลด์เดียวกันจะถูกเข้าถึงเป็น presentation->get_Slide(0) โปรดคำนึงถึงความแตกต่างนี้เมื่อตั้งค่าอาร์เรย์เพื่อหลีกเลี่ยงข้อผิดพลาด off‑by‑one
เรียกโอเวอร์โหลดผ่านเมธอด Presentation::get_FontsManager ซึ่งจะคืนค่าเฉพาะการแทนที่ที่กำหนดระหว่างการเรนเดอร์สไลด์ที่เลือก แต่ละผลลัพธ์เป็นอ็อบเจกต์ FontSubstitutionInfo ที่บรรจุชื่อแบบอักษรเดิมและแบบอักษรที่แทนที่ ผลลัพธ์สะท้อนสภาพแวดล้อมแบบอักษรปัจจุบัน กฎ fallback ที่กำหนดไว้ กฎการแทนที่ที่จัดเก็บใน IFontSubstRuleCollection และ แบบอักษรที่โหลดจากภายนอก
การแทนที่เดียวกันอาจจำเป็นสำหรับสไลด์ที่เลือกหลายสไลด์ ให้ทำการกำจัดข้อมูลซ้ำเมื่อคุณสร้างรายการสินทรัพย์แบบอักษรหรือรายงาน preflight ตัวอย่างต่อไปนี้จะแสดงการรายงานการแทนที่ทุกรายการที่คืนค่าแล้วสร้างรายการแบบอักษรที่ไม่ซ้ำกันและเรียงลำดับ:
#include <DOM/FontSubstitutionInfo.h>
#include <DOM/IFontsManager.h>
#include <DOM/Presentation.h>
#include <system/array.h>
#include <system/collections/sorted_set.h>
#include <system/console.h>
#include <system/string.h>
#include <system/string_comparer.h>
using namespace Aspose::Slides;
using namespace System;
using namespace System::Collections::Generic;
auto presentation = MakeObject<Presentation>(u"Presentation.pptx");
auto selectedSlides = MakeArray<int32_t>({1, 3, 5});
auto substitutions = presentation->get_FontsManager()->GetSubstitutions(selectedSlides);
auto sortedPreflightEntries = MakeObject<SortedSet<String>>(StringComparer::get_OrdinalIgnoreCase());
Console::WriteLine(u"Substitutions for the selected slides:");
for (auto&& substitution : substitutions)
{
auto entry = String::Format(u"{0} -> {1}", substitution->get_OriginalFontName(), substitution->get_SubstitutedFontName());
Console::WriteLine(entry);
sortedPreflightEntries->Add(entry);
}
Console::WriteLine(u"Deduplicated font preflight report:");
for (auto&& entry : sortedPreflightEntries)
{
Console::WriteLine(entry);
}
presentation->Dispose();
อินเทอร์เฟซ IFontsManager มีโอเวอร์โหลดทั้งสองแบบ ให้เลือกตามขอบเขตของการดำเนินการเรนเดอร์:
| Overload | Use it when |
|---|---|
| GetSubstitutions with no arguments | You need substitutions for the entire presentation. |
GetSubstitutions with System::ArrayPtr<int32_t> slides |
You need substitutions for a selected range, incremental check, or partial export. |
ตั้งค่ากฎการแทนที่แบบอักษร
เพื่อระบุแบบอักษรที่ Aspose.Slides ควรใช้เมื่อแบบอักษรต้นทางไม่มีอยู่:
- โหลดงานนำเสนอ
- สร้างการกำหนดแบบอักษรสำหรับแบบอักษรต้นทางและแบบอักษรทดแทน
- สร้างอ็อบเจกต์ FontSubstRule พร้อมเงื่อนไข WhenInaccessible
- เพิ่มกฎลงใน FontSubstRuleCollection
- กำหนดคอลเลกชันโดยใช้เมธอด IFontsManager::set_FontSubstRuleList
- เรนเดอร์หรือแปลงงานนำเสนอ
ตัวอย่าง C++ ด้านล่างแทนที่ Arial ด้วย SomeRareFont เมื่อ SomeRareFont ไม่มีอยู่ แล้วเรนเดอร์สไลด์แรกเพื่อยืนยันผลลัพธ์ แบบอักษรทดแทนต้องมีอยู่ใน Aspose.Slides
#include <DOM/FontSubstCondition.h>
#include <DOM/Fonts/FontData.h>
#include <DOM/Fonts/FontSubstRule.h>
#include <DOM/Fonts/FontSubstRuleCollection.h>
#include <DOM/IFontsManager.h>
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <IImage.h>
#include <ImageFormat.h>
using namespace Aspose::Slides;
using namespace System;
auto presentation = MakeObject<Presentation>(u"Fonts.pptx");
auto sourceFont = MakeObject<FontData>(u"SomeRareFont");
auto substituteFont = MakeObject<FontData>(u"Arial");
auto substitutionRule = MakeObject<FontSubstRule>(sourceFont, substituteFont, FontSubstCondition::WhenInaccessible);
auto substitutionRules = MakeObject<FontSubstRuleCollection>();
substitutionRules->Add(substitutionRule);
presentation->get_FontsManager()->set_FontSubstRuleList(substitutionRules);
auto image = presentation->get_Slide(0)->GetImage(1.0f, 1.0f);
image->Save(u"slide.jpg", ImageFormat::Jpeg);
image->Dispose();
presentation->Dispose();
Note
สำหรับการเปลี่ยนแบบอักษรโดยไม่ต้องมีเงื่อนไขในทั้งงานนำเสนอ ดูที่ Font Replacementข้อจำกัดสำหรับแบบอักษรสมการคณิตศาสตร์
กฎการแทนที่แบบอักษรเป็นส่วนหนึ่งของกระบวนการเลือกแบบอักษรมาตรฐานที่ใช้ระหว่างการเรนเดอร์และการแปลง พวกมันทำงานกับข้อความทั่วไปเมื่อ Aspose.Slides สามารถแทนที่แบบอักษรที่ไม่เข้าถึงได้ด้วยแบบอักษรที่กำหนดโดยกฎ
สมการ Office Math มีข้อกำหนดเพิ่มเติม หากสมการใช้ Cambria Math Aspose.Slides อาจต้องการแบบอักษรนั้นอย่างแม่นยำเพื่อคำนวณและเรนเดอร์เลย์เอาต์ของสมการ กฎที่แทนที่ด้วยแบบอักษรคณิตศาสตร์อื่น เช่น STIX Two Math ไม่สามารถแทนที่ Cambria Math ได้สำหรับวัตถุประสงค์นี้ และการเรนเดอร์อาจยังแจ้งว่า Cambria Math จำเป็น
เพื่อเรนเดอร์หรือแปลงงานนำเสนอเช่นนั้น ให้ทำให้ Cambria Math มีอยู่ใน Aspose.Slides โดยติดตั้งในระบบปฏิบัติการหรือโหลดเป็น แบบอักษรภายนอก
ข้อจำกัดนี้ใช้กับการจัดเรียงสมการเท่านั้น กฎการแทนที่ที่อธิบายข้างต้นยังคงใช้กับข้อความทั่วไปของงานนำเสนอ
คำถามที่พบบ่อย
ความแตกต่างระหว่างการแทนที่แบบอักษรและการเปลี่ยนแบบอักษรคืออะไร?
Font replacement เปลี่ยนแบบอักษรหนึ่งเป็นอีกแบบหนึ่งทั่วงานนำเสนออย่างตั้งใจ ส่วนการแทนที่แบบอักษรจะเลือกแบบอักษรสำหรับผลลัพธ์ที่เรนเดอร์เมื่อเงื่อนไขที่กำหนดตรงกัน เช่น เมื่อแบบอักษรเดิมไม่มีอยู่
กฎการแทนที่ถูกใช้เมื่อไหร่?
กฎเหล่านี้เข้าร่วมใน font selection sequence ระหว่างการเรนเดอร์และการแปลง โดยใช้ WhenInaccessible กฎจะใช้เฉพาะเมื่อ Aspose.Slides ไม่สามารถเข้าถึงแบบอักษรต้นทางได้
จะเกิดอะไรขึ้นเมื่อแบบอักษรหายและไม่มีการกำหนดกฎการแทนที่?
Aspose.Slides จะเลือกแบบอักษรที่ใกล้เคียงที่สุดตามกระบวนการเลือกแบบอักษรของมัน ผลลัพธ์ขึ้นอยู่กับแบบอักษรที่มีอยู่ในสภาพแวดล้อมการทำงาน
ฉันสามารถโหลดแบบอักษรภายนอกเพื่อหลีกเลี่ยงการแทนที่ได้หรือไม่?
ได้ คุณสามารถ load external fonts เพื่อให้ Aspose.Slides ใช้ได้ระหว่างการเรนเดอร์และการแปลง
Aspose มีการแจกจ่ายแบบอักษรพร้อมกับไลบรารีหรือไม่?
ไม่มี คุณต้องรับผิดชอบในการจัดหาแบบอักษรและปฏิบัติตามใบอนุญาตของแต่ละแบบอักษร
ผลลัพธ์ของการแทนที่อาจแตกต่างระหว่าง Windows, Linux และ macOS หรือไม่?
ใช่ แบบอักษรที่ติดตั้งและตำแหน่งการค้นหาแบบอักษรแตกต่างกันตามระบบปฏิบัติการ ดังนั้นแบบอักษรที่มีในเครื่องหนึ่งอาจต้องการการแทนที่ในเครื่องอื่น
จะทำให้การเลือกแบบอักษรสม่ำเสมอในการแปลงเป็นชุดได้อย่างไร?
ใช้ไฟล์และเวอร์ชันแบบอักษรเดียวกันบนทุกเครื่องหรือคอนเทนเนอร์, load required external fonts, และ embed fonts เมื่อใบอนุญาตอนุญาต คุณยังสามารถเรียก IFontsManager::GetSubstitutions ก่อนทำการส่งออกเพื่อระบุการแทนที่ที่ไม่คาดคิด