Konfigurasi Substitusi Font pada Presentasi di C++
Gambaran Umum
Penggantian font memungkinkan Aspose.Slides menggunakan font yang tersedia sebagai pengganti font yang tidak dapat diakses saat presentasi dirender atau dikonversi. Penggantian ini memengaruhi output yang dirender; tidak mengubah font yang ditetapkan pada konten presentasi.
Anda dapat menentukan font yang akan digunakan ketika font tertentu tidak tersedia, dan dapat memeriksa substitusi yang akan dilakukan Aspose.Slides selama proses rendering. Hal ini membantu menjaga konsistensi output di berbagai lingkungan dengan font yang terpasang berbeda.
Dapatkan Substitusi Font
Gunakan metode IFontsManager::GetSubstitutions untuk menentukan font mana yang akan disubstitusi ketika presentasi dirender. Metode ini mengembalikan objek FontSubstitutionInfo yang mengidentifikasi nama font asli dan font pengganti.
Contoh C++ berikut menampilkan semua substitusi font untuk sebuah presentasi:
#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();
Dapatkan Substitusi Font untuk Slide yang Dipilih
Gunakan overload IFontsManager::GetSubstitutions dengan argumen System::ArrayPtr<int32_t> slides untuk memeriksa hanya substitusi yang diperlukan untuk merender slide tertentu. Ini berguna saat Anda merender atau mengekspor sebagian presentasi, memeriksa presentasi besar secara bertahap, menemukan slide yang bergantung pada font yang tidak tersedia, menyiapkan paket font minimal untuk server atau kontainer, atau mendiagnosis perbedaan rendering tanpa memproses slide yang tidak terkait.
Array slides berisi indeks slide berbasis satu: 1 mengidentifikasi slide pertama. Sebaliknya, metode Presentation::get_Slide menggunakan indeks berbasis nol, sehingga slide yang sama diakses sebagai presentation->get_Slide(0). Ingat perbedaan ini saat membangun array untuk menghindari kesalahan satu indeks.
Panggil overload tersebut melalui metode Presentation::get_FontsManager. Metode ini hanya mengembalikan substitusi yang ditentukan selama merender slide yang dipilih. Setiap hasil adalah objek FontSubstitutionInfo yang berisi nama font asli dan pengganti. Hasil tersebut mencerminkan lingkungan font saat ini, aturan fallback yang dikonfigurasi, aturan substitusi yang disimpan dalam sebuah IFontSubstRuleCollection, dan font yang dimuat secara eksternal.
Substitusi yang sama dapat diperlukan oleh lebih dari satu slide yang dipilih. Hilangkan duplikasi hasil ketika Anda membuat inventaris font atau laporan preflight. Contoh berikut melaporkan setiap substitusi yang dikembalikan dan kemudian membuat daftar terurut dari pemetaan font unik:
#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();
Antarmuka IFontsManager menyediakan kedua overload. Pilih salah satu sesuai dengan ruang lingkup operasi rendering:
| Overload | Gunakan ketika |
|---|---|
| GetSubstitutions with no arguments | Anda memerlukan substitusi untuk seluruh presentasi. |
GetSubstitutions with System::ArrayPtr<int32_t> slides |
Anda memerlukan substitusi untuk rentang terpilih, pemeriksaan bertahap, atau ekspor parsial. |
Atur Aturan Substitusi Font
Untuk menentukan font yang harus digunakan Aspose.Slides ketika font sumber tidak tersedia:
- Muat presentasi.
- Buat definisi font untuk font sumber dan font pengganti.
- Buat sebuah FontSubstRule dengan kondisi WhenInaccessible.
- Tambahkan aturan ke dalam sebuah FontSubstRuleCollection.
- Tetapkan koleksi dengan menggunakan metode IFontsManager::set_FontSubstRuleList.
- Render atau konversi presentasi.
Contoh C++ berikut menggantikan Arial untuk SomeRareFont ketika SomeRareFont tidak tersedia, dan kemudian merender slide pertama untuk memverifikasi hasilnya. Font pengganti harus tersedia untuk 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
Untuk perubahan tanpa syarat pada font yang digunakan di seluruh presentasi, lihat Penggantian Font.Batasan untuk Font Persamaan Matematika
Aturan substitusi font merupakan bagian dari proses pemilihan font standar yang digunakan selama rendering dan konversi. Aturan ini berfungsi untuk teks biasa ketika Aspose.Slides dapat mengganti font yang tidak dapat diakses dengan font yang tersedia sesuai aturan.
Persamaan Office Math memiliki persyaratan tambahan. Jika sebuah persamaan menggunakan Cambria Math, Aspose.Slides mungkin memerlukan font tersebut secara tepat untuk menghitung dan merender tata letak persamaan. Aturan yang menggantikan dengan font matematika lain, seperti STIX Two Math, tidak dapat menggantikan Cambria Math untuk tujuan ini, dan rendering masih dapat melaporkan bahwa Cambria Math diperlukan.
Untuk merender atau mengonversi presentasi semacam itu, pastikan Cambria Math tersedia untuk Aspose.Slides. Instal font tersebut di sistem operasi atau muat sebagai font eksternal.
Batasan ini berlaku pada tata letak persamaan. Aturan substitusi yang dijelaskan di atas tetap berlaku untuk teks presentasi biasa.
FAQ
Apa perbedaan antara penggantian font dan substitusi font?
Penggantian Font secara sengaja mengubah satu font menjadi font lain di seluruh presentasi. Substitusi font memilih font untuk output yang dirender ketika kondisi yang dikonfigurasi terpenuhi, seperti ketika font asli tidak tersedia.
Kapan aturan substitusi diterapkan?
Aturan berpartisipasi dalam urutan pemilihan font selama rendering dan konversi. Dengan WhenInaccessible, aturan hanya digunakan ketika Aspose.Slides tidak dapat mengakses font sumber.
Apa yang terjadi ketika sebuah font hilang dan tidak ada aturan substitusi yang dikonfigurasi?
Aspose.Slides memilih font terdekat yang tersedia berdasarkan proses pemilihan fontnya. Hasilnya bergantung pada font yang tersedia di lingkungan runtime.
Apakah saya dapat memuat font eksternal untuk menghindari substitusi?
Ya. Anda dapat memuat font eksternal sehingga Aspose.Slides dapat menggunakannya selama rendering dan konversi.
Apakah Aspose mendistribusikan font bersama perpustakaan?
Tidak. Anda bertanggung jawab menyediakan font dan mematuhi lisensinya.
Apakah hasil substitusi dapat berbeda antara Windows, Linux, dan macOS?
Ya. Font yang terpasang dan lokasi pencarian font berbeda per sistem operasi, sehingga font yang tersedia di satu mesin mungkin memerlukan substitusi di mesin lain.
Bagaimana cara membuat pemilihan font konsisten dalam konversi batch?
Gunakan file font dan versi yang sama pada setiap mesin atau kontainer, muat font eksternal yang diperlukan, dan sematkan font bila lisensi mengizinkan. Anda juga dapat memanggil IFontsManager::GetSubstitutions sebelum ekspor untuk mengidentifikasi substitusi yang tidak diharapkan.