กำหนดการแทนที่ฟอนต์ในงานนำเสนอด้วย Python
ภาพรวม
การแทนที่ฟอนต์ช่วยให้ Aspose.Slides ใช้ฟอนต์ที่มีอยู่แทนฟอนต์ที่ไม่สามารถเข้าถึงได้เมื่อทำการเรนเดอร์หรือแปลงงานนำเสนอ การแทนที่จะส่งผลต่อผลลัพธ์ที่ถูกแสดงออก; ไม่ได้เปลี่ยนฟอนต์ที่กำหนดให้กับเนื้อหาของงานนำเสนอ
คุณสามารถกำหนดฟอนต์ที่จะใช้เมื่อฟอนต์บางตัวไม่มีอยู่ และคุณสามารถตรวจสอบการแทนที่ที่ Aspose.Slides จะทำระหว่างการเรนเดอร์ ซึ่งช่วยให้ผลลัพธ์คงที่ในสภาพแวดล้อมที่มีฟอนต์ติดตั้งต่างกัน
รับการแทนที่ฟอนต์
ใช้เมธอด FontsManager.get_substitutions เพื่อระบุว่าฟอนต์ใดบ้างจะถูกแทนที่เมื่อทำการเรนเดอร์งานนำเสนอ เมธอดจะคืนค่าอ็อบเจ็กต์ FontSubstitutionInfo ที่บ่งบอกชื่อฟอนต์ต้นฉบับและฟอนต์ที่แทนที่
ตัวอย่าง Python ต่อไปนี้แสดงรายการการแทนที่ฟอนต์ทั้งหมดสำหรับงานนำเสนอ:
import aspose.slides as slides
with slides.Presentation("Presentation.pptx") as presentation:
for substitution in presentation.fonts_manager.get_substitutions():
print(f"{substitution.original_font_name} -> {substitution.substituted_font_name}")
รับการแทนที่ฟอนต์สำหรับสไลด์ที่เลือก
ใช้ FontsManager.get_substitutions พร้อมรายชื่อดัชนีสไลด์เพื่อดูการแทนที่ที่จำเป็นสำหรับการเรนเดอร์สไลด์เฉพาะส่วน ซึ่งเป็นประโยชน์เมื่อคุณกำลังเรนเดอร์หรือส่งออกบางส่วนของงานนำเสนอ, ตรวจสอบงานนำเสนอขนาดใหญ่เป็นขั้นเป็นตอน, ค้นหาสไลด์ที่พึ่งพาฟอนต์ที่ไม่มีอยู่, เตรียมชุดฟอนต์ขนาดเล็กสำหรับเซิร์ฟเวอร์หรือคอนเทนเนอร์, หรือวินิจฉัยความแตกต่างของการเรนเดอร์โดยไม่ต้องประมวลผลสไลด์ที่ไม่เกี่ยวข้อง
รายการนี้ประกอบด้วยดัชนีสไลด์แบบหนึ่ง‑ฐาน: 1 ระบุสไลด์แรก ในขณะที่คอลเลกชัน Presentation.slides ใช้ศูนย์‑ฐาน ดังนั้นสไลด์เดียวกันจะเข้าถึงได้ด้วย presentation.slides[0] ควรคำนึงถึงความแตกต่างนี้เมื่อลิสต์ดัชนีเพื่อหลีกเลี่ยงข้อผิดพลาดลำดับหนึ่ง
เรียกเมธอดผ่านคุณสมบัติ Presentation.fonts_manager จะคืนค่าเฉพาะการแทนที่ที่กำหนดขณะเรนเดอร์สไลด์ที่เลือก แต่ละผลลัพธ์เป็นอ็อบเจ็กต์ FontSubstitutionInfo ที่บรรจุชื่อฟอนต์ต้นฉบับและฟอนต์ที่แทนที่ ผลลัพธ์สะท้อนสภาพแวดล้อมฟอนต์ปัจจุบัน, กฎ fallback ที่กำหนด, กฎการแทนที่ที่เก็บไว้ใน IFontSubstRuleCollection, และ ฟอนต์ที่โหลดจากภายนอก
การแทนที่เดียวกันอาจจำเป็นสำหรับสไลด์ที่เลือกหลายสไลด์ ให้ลบรายการซ้ำเมื่อคุณสร้างรายการสินค้าฟอนต์หรือรายงาน preflight ตัวอย่างต่อไปนี้รายงานการแทนที่ทุกรายการที่คืนค่าแล้วสร้างรายการที่เรียงลำดับของการแมปฟอนต์ที่ไม่ซ้ำ:
import aspose.slides as slides
with slides.Presentation("Presentation.pptx") as presentation:
selected_slides = [1, 3, 5]
substitutions = list(presentation.fonts_manager.get_substitutions(selected_slides))
print("Substitutions for the selected slides:")
for substitution in substitutions:
print(f"{substitution.original_font_name} -> {substitution.substituted_font_name}")
preflight_entries = [f"{substitution.original_font_name} -> {substitution.substituted_font_name}" for substitution in substitutions]
unique_preflight_entries = {entry.casefold(): entry for entry in preflight_entries}
sorted_preflight_entries = sorted(unique_preflight_entries.values(), key=str.casefold)
print("Deduplicated font preflight report:")
for entry in sorted_preflight_entries:
print(entry)
คลาส FontsManager มีเมธอดในรูปแบบทั้งสอง ให้เลือกใช้ตามขอบเขตของการเรนเดอร์:
| การเรียกใช้เมธอด | ใช้เมื่อ |
|---|---|
| get_substitutions โดยไม่มีอาร์กิวเมนต์ | คุณต้องการการแทนที่สำหรับงานนำเสนอทั้งหมด |
| get_substitutions พร้อมรายการดัชนีสไลด์ | คุณต้องการการแทนที่สำหรับช่วงที่เลือก, การตรวจสอบแบบขั้นเป็นขั้น, หรือการส่งออกบางส่วน |
กำหนดกฎการแทนที่ฟอนต์
เพื่อตั้งค่าฟอนต์ที่ Aspose.Slides ควรใช้เมื่อฟอนต์ต้นทางไม่มีอยู่:
- โหลดงานนำเสนอ
- สร้างคำจำกัดความฟอนต์สำหรับฟอนต์ต้นทางและฟอนต์ทดแทน
- สร้างอ็อบเจ็กต์ FontSubstRule พร้อมเงื่อนไข WHEN_INACCESSIBLE
- เพิ่มกฎลงใน FontSubstRuleCollection
- กำหนดคอลเลกชันให้กับคุณสมบัติ FontsManager.font_subst_rule_list
- เรนเดอร์หรือแปลงงานนำเสนอ
ตัวอย่าง Python ต่อไปนี้แทนที่ Arial ด้วย SomeRareFont เมื่อ SomeRareFont ไม่มีอยู่ แล้วเรนเดอร์สไลด์แรกเพื่อยืนยันผลลัพธ์ ฟอนต์ทดแทนจะต้องมีอยู่สำหรับ Aspose.Slides
import aspose.slides as slides
with slides.Presentation("Fonts.pptx") as presentation:
source_font = slides.FontData("SomeRareFont")
substitute_font = slides.FontData("Arial")
substitution_rule = slides.FontSubstRule(source_font, substitute_font, slides.FontSubstCondition.WHEN_INACCESSIBLE)
substitution_rules = slides.FontSubstRuleCollection()
substitution_rules.add(substitution_rule)
presentation.fonts_manager.font_subst_rule_list = substitution_rules
with presentation.slides[0].get_image(1, 1) as image:
image.save("slide.jpg", slides.ImageFormat.JPEG)
Note
สำหรับการเปลี่ยนแปลงฟอนต์โดยไม่มีเงื่อนไขทั่วทั้งงานนำเสนอ ดูที่ Font Replacementข้อจำกัดสำหรับฟอนต์สมการคณิตศาสตร์
กฎการแทนที่ฟอนต์เป็นส่วนหนึ่งของกระบวนการเลือกฟอนต์มาตรฐานที่ใช้ระหว่างการเรนเดอร์และการแปลง มันทำงานกับข้อความทั่วไปเมื่อ Aspose.Slides สามารถแทนที่ฟอนต์ที่เข้าถึงไม่ได้ด้วยฟอนต์ที่กำหนดโดยกฎ
สมการ Office Math มีข้อกำหนดพิเศษ หากสมการใช้ Cambria Math Aspose.Slides อาจต้องการฟอนต์นั้นอย่างแม่นยำเพื่อคำนวณและเรนเดอร์เค้าโครงสมการ กฎที่แทนที่ด้วยฟอนต์คณิตศาสตร์อื่น เช่น STIX Two Math ไม่สามารถแทนที่ Cambria Math ในกรณีนี้ได้ และการเรนเดอร์อาจยังระบุว่าต้องการ Cambria Math
เพื่อเรนเดอร์หรือแปลงงานนำเสนอเช่นนี้ ให้ทำให้ Cambria Math มีพร้อมใช้งานสำหรับ Aspose.Slides ติดตั้งในระบบปฏิบัติการหรือโหลดเป็น ฟอนต์ภายนอก
ข้อจำกัดนี้ใช้กับการจัดวางสมการเท่านั้น กฎการแทนที่ที่กล่าวมาข้างต้นยังคงใช้กับข้อความทั่วไปของงานนำเสนอ
คำถามที่พบบ่อย
ความแตกต่างระหว่างการแทนที่ฟอนต์และการเปลี่ยนฟอนต์คืออะไร?
Font replacement เปลี่ยนฟอนต์หนึ่งเป็นฟอนต์อื่นทั่วทั้งงานนำเสนอโดยตั้งใจ ส่วนการแทนที่ฟอนต์จะเลือกฟอนต์สำหรับผลลัพธ์ที่เรนเดอร์เมื่อเงื่อนไขที่กำหนดเป็นจริง เช่น ฟอนต์ต้นฉบับไม่มีอยู่
กฎการแทนที่จะถูกใช้เมื่อใด?
กฎเข้าร่วมใน ขั้นตอนการเลือกฟอนต์ ระหว่างการเรนเดอร์และการแปลง เมื่อตั้งค่า WHEN_INACCESSIBLE กฎจะใช้เฉพาะเมื่อ Aspose.Slides ไม่สามารถเข้าถึงฟอนต์ต้นทาง
จะเกิดอะไรขึ้นเมื่อฟอนต์หายไปและไม่มีการกำหนดกฎการแทนที่?
Aspose.Slides จะเลือกฟอนต์ที่ใกล้เคียงที่สุดตามกระบวนการเลือกฟอนต์ ผลลัพธ์ขึ้นอยู่กับฟอนต์ที่มีในสภาพแวดล้อมรันไทม์
ฉันสามารถโหลดฟอนต์ภายนอกเพื่อหลีกเลี่ยงการแทนที่ได้ไหม?
ได้ คุณสามารถ โหลดฟอนต์ภายนอก เพื่อให้ Aspose.Slides ใช้ในระหว่างการเรนเดอร์และการแปลง
Aspose แจกจ่ายฟอนต์มาพร้อมไลบรารีหรือไม่?
ไม่ คุณต้องเป็นผู้จัดหาฟอนต์และปฏิบัติตามเงื่อนไขของไลเซนส์ฟอนต์
ผลลัพธ์การแทนที่อาจแตกต่างระหว่าง Windows, Linux, และ macOS หรือไม่?
ใช่ ฟอนต์ที่ติดตั้งและตำแหน่งการค้นหาฟอนต์ต่างกันตามระบบปฏิบัติการ ดังนั้นฟอนต์ที่มีบนเครื่องหนึ่งอาจต้องการการแทนที่บนเครื่องอื่น
ฉันจะทำให้การเลือกฟอนต์สอดคล้องกันในการแปลงแบบกลุ่มอย่างไร?
ใช้ไฟล์ฟอนต์และเวอร์ชันเดียวกันบนทุกเครื่องหรือคอนเทนเนอร์, โหลดฟอนต์ภายนอกที่จำเป็น, และ ฝังฟอนต์ เมื่อไลเซนส์อนุญาต คุณยังสามารถเรียก FontsManager.get_substitutions ก่อนการส่งออกเพื่อระบุการแทนที่ที่ไม่คาดคิด