A szkript-specifikus téma betűtípusok kezelése C++-ban
Áttekintés
A prezentációs téma különböző betűtípus‑családokat választhat különböző írásrendszerekhez. Ez lehetővé teszi, hogy a többnyelvű szöveg, amely továbbra is a téma betűtípusait használja, egységes betűtípus‑sémát kövessen, miközben a cirill, arab, japán, grúz, thaana és egyéb írásrendszerekhez megfelelő betűtípusokat alkalmaz.
A téma IFontScheme egy fő (major) betűtípus‑gyűjteményt tartalmaz, amelyet általában a címsorokhoz használnak, illetve egy mellék (minor) betűtípus‑gyűjteményt a törzsszöveghez. A latin és kelet‑ázsiai betűtípus‑tulajdonságokon kívül mindkét gyűjtemény a IFonts felületen keresztül a írásrendszer címkéket betűtípus‑családnevekre térképezi.
Ez a cikk bemutatja, hogyan ellenőrizhetők és módosíthatók ezek a leképezések a prezentáció mester‑témájában, valamint hogyan ellenőrizhető, hogy a változtatások megmaradnak‑e a mentés‑újratöltés ciklus során.
A szkript címkék megértése
A szkript betűtípus‑metódusok négybetűs BCP 47 szkript alalcímkéket használnak az írásrendszerek azonosítására. Gyakori értékek:
| Szkript címke | Írásrendszer |
|---|---|
Cyrl |
Cirill |
Arab |
Arab |
Hans |
Egyszerűsített kínai |
Jpan |
Japán |
Geor |
Grúz |
Thaa |
Thaana |
Ezek a leképezések a téma betűtípus‑sémához tartoznak, nem az egyes szövegrészekhez. Egy prezentáció meghatározhat különböző leképezéseket a fő és a mellék gyűjteményekhez, illetve elhagyhat leképezéseket bizonyos szkriptekhez.
A szkript betűtípus leképezések elérése és vizsgálata
Használja a Presentation::get_MasterTheme metódust a prezentáció‑szintű téma eléréséhez. A FontScheme::get_Major és a FontScheme::get_Minor metódusok visszaadják a két IFonts gyűjteményt.
Hívja a Fonts::GetScriptFontMap metódust a gyűjtemény összes leképezésének lekéréséhez. Egy adott írásrendszer felkereséséhez hívja a Fonts::GetScriptFont‑t a szkript címkével. A GetScriptFont null‑stringet ad vissza, ha az adott gyűjtemény nem definiálja a kért leképezést.
Leképezések módosítása és a tartósság ellenőrzése
Használja a Fonts::SetScriptFont‑t egy leképezés létrehozásához vagy a jelenlegi betűtípus‑család felülírásához. A Fonts::RemoveScriptFont‑t a leképezés eltávolításához.
Az alábbi vég‑eredményes példaprogram beolvassa a meglévő fő és mellék leképezéseket, megkeresi a japán fő betűtípust, megváltoztatja a cirill fő betűtípust, eltávolítja a thaana mellék leképezést, menti a prezentációt, majd újból megnyitja a változások ellenőrzéséhez. Az eltávolítási lépés függetlené tétele érdekében a példa csak akkor hoz létre thaana leképezést, ha az még nincs definiálva.
#include <DOM/IFonts.h>
#include <DOM/Presentation.h>
#include <DOM/Theme/IFontScheme.h>
#include <DOM/Theme/IMasterTheme.h>
#include <Export/SaveFormat.h>
#include <system/collections/idictionary.h>
#include <system/console.h>
#include <system/string.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
auto presentation = MakeObject<Presentation>();
auto fontScheme = presentation->get_MasterTheme()->get_FontScheme();
auto majorFonts = fontScheme->get_Major();
auto minorFonts = fontScheme->get_Minor();
Console::WriteLine(u"Existing major mappings:");
for (auto&& mapping : majorFonts->GetScriptFontMap())
{
Console::WriteLine(u" {0}: {1}", mapping.get_Key(), mapping.get_Value());
}
Console::WriteLine(u"Existing minor mappings:");
for (auto&& mapping : minorFonts->GetScriptFontMap())
{
Console::WriteLine(u" {0}: {1}", mapping.get_Key(), mapping.get_Value());
}
auto japaneseFont = majorFonts->GetScriptFont(u"Jpan");
if (japaneseFont.IsNull())
{
Console::WriteLine(u"No major Japanese font is defined.");
}
else
{
Console::WriteLine(u"Major Japanese font: {0}", japaneseFont);
}
majorFonts->SetScriptFont(u"Cyrl", u"Arial");
if (minorFonts->GetScriptFont(u"Thaa").IsNull())
{
minorFonts->SetScriptFont(u"Thaa", u"Arial");
}
minorFonts->RemoveScriptFont(u"Thaa");
presentation->Save(u"script-font-mappings.pptx", SaveFormat::Pptx);
auto savedPresentation = MakeObject<Presentation>(u"script-font-mappings.pptx");
auto savedFontScheme = savedPresentation->get_MasterTheme()->get_FontScheme();
auto savedMajorFonts = savedFontScheme->get_Major();
auto savedMinorFonts = savedFontScheme->get_Minor();
auto savedCyrillicFont = savedMajorFonts->GetScriptFont(u"Cyrl");
auto savedThaanaFont = savedMinorFonts->GetScriptFont(u"Thaa");
if (savedCyrillicFont == u"Arial")
{
Console::WriteLine(u"The Cyrillic mapping was preserved.");
}
else
{
Console::WriteLine(u"The Cyrillic mapping was not preserved.");
}
if (savedThaanaFont.IsNull())
{
Console::WriteLine(u"The Thaana mapping removal was preserved.");
}
else
{
Console::WriteLine(u"The Thaana mapping still exists.");
}
Az ellenőrzés ugyanazt a null‑string viselkedést használja, mint egy szokásos lekérdezés: a eltávolítás mentése után a GetScriptFont(u"Thaa") null‑stringet ad a mellék gyűjteményhez.
A téma leképezések megkülönböztetése a többi betűtípus beállítástól
A szkript‑specifikus téma leképezések részt vesznek a betűtípus‑kiválasztásban, de más problémát oldanak meg, mint a közvetlen szövegformázás, helyettesítés és fallback:
| Mechanizmus | Cél | A téma leképezés módosításának hatása |
|---|---|---|
| Szkript‑specifikus téma betűtípus leképezés | Kiválasztja a fő vagy mellék téma betűtípust egy írásrendszerhez. | A megfelelő téma betűtípust használó szöveg az új családra térképezhető. |
| Betűtípus kifejezetten hozzárendelve egy szövegrészhez | A kért betűtípus‑családot rögzíti azon a részen, a témától függetlenül. | A rész változatlan maradhat, mert a közvetlen formázás felülírja a téma választását. |
| Betűtípus‑helyettesítés | Kicseréli a kért betűtípust, ha az nem érhető el vagy helyettesítési szabály lép érvénybe. | A betűtípus‑kérés után működik; nem változtatja meg a téma szkript leképezését. |
| Betűtípus‑fallback | Hiányzó glyfjeket biztosít a kiválasztott betűtípustól, gyakran adott Unicode‑tartományokra. | Hiányzó glyfeket pótol, de nem változtatja a tárolt téma leképezést. |
További információért a két utóbbi mechanizmusról lásd a Font Substitution és a Fallback Fonts oldalakat.
A Presentation::get_MasterTheme‑ben történő leképezés‑módosítás csak azokra a tartalmakra van hatással, amelyek hatékony formázása továbbra is erre a témára támaszkodik. A szöveg megörökíthet egy mester‑, elrendezés‑ vagy dia‑témát, vagy kifejezetten hozzárendelt betűtípust használhat. Vizsgálja ezeket a szinteket, ha a látható eredmény nem követi a prezentáció‑szintű leképezést.
A leképezett betűtípusok elérhetővé tétele és az eredmény ellenőrzése
Egy szkript leképezés csak a betűtípus‑család nevét tárolja; nem telepíti vagy tölti be a megfelelő betűtípus‑fájlt. A következetes megjelenítés és export érdekében minden leképezett betűtípust telepíteni kell a környezetben, vagy az Aspose.Slides‑nek egy egyedi forráson keresztül kell biztosítani, például a FontsLoader::LoadExternalFonts vagy a LoadOptions::set_DocumentLevelFontSources használatával. Lásd a Custom Fonts oldalt a elérhető betöltési lehetőségekért.
A mentett leképezés ellenőrzése csak azt igazolja, hogy a téma definíciója megmaradt. Nem bizonyítja, hogy a betűtípus elérhető, tartalmazza az összes szükséges glifet, vagy a kívánt elrendezést eredményezi. Rendereljen reprezentatív szöveget minden szükséges írásrendszerhez kép‑ vagy PDF‑formátumban, és ellenőrizze a kimenetet. Ez felderíti a hiányzó betűtípusokat, a nem teljes glif‑lefedettséget, a fallback viselkedést és az elrendezés‑változásokat, mielőtt a prezentációt terjesztenék. Lásd a Convert PowerPoint Presentations oldalt a renderelés‑ és export‑példákért.
GYIK
Mi a GetScriptFont visszatérési értéke, ha egy szkript nincs leképezve?
Fonts::GetScriptFont null‑stringet ad, ha a kért szkript leképezése nincs definiálva az adott fő vagy mellék betűtípus‑gyűjteményben.
A SetScriptFont második leképezést hoz létre, ha a szkript már létezik?
Nem. Fonts::SetScriptFont létrehozza a leképezést, ha hiányzik, és felülírja a már meglévő betűtípus‑családot, ha a szkript címke már jelen van.
Miért nem változott meg egyes szövegrészek betűtípusa a téma leképezés módosítása után?
A szöveg lehet, hogy kifejezetten hozzárendelt betűtípussal rendelkezik, másik témát örököl felülíráson keresztül, vagy a renderelés során helyettesítés vagy fallback befolyásolja. A prezentáció‑szintű szkript leképezés csak azokra a szövegekre hat, amelyek hatékony formázása még mindig arra a téma betűtípus‑gyűjteményre hivatkozik.
Elég a mentés és újbóli megnyitás a többnyelvű kimenet ellenőrzéséhez?
Nem. Az újbóli megnyitás csak a téma adatainak megmaradását ellenőrzi. Emellett minden szükséges írásrendszerből rendereljen representatív szöveget, hogy megbizonyosodjon a leképezett betűtípusok elérhetőségéről és a szükséges glifek meglétéről.