จัดการแบบอักษรธีมเฉพาะสคริปต์ใน Python
ภาพรวม
ธีมของงานนำเสนอสามารถเลือกชุดแบบอักษรที่ต่างกันสำหรับระบบการเขียนที่แตกต่างกันได้ ซึ่งทำให้ข้อความหลายภาษา ที่ยังคงใช้แบบอักษรของธีม สามารถใช้โครงแบบอักษรที่สอดคล้องกันเดียวกัน ในขณะที่ใช้แบบอักษรที่เหมาะสมสำหรับ Cyrillic, Arabic, Japanese, Georgian, Thaana และสคริปต์อื่นๆ
ธีมของงานนำเสนอ FontScheme มีคอลเลกชันแบบอักษรหลัก (major) ที่โดยทั่วไปใช้สำหรับหัวข้อและคอลเลกชันแบบอักษรรอง (minor) ที่โดยทั่วไปใช้สำหรับข้อความส่วนเนื้อหา นอกจากนี้ ทั้งสองคอลเลกชันยังเปิดเผยการแมพจากแท็กระบบการเขียนไปยังชื่อชุดแบบอักษรผ่านคลาส Fonts ด้วย
บทความนี้จะแสดงวิธีตรวจสอบและแก้ไขการแมพเหล่านั้นในธีมมาสเตอร์ของงานนำเสนอ และตรวจสอบว่าการเปลี่ยนแปลงยังคงอยู่หลังการบันทึกและโหลดใหม่
ทำความเข้าใจกับแท็กสคริปต์
เมธอดแบบอักษรสคริปต์ใช้แท็กสคริปต์ย่อยแบบ BCP 47 ที่มีสี่ตัวอักษรเพื่อระบุตัวระบบการเขียน ค่าโดยทั่วไปได้แก่:
| แท็กสคริปต์ | ระบบการเขียน |
|---|---|
Cyrl |
Cyrillic |
Arab |
Arabic |
Hans |
Simplified Chinese |
Jpan |
Japanese |
Geor |
Georgian |
Thaa |
Thaana |
การแมพเหล่านี้เป็นของสกีมแบบอักษรของธีม ไม่ใช่ของส่วนข้อความแต่ละส่วน งานนำเสนออาจกำหนดการแมพที่แตกต่างกันสำหรับคอลเลกชันหลักและรอง และอาจละเว้นการแมพบางสคริปต์
เข้าถึงและตรวจสอบการแมพแบบอักษรสคริปต์
ใช้ Presentation.master_theme เพื่อเข้าถึงธีมระดับงานนำเสนอ คุณสมบัติ FontScheme.major และ FontScheme.minor จะส่งคืนคอลเลกชัน Fonts สองชุด
เรียก Fonts.get_script_font_map เพื่อดึงการแมพทั้งหมดจากคอลเลกชันหนึ่ง หากต้องการค้นหาระบบการเขียนหนึ่ง ให้เรียก Fonts.get_script_font พร้อมแท็กสคริปต์ของมัน get_script_font จะคืนค่า None เมื่อคอลเลกชันนั้นไม่ได้กำหนดการแมพที่ร้องขอ
แก้ไขการแมพและตรวจสอบการคงอยู่
ใช้ Fonts.set_script_font เพื่อสร้างการแมพหรือแทนที่ชุดแบบอักษรปัจจุบัน ใช้ Fonts.remove_script_font เพื่อเอาการแมพออก
ตัวอย่างเต็มขั้นต่อไปนี้อ่านการแมพหลักและรองที่มีอยู่ทั้งหมด ค้นหาแบบอักษรหลักของญี่ปุ่น เปลี่ยนแบบอักษรหลักของซีริลลิก ลบการแมพรองของธานา บันทึกงานนำเสนอ และเปิดใหม่เพื่อยืนยันการเปลี่ยนแปลงทั้งสอง เพื่อทำให้ขั้นตอนการลบเป็นอิสระจากธีมเริ่มต้น ตัวอย่างจะสร้างการแมพธานาเท่านั้นเมื่อยังไม่มีการกำหนดไว้ก่อนหน้า
import aspose.slides as slides
def print_script_font_map(label, fonts):
print(label)
for mapping in fonts.get_script_font_map():
print(f" {mapping.key}: {mapping.value}")
with slides.Presentation() as presentation:
font_scheme = presentation.master_theme.font_scheme
major_fonts = font_scheme.major
minor_fonts = font_scheme.minor
print_script_font_map("Existing major mappings:", major_fonts)
print_script_font_map("Existing minor mappings:", minor_fonts)
japanese_font = major_fonts.get_script_font("Jpan")
if japanese_font is None:
print("No major Japanese font is defined.")
else:
print(f"Major Japanese font: {japanese_font}")
major_fonts.set_script_font("Cyrl", "Arial")
if minor_fonts.get_script_font("Thaa") is None:
minor_fonts.set_script_font("Thaa", "Arial")
minor_fonts.remove_script_font("Thaa")
presentation.save("script-font-mappings.pptx", slides.export.SaveFormat.PPTX)
with slides.Presentation("script-font-mappings.pptx") as saved_presentation:
saved_major_fonts = saved_presentation.master_theme.font_scheme.major
saved_minor_fonts = saved_presentation.master_theme.font_scheme.minor
saved_cyrillic_font = saved_major_fonts.get_script_font("Cyrl")
saved_thaana_font = saved_minor_fonts.get_script_font("Thaa")
if saved_cyrillic_font == "Arial":
print("The Cyrillic mapping was preserved.")
else:
print("The Cyrillic mapping was not preserved.")
if saved_thaana_font is None:
print("The Thaana mapping removal was preserved.")
else:
print("The Thaana mapping still exists.")
การตรวจสอบใช้พฤติกรรม None เดียวกับการค้นหาปกติ: หลังจากบันทึกการลบแล้ว get_script_font("Thaa") จะคืนค่า None สำหรับคอลเลกชันรอง
แยกแยะการแมพธีมจากการตั้งค่าแบบอักษรอื่น
การแมพธีมเฉพาะสคริปต์มีส่วนร่วมในการเลือกแบบอักษร แต่พวกมันแก้ปัญหาที่ต่างจากการจัดรูปแบบข้อความโดยตรง, การแทนที่, และการสำรองแบบอักษร:
| กลไก | จุดประสงค์ | ผลของการเปลี่ยนการแมพธีม |
|---|---|---|
| การแมพแบบอักษรธีมเฉพาะสคริปต์ | เลือกแบบอักษรธีมหลักหรือรองสำหรับระบบการเขียนหนึ่ง | ข้อความที่ยังคงใช้แบบอักษรธีมที่สอดคล้องสามารถแก้ไขไปยังชุดแบบอักษรใหม่ที่แมพไว้ |
| แบบอักษรที่กำหนดอย่างชัดเจนให้กับส่วนข้อความ | กำหนดชุดแบบอักษรที่ร้องขอให้กับส่วนนั้นแทนการพึ่งธีม | ส่วนนั้นอาจไม่เปลี่ยนแปลงเพราะการจัดรูปแบบโดยตรงเหนือกว่าการเลือกของธีม |
| การแทนที่แบบอักษร | แทนที่แบบอักษรที่ร้องขอเมื่อแบบอักษรนั้นไม่มีอยู่หรือเมื่อตัวแทนที่มีผลบังคับใช้ | ทำงานหลังจากมีการร้องขอแบบอักษร; ไม่ได้กำหนดการแมพสคริปต์ของธีมใหม่ |
| การสำรองแบบอักษร | ให้ glyph ที่แบบอักษรที่เลือกไม่มีอยู่ โดยมักสำหรับช่วง Unicode เฉพาะ | เติมเต็ม glyph ที่ขาดหาย; ไม่ได้เปลี่ยนการแมพธีมที่จัดเก็บไว้ |
การแทนที่แบบอักษร และ แบบอักษรสำรอง
การเปลี่ยนการแมพใน Presentation.master_theme มีผลต่อเนื้อหาเท่านั้นที่การจัดรูปแบบที่มีผลยังคงพึ่งพาธีมนั้น ข้อความอาจสืบทอดการโอเวอร์ไรด์ของธีมจากมาสเตอร์, เลย์เอาต์, หรือสไลด์, หรือใช้แบบอักษรที่กำหนดโดยชัดเจน ตรวจสอบระดับเหล่านั้นเมื่อผลลัพธ์ที่มองเห็นไม่ได้ตามการแมพระดับงานนำเสนอ
ทำให้แบบอักษรที่แมพพร้อมใช้งานและตรวจสอบผลลัพธ์
การแมพสคริปต์จะเก็บชื่อชุดแบบอักษร; มันไม่ได้ติดตั้งหรือโหลดไฟล์แบบอักษรที่สอดคล้องกัน เพื่อการเรนเดอร์และการส่งออกที่สอดคล้องกัน ทุกแบบอักษรที่แมพต้องถูกติดตั้งในสภาพแวดล้อมหรือถูกจัดหาให้กับ Aspose.Slides ผ่านแหล่งข้อมูลแบบกำหนดเอง เช่น FontsLoader.load_external_fonts หรือ LoadOptions.document_level_font_sources ดู แบบอักษรกำหนดเอง สำหรับตัวเลือกการโหลดที่มี
การตรวจสอบการแมพที่บันทึกไว้ ยืนยันเพียงว่าการนิยามธีมยังคงอยู่ ไม่ได้ยืนยันว่าแบบอักษรพร้อมใช้งาน, มี glyph ทั้งหมดที่ต้องการ, หรือสร้างการจัดวางตามที่ตั้งใจ ทำการเรนเดอร์ข้อความตัวอย่างสำหรับระบบการเขียนที่ต้องการแต่ละระบบเป็นภาพหรือ PDF แล้วตรวจสอบผลลัพธ์ สิ่งนี้ช่วยจับแบบอักษรที่ขาด, การครอบคลุม glyph ที่ไม่สมบูรณ์, พฤติกรรมสำรอง, และการเปลี่ยนแปลงการจัดวาง ก่อนที่งานนำเสนอจะถูกแจกจ่าย ดู แปลงการนำเสนอ PowerPoint สำหรับตัวอย่างการเรนเดอร์และส่งออก
คำถามที่พบบ่อย
get_script_font จะคืนค่าอะไรเมื่อสคริปต์ไม่มีการแมพ?
Fonts.get_script_font จะคืนค่า None เมื่อการแมพสคริปต์ที่ร้องขอไม่ได้ถูกกำหนดในคอลเลกชันแบบอักษรหลักหรือรองนั้น
set_script_font จะเพิ่มการแมพที่สองเมื่อสคริปต์มีอยู่แล้วหรือไม่?
ไม่. Fonts.set_script_font จะสร้างการแมพเมื่อยังไม่มีและแทนที่ชุดแบบอักษรที่แมพไว้เมื่อแท็กสคริปต์เดียวกันมีอยู่แล้ว
ทำไมการเปลี่ยนการแมพธีมไม่ทำให้ข้อความบางส่วนเปลี่ยนแปลง?
ข้อความอาจมีแบบอักษรที่กำหนดอย่างชัดเจน, สืบทอดธีมที่ต่างออกไปผ่านการโอเวอร์ไรด์, หรือถูกกระทบโดยการแทนที่หรือสำรองระหว่างการเรนเดอร์ การแมพสคริปต์ระดับงานนำเสนอควบคุมเฉพาะข้อความที่การจัดรูปแบบที่มีผลยังอ้างอิงคอลเลกชันแบบอักษรของธีมนั้น
การบันทึกและเปิดใหม่เพียงพอที่จะตรวจสอบผลลัพธ์หลายภาษาหรือไม่?
ไม่. การเปิดใหม่ตรวจสอบการคงอยู่ของข้อมูลธีม นอกจากนี้ยังต้องเรนเดอร์ข้อความตัวอย่างจากแต่ละระบบการเขียนที่ต้องการเพื่อยืนยันว่าแบบอักษรที่แมพพร้อมใช้งานและมี glyph ที่จำเป็น