กำหนดค่าการแทนที่แบบอักษรในพรีเซนเทชันโดยใช้ Python ผ่าน Java

ภาพรวม

การแทนที่แบบอักษร (Font substitution) ทำให้ Aspose.Slides สามารถใช้แบบอักษรที่มีอยู่แทนแบบอักษรที่ไม่สามารถเข้าถึงได้เมื่อทำการเรนเดอร์หรือแปลงพรีเซนเทชัน การแทนที่จะส่งผลต่อผลลัพธ์ที่เรนเดอร์เท่านั้น; ไม่ได้เปลี่ยนแบบอักษรที่กำหนดให้กับเนื้อหาในพรีเซนเทชัน

คุณสามารถกำหนดแบบอักษรที่จะใช้เมื่อแบบอักษรบางตัวไม่พร้อมใช้งานและสามารถตรวจสอบการแทนที่ที่ Aspose.Slides จะทำระหว่างการเรนเดอร์ได้ สิ่งนี้ช่วยให้ผลลัพธ์คงที่ในสภาพแวดล้อมที่มีแบบอักษรติดตั้งแตกต่างกัน

รับการแทนที่แบบอักษร

ใช้เมธอด FontsManager.getSubstitutions เพื่อกำหนดว่ามีแบบอักษรใดจะถูกแทนที่เมื่อพรีเซนเทชันถูกเรนเดอร์ เมธอดจะคืนค่าอ็อบเจ็กต์ FontSubstitutionInfo ที่ระบุชื่อแบบอักษรต้นฉบับและแบบอักษรที่แทนที่

ตัวอย่าง Python ด้านล่างนี้แสดงรายการการแทนที่แบบอักษรทั้งหมดสำหรับพรีเซนเทชัน:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation

presentation = Presentation("Presentation.pptx")
try:
    for substitution in presentation.getFontsManager().getSubstitutions():
        print(f"{substitution.getOriginalFontName()} -> {substitution.getSubstitutedFontName()}")
finally:
    presentation.dispose()

รับการแทนที่แบบอักษรสำหรับสไลด์ที่เลือก

ใช้ overload ของ FontsManager.getSubstitutions พร้อมอาร์กิวเมนต์เป็นอาร์เรย์จำนวนเต็มของ Java เพื่อดูการแทนที่ที่จำเป็นสำหรับการเรนเดอร์สไลด์เฉพาะเท่านั้น ซึ่งมีประโยชน์เมื่อคุณกำลังเรนเดอร์หรือส่งออกส่วนของพรีเซนเทชัน ตรวจสอบพรีเซนเทชันขนาดใหญ่เป็นขั้นเป็นตอน ค้นหาสไลด์ที่พึ่งพาแบบอักษรที่ไม่มีอยู่ เตรียมแพคเกจแบบอักษรขนาดเล็กสำหรับเซิร์ฟเวอร์หรือคอนเทนเนอร์ หรือวินิจฉัยความแตกต่างในการเรนเดอร์โดยไม่ต้องประมวลผลสไลด์ที่ไม่เกี่ยวข้อง

อาร์เรย์ slides มีดัชนีสไลด์เริ่มจากเลขหนึ่ง: 1 ระบุสไลด์แรก ในทางตรงกันข้าม ตัวเข้าถึงคอลเลกชัน Presentation.getSlides ใช้ดัชนีเริ่มจากศูนย์ ดังนั้นสไลด์เดียวกันจะเข้าถึงด้วย presentation.getSlides().get_Item(0) ควรคำนึงถึงความแตกต่างนี้เมื่อสร้างอาร์เรย์เพื่อหลีกเลี่ยงข้อผิดพลาด off-by-one

เรียก overload ผ่านเมธอด Presentation.getFontsManager ซึ่งจะคืนค่าการแทนที่ที่กำหนดระหว่างการเรนเดอร์สไลด์ที่เลือกเท่านั้น ผลลัพธ์แต่ละรายการเป็นอ็อบเจ็กต์ FontSubstitutionInfo ที่มีชื่อแบบอักษรต้นฉบับและแบบอักษรที่แทนที่ ผลลัพธ์สะท้อนสภาพแวดล้อมแบบอักษรปัจจุบัน, กฎ fallback ที่กำหนด, กฎการแทนที่ที่เก็บใน FontSubstRuleCollection และ externally loaded fonts

การแทนที่เดียวกันอาจต้องการโดยสไลด์ที่เลือกหลายสไลด์ ให้ทำการลบรายการซ้ำเมื่อคุณสร้างรายการแบบอักษรหรือรายงาน preflight ตัวอย่างต่อไปนี้แสดงการรายงานการแทนที่ที่ได้รับทั้งหมดและจากนั้นสร้างรายการเรียงลำดับของการแมปแบบอักษรที่ไม่ซ้ำกัน:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation

presentation = Presentation("Presentation.pptx")
try:
    selected_slides = jpype.JArray(jpype.JInt)([1, 3, 5])
    substitutions = list(presentation.getFontsManager().getSubstitutions(selected_slides))

    print("Substitutions for the selected slides:")
    for substitution in substitutions:
        print(f"{substitution.getOriginalFontName()} -> {substitution.getSubstitutedFontName()}")

    unique_entries = {}
    for substitution in substitutions:
        entry = f"{substitution.getOriginalFontName()} -> {substitution.getSubstitutedFontName()}"
        unique_entries.setdefault(entry.casefold(), entry)

    print("Deduplicated font preflight report:")
    for key in sorted(unique_entries):
        print(unique_entries[key])
finally:
    presentation.dispose()

คลาส FontsManager มี overload ทั้งสองให้เลือก ใช้ตามขอบเขตของการดำเนินการเรนเดอร์:

โอเวอร์โหลด ใช้เมื่อ
getSubstitutions with no arguments คุณต้องการการแทนที่สำหรับพรีเซนเทชันทั้งหมด.
getSubstitutions with a Java integer array คุณต้องการการแทนที่สำหรับช่วงที่เลือก, การตรวจสอบแบบเพิ่มขั้น, หรือการส่งออกบางส่วน.

ตั้งกฎการแทนที่แบบอักษร

เพื่อระบุแบบอักษรที่ Aspose.Slides ควรใช้เมื่อแบบอักษรต้นทางไม่พร้อมใช้งาน:

  1. โหลดพรีเซนเทชัน.
  2. สร้างการกำหนดแบบอักษรสำหรับแบบอักษรต้นทางและแบบอักษรแทนที่.
  3. สร้าง FontSubstRule พร้อมเงื่อนไข WhenInaccessible.
  4. เพิ่มกฎลงใน FontSubstRuleCollection.
  5. กำหนดคอลเลกชันโดยใช้เมธอด FontsManager.setFontSubstRuleList.
  6. เรนเดอร์หรือแปลงพรีเซนเทชัน.

ตัวอย่าง Python ด้านล่างนี้แทนที่ Arial ด้วย SomeRareFont เมื่อ SomeRareFont ไม่พร้อมใช้งาน และจากนั้นเรนเดอร์สไลด์แรกเพื่อยืนยันผลลัพธ์ แบบอักษรแทนที่ต้องพร้อมใช้งานสำหรับ Aspose.Slides.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import FontData, FontSubstCondition, FontSubstRule, FontSubstRuleCollection, ImageFormat, Presentation

presentation = Presentation("Fonts.pptx")
try:
    source_font = FontData("SomeRareFont")
    substitute_font = FontData("Arial")
    substitution_rule = FontSubstRule(source_font, substitute_font, FontSubstCondition.WhenInaccessible)

    substitution_rules = FontSubstRuleCollection()
    substitution_rules.add(substitution_rule)
    presentation.getFontsManager().setFontSubstRuleList(substitution_rules)

    image = presentation.getSlides().get_Item(0).getImage(1.0, 1.0)
    try:
        image.save("slide.jpg", ImageFormat.Jpeg)
    finally:
        image.dispose()
finally:
    presentation.dispose()

ข้อจำกัดสำหรับแบบอักษรสมการคณิตศาสตร์

กฎการแทนที่แบบอักษรเป็นส่วนหนึ่งของกระบวนการเลือกแบบอักษรมาตฐานที่ใช้ระหว่างการเรนเดอร์และการแปลง ซึ่งทำงานกับข้อความทั่วไปเมื่อ Aspose.Slides สามารถแทนที่แบบอักษรที่ไม่สามารถเข้าถึงได้ด้วยแบบอักษรที่พร้อมใช้งานตามกฎที่กำหนด

สมการ Office Math มีข้อกำหนดเพิ่มเติม หากสมการใช้แบบอักษร Cambria Math Aspose.Slides อาจต้องการแบบอักษรนั้นอย่างตรงไปตรงมาเพื่อคำนวณและเรนเดอร์โครงสร้างสมการ กฎที่แทนที่ด้วยแบบอักษรคณิตศาสตร์อื่น เช่น STIX Two Math ไม่สามารถแทนที่ Cambria Math เพื่อวัตถุประสงค์นี้ได้ และการเรนเดอร์อาจยังระบุว่าต้องการ Cambria Math

เพื่อเรนเดอร์หรือแปลงพรีเซนเทชันดังกล่าว ให้ทำให้ Cambria Math พร้อมใช้งานสำหรับ Aspose.Slides ติดตั้งในระบบปฏิบัติการหรือโหลดเป็น external font

ข้อจำกัดนี้ใช้กับโครงสร้างสมการเท่านั้น ส่วนกฎการแทนที่ที่อธิบายไว้ข้างต้นยังคงใช้กับข้อความปกติในพรีเซนเทชัน

คำถามที่พบบ่อย

ความแตกต่างระหว่าง Font Replacement กับ Font Substitution คืออะไร?
Font replacement เปลี่ยนแบบอักษรหนึ่งเป็นอีกแบบหนึ่งโดยเจตนาในทั่วพรีเซนเทชัน ส่วน Font substitution จะเลือกแบบอักษรสำหรับผลลัพธ์ที่เรนเดอร์เมื่อเงื่อนไขที่กำหนดตรง, เช่น เมื่อแบบอักษรต้นฉบับไม่พร้อมใช้งาน.

กฎการแทนที่จะถูกนำไปใช้เมื่อใด?
กฎเหล่านี้เข้าร่วมใน font selection sequence ระหว่างการเรนเดอร์และการแปลง หากใช้ WhenInaccessible กฎจะถูกใช้เฉพาะเมื่อ Aspose.Slides ไม่สามารถเข้าถึงแบบอักษรต้นทาง.

จะเกิดอะไรขึ้นเมื่อแบบอักษรหายและไม่มีการกำหนดกฎการแทนที่?
Aspose.Slides จะเลือกแบบอักษรที่ใกล้เคียงที่สุดตามกระบวนการเลือกแบบอักษรของมัน ผลลัพธ์ขึ้นอยู่กับแบบอักษรที่มีอยู่ในสภาพแวดล้อมการทำงาน.

ฉันสามารถโหลดแบบอักษรภายนอกเพื่อหลีกเลี่ยงการแทนที่ได้หรือไม่?
ได้ คุณสามารถ load external fonts เพื่อให้ Aspose.Slides ใช้ในระหว่างการเรนเดอร์และการแปลง.

Aspose มีการแจกจ่ายแบบอักษรมาพร้อมกับไลบรารีหรือไม่?
ไม่ คุณต้องรับผิดชอบในการจัดเตรียมแบบอักษรและปฏิบัติตามสัญญาอนุญาตของแบบอักษรเหล่านั้น.

ผลลัพธ์การแทนที่อาจแตกต่างกันระหว่าง Windows, Linux และ macOS หรือไม่?
ใช่ แบบอักษรที่ติดตั้งและตำแหน่งการค้นหาแบบอักษรจะแตกต่างกันตามระบบปฏิบัติการ ดังนั้นแบบอักษรที่พร้อมใช้งานบนเครื่องหนึ่งอาจต้องการการแทนที่บนเครื่องอื่น.

จะทำให้การเลือกแบบอักษรสอดคล้องกันในการแปลงแบบเป็นชุดได้อย่างไร?
ใช้ไฟล์แบบอักษรและเวอร์ชันเดียวกันบนทุกเครื่องหรือคอนเทนเนอร์, load required external fonts, และ embed fonts เมื่อได้รับอนุญาตจากสัญญาอนุญาต คุณยังสามารถเรียก FontsManager.getSubstitutions ก่อนส่งออกเพื่อระบุการแทนที่ที่ไม่คาดคิด.