จัดการแบบอักษรธีมเฉพาะสคริปต์ใน PHP
ภาพรวม
ธีมงานนำเสนอสามารถเลือกชุดแบบอักษรที่แตกต่างกันสำหรับระบบการเขียนที่แตกต่างกันได้ ซึ่งทำให้ข้อความหลายภาษา ที่ยังคงใช้แบบอักษรของธีม สามารถใช้รูปแบบแบบอักษรที่สอดคล้องกันได้ ในขณะเดียวกันก็ใช้แบบอักษรที่เหมาะสมสำหรับ Cyrillic, Arabic, Japanese, Georgian, Thaana และสคริปต์อื่น ๆ
ธีมของ FontScheme จะประกอบด้วยชุดแบบอักษรหลักซึ่งโดยทั่วไปใช้สำหรับหัวเรื่อง และชุดแบบอักษรรองซึ่งโดยทั่วไปใช้สำหรับข้อความหลัก นอกเหนือจากการตั้งค่าแบบอักษรสำหรับละตินและเอเชียตะวันออกแล้ว ทั้งสองชุด Fonts ยังเปิดเผยการแมปจากแท็กระบบการเขียนไปยังชื่อแบบอักษร
บทความนี้แสดงวิธีตรวจสอบและแก้ไขการแมปเหล่านั้นในธีมมาสเตอร์ของงานนำเสนอและตรวจสอบว่าการเปลี่ยนแปลงยังคงอยู่หลังจากการบันทึกและโหลดใหม่
ทำความเข้าใจแท็กสคริปต์
เมธอดแบบอักษรสคริปต์ใช้ส่วนย่อยของสคริปต์ BCP 47 ที่มีสี่ตัวอักษรเพื่อระบุระบบการเขียน ค่าที่พบบ่อยได้แก่:
| แท็กสคริปต์ | ระบบการเขียน |
|---|---|
Cyrl |
ซีริลลิก |
Arab |
อารบิก |
Hans |
จีนแบบประยุกต์ |
Jpan |
ญี่ปุ่น |
Geor |
จอร์เจีย |
Thaa |
ธานา |
การแมปเหล่านี้เป็นของธีมฟอนต์สคีมของธีม ไม่ได้เป็นของส่วนข้อความแต่ละส่วน งานนำเสนออาจกำหนดการแมปที่ต่างกันสำหรับชุดหลักและชุดรอง และอาจไม่มีการแมปสำหรับสคริปต์บางอย่าง
เข้าถึงและตรวจสอบการแมปแบบอักษรสคริปต์
ใช้ Presentation::getMasterTheme เพื่อเข้าถึงธีมระดับงานนำเสนอ เมธอด MasterTheme::getFontScheme, FontScheme::getMajor, และ FontScheme::getMinor ให้การเข้าถึงชุด Fonts ทั้งสองชุด
เรียก Fonts::getScriptFontMap เพื่อดึงการแมปทั้งหมดจากชุดหนึ่ง เพื่อค้นหาระบบการเขียนหนึ่ง ให้เรียก Fonts::getScriptFont พร้อมแท็กสคริปต์ของมัน Fonts::getScriptFont จะคืนค่า null เมื่อชุดนั้นไม่ได้กำหนดการแมปที่ต้องการ
แก้ไขการแมปและตรวจสอบความคงที่
ใช้ Fonts::setScriptFont เพื่อสร้างการแมปหรือแทนที่แบบอักษรครอบครัวปัจจุบัน ใช้ Fonts::removeScriptFont เพื่อลบการแมป
ตัวอย่างต่อไปนี้เป็นแบบ End‑to‑End ที่อ่านการแมปหลักและรองทั้งหมด ค้นหาแบบอักษรหลักของญี่ปุ่น เปลี่ยนแบบอักษรหลักของ Cyrillic ลบการแมป Thaana ในชุดรอง บันทึกงานนำเสนอและเปิดใหม่เพื่อยืนยันการเปลี่ยนแปลงทั้งสอง เพื่อทำให้ขั้นตอนการลบเป็นอิสระจากธีมเริ่มต้น ตัวอย่างจะสร้างการแมป Thaana แค่เมื่อยังไม่มีการแมปนั้น
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new Presentation();
try {
$fontScheme = $presentation->getMasterTheme()->getFontScheme();
$majorFonts = $fontScheme->getMajor();
$minorFonts = $fontScheme->getMinor();
echo "Existing major mappings:" . PHP_EOL;
$majorMappings = $majorFonts->getScriptFontMap()->iterator();
while (java_values($majorMappings->hasNext())) {
$mapping = $majorMappings->next();
echo " " . java_values($mapping->getKey()) . ": " . java_values($mapping->getValue()) . PHP_EOL;
}
echo "Existing minor mappings:" . PHP_EOL;
$minorMappings = $minorFonts->getScriptFontMap()->iterator();
while (java_values($minorMappings->hasNext())) {
$mapping = $minorMappings->next();
echo " " . java_values($mapping->getKey()) . ": " . java_values($mapping->getValue()) . PHP_EOL;
}
$japaneseFont = $majorFonts->getScriptFont("Jpan");
if (java_is_null($japaneseFont)) {
echo "No major Japanese font is defined." . PHP_EOL;
} else {
echo "Major Japanese font: " . java_values($japaneseFont) . PHP_EOL;
}
$majorFonts->setScriptFont("Cyrl", "Arial");
if (java_is_null($minorFonts->getScriptFont("Thaa"))) {
$minorFonts->setScriptFont("Thaa", "Arial");
}
$minorFonts->removeScriptFont("Thaa");
$presentation->save("script-font-mappings.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
$savedPresentation = new Presentation("script-font-mappings.pptx");
try {
$savedMajorFonts = $savedPresentation->getMasterTheme()->getFontScheme()->getMajor();
$savedMinorFonts = $savedPresentation->getMasterTheme()->getFontScheme()->getMinor();
$savedCyrillicFont = $savedMajorFonts->getScriptFont("Cyrl");
$savedThaanaFont = $savedMinorFonts->getScriptFont("Thaa");
if (!java_is_null($savedCyrillicFont) && java_values($savedCyrillicFont) === "Arial") {
echo "The Cyrillic mapping was preserved." . PHP_EOL;
} else {
echo "The Cyrillic mapping was not preserved." . PHP_EOL;
}
if (java_is_null($savedThaanaFont)) {
echo "The Thaana mapping removal was preserved." . PHP_EOL;
} else {
echo "The Thaana mapping still exists." . PHP_EOL;
}
} finally {
$savedPresentation->dispose();
}
การตรวจสอบใช้พฤติกรรม null แบบเดียวกับการค้นหาปกติ: หลังจากบันทึกการลบแล้ว Fonts::getScriptFont("Thaa") จะคืนค่า null สำหรับชุดรอง
แยกแยะการแมปของธีมจากการตั้งค่าแบบอักษรอื่น ๆ
การแมปธีมที่ระบุสคริปต์มีส่วนร่วมในการเลือกแบบอักษร แต่แก้ปัญหาแตกต่างจากการจัดรูปแบบข้อความโดยตรง การแทนที่แบบอักษรและการสำรองแบบอักษร:
| กลไก | วัตถุประสงค์ | ผลของการเปลี่ยนแปลงการแมปของธีม |
|---|---|---|
| การแมปแบบอักษรสคริปต์‑เฉพาะของธีม | เลือกแบบอักษรธีมหลักหรือรองสำหรับระบบการเขียนหนึ่ง | ข้อความที่ยังคงใช้แบบอักษรธีมที่สอดคล้องสามารถแก้ไขเป็นครอบครัวแบบอักษรที่แมปใหม่ได้ |
| แบบอักษรที่กำหนดโดยตรงให้กับส่วนของข้อความ | กำหนดครอบครัวแบบอักษรที่ต้องการให้กับส่วนนั้นโดยไม่พึ่งพาธีม | ส่วนนั้นอาจไม่เปลี่ยนแปลงเพราะการจัดรูปแบบโดยตรงเหนือกว่าการเลือกของธีม |
| การแทนที่แบบอักษร | แทนที่แบบอักษรที่ขอเมื่อแบบอักษรนั้นไม่มีหรือกฎการแทนที่มีผล | ทำงานหลังจากที่แบบอักษรถูกขอ; ไม่ได้กำหนดการแมปสคริปต์ของธีมใหม่ |
| การสำรองแบบอักษร | จัดหา glyph ที่แบบอักษรที่เลือกไม่มีบ่อยสำหรับช่วง Unicode เฉพาะ | เติมการครอบคลุม glyph ที่หายไป; ไม่เปลี่ยนการแมปของธีมที่เก็บไว้ |
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับสองกลไกสุดท้าย ให้ดู Font Substitution และ Fallback Fonts
การเปลี่ยนการแมปใน Presentation::getMasterTheme มีผลต่อเนื้อหาเท่านั้นที่การจัดรูปแบบที่มีผลยังคงพึ่งพาธีมนั้น ข้อความอาจแทนที่ด้วยการสืบทอดการบังคับธีมจากมาสเตอร์, เลย์เอาต์ หรือสไลด์, หรือใช้แบบอักษรที่กำหนดโดยตรง ตรวจสอบระดับเหล่านั้นเมื่อผลลัพธ์ที่มองเห็นไม่ได้เป็นไปตามการแมประดับงานนำเสนอ
ทำให้แบบอักษรที่แมปพร้อมใช้งานและตรวจสอบผลลัพธ์
การแมปสคริปต์เก็บชื่อแบบอักษรครอบครัว; ไม่ได้ติดตั้งหรือโหลดไฟล์แบบอักษรที่สอดคล้องกัน เพื่อการเรนเดอร์และส่งออกที่สม่ำเสมอ แบบอักษรที่แมปทุกตัวต้องถูกติดตั้งในสภาพแวดล้อนหรือจัดหาให้กับ Aspose.Slides ผ่านแหล่งกำหนดเอง เช่น FontsLoader::loadExternalFonts หรือ LoadOptions::getDocumentLevelFontSources ดู Custom Fonts เพื่อดูตัวเลือกการโหลดที่มี
การตรวจสอบการแมปที่บันทึกไว้ยืนยันแค่ว่าข้อมูลธีมถูกเก็บรักษาไว้เท่านั้น ไม่ได้พิสูจน์ว่าแบบอักษรพร้อมใช้งาน มี glyph ที่จำเป็นครบหรือสร้างเลย์เอาต์ตามที่ตั้งใจ เราแนะนำให้เรนเดอร์ข้อความตัวอย่างสำหรับทุกระบบการเขียนที่ต้องการเป็นภาพหรือ PDF แล้วตรวจสอบผลลัพธ์ วิธีนี้จะจับแบบอักษรที่หายไป การครอบคลุม glyph ที่ไม่สมบูรณ์ พฤติกรรมสำรอง และการเปลี่ยนแปลงเลย์เอาต์ก่อนแจกจ่ายงานนำเสนอ ดู Convert PowerPoint Presentations เพื่อดูตัวอย่างการเรนเดอร์และส่งออก
คำถามที่พบบ่อย
Fonts::getScriptFont คืนค่าอะไรเมื่อสคริปต์ไม่ได้ถูกแมป?
Fonts::getScriptFont จะคืนค่า null เมื่อการแมปสคริปต์ที่ขอไม่ได้ถูกกำหนดในชุดแบบอักษรหลักหรือรองนั้น
Fonts::setScriptFont เพิ่มการแมปที่สองเมื่อสคริปต์มีอยู่แล้วหรือไม่?
ไม่มี. Fonts::setScriptFont จะสร้างการแมปเมื่อไม่มีและจะแทนที่แบบอักษรครอบครัวที่แมปไว้เมื่อแท็กสคริปต์เดียวกันมีอยู่แล้ว
ทำไมการเปลี่ยนแปลงการแมปของธีมถึงไม่เปลี่ยนข้อความบางส่วน?
ข้อความอาจมีแบบอักษรที่กำหนดโดยตรง, สืบทอดธีมที่แตกต่างผ่านการบังคับ, หรือได้รับผลกระทบจากการแทนที่หรือการสำรองระหว่างการเรนเดอร์ การแมปสคริปต์ระดับงานนำเสนอควบคุมเฉพาะข้อความที่การจัดรูปแบบที่มีผลยังคงอ้างอิงถึงชุดแบบอักษรธีมนั้น
การบันทึกและเปิดใหม่เพียงพอที่จะตรวจสอบผลลัพธ์หลายภาษาใช่หรือไม่?
ไม่. การเปิดใหม่จะตรวจสอบความคงอยู่ของข้อมูลธีมเท่านั้น ควรเรนเดอร์ข้อความตัวอย่างจากแต่ละระบบการเขียนที่ต้องการเพื่อยืนยันว่าแบบอักษรที่แมปพร้อมใช้งานและมี glyph ที่จำเป็นครบถ้วน**