Fonts
Fonts
คู่มือนี้แสดงวิธีตรวจสอบแบบอักษรที่อ้างอิงในเอกสาร, ดึงข้อมูลแบบอักษรที่ฝังไว้, และควบคุมการฝังแบบอักษร TrueType ขณะบันทึกด้วย Aspose.Words FOSS สำหรับ .NET. Aspose.Words FOSS สำหรับ .NET ติดตามแบบอักษรทุกตัวที่อ้างอิงโดยเอกสารที่โหลดผ่าน FontInfoCollection, และเปิดเผยเมตาดาต้าต่อแบบอักษร, การดึงแบบอักษรที่ฝังไว้, และการควบคุมการฝังขณะบันทึกผ่าน FontInfo. Document.FontSettings และ LoadOptions.FontSettings ให้จุดเริ่มต้น FontSettings (โดยเจตนาที่จะทำให้เบาบางในฉบับนี้).
การตรวจสอบแบบอักษรที่ใช้ในเอกสาร
DocumentBase.FontInfos (สืบทอดจาก Document) คืนค่า FontInfoCollection ที่อธิบายแบบอักษรทุกตัวที่อ้างอิงในเอกสาร. เข้าถึงโดยใช้ชื่อ (เช่น fontInfos["Arial"]), ทดสอบว่ามีอยู่หรือไม่ด้วย Contains(name), นับจำนวนด้วย Count, หรือแสดงรายการทั้งหมดผ่าน GetEnumerator().
คุณสมบัติและการจัดประเภทของแบบอักษร
แต่ละ FontInfo อธิบายแบบอักษรหนึ่งตัว: Name และ AltName ระบุแบบอักษร, Family จัดประเภทโดยใช้ enum FontFamily (Auto, Roman, Swiss, Modern, Script, Decorative), Pitch รายงาน FontPitch ของมัน (Default, Fixed, Variable), และ IsTrueType, Charset, และ Panose เปิดเผยข้อมูลการจับคู่แบบอักษรระดับล่าง.
การดึงแบบอักษรที่ฝังไว้
หากเอกสารมีฟอนต์ฝังอยู่, FontInfo.GetEmbeddedFont(format, style) จะคืนค่าไบต์ฟอนต์ฝังดิบสำหรับ EmbeddedFontFormat ที่กำหนด (EmbeddedOpenType หรือ OpenType) และ EmbeddedFontStyle (Regular, Bold, Italic, BoldItalic). GetEmbeddedFontAsOpenType(style) จะคืนค่าฟอนต์ที่แปลงเป็นรูปแบบ OpenType โดยตรง, ไม่ว่ามันจะถูกฝังอย่างไรในตอนแรก.
สิทธิ์การใช้ลิขสิทธิ์การฝังฟอนต์
ก่อนทำการสกัดหรือฝังฟอนต์ใหม่, ตรวจสอบ FontInfo.EmbeddingLicensingRights, ซึ่งเป็นอ็อบเจ็กต์แบบ FontEmbeddingLicensingRights. EmbeddingUsagePermissions รายงานระดับลิขสิทธิ์ผ่าน enum FontEmbeddingUsagePermissions (Installable, RestrictedLicense, PrintAndPreview, Editable), ขณะที่ NoSubsetting และ BitmapEmbeddingOnly ทำเครื่องหมายข้อจำกัดเพิ่มเติมที่กำหนดโดยผู้จำหน่ายฟอนต์.
การควบคุมการฝังฟอนต์เมื่อบันทึก
FontInfoCollection ยังมีสวิตช์การฝังระดับเอกสาร: ตั้งค่า EmbedTrueTypeFonts เป็น true เพื่อฝังฟอนต์ TrueType ทุกตัวที่ใช้ในเอกสารเมื่อบันทึก, EmbedSystemFonts เพื่อรวมฟอนต์ที่โดยทั่วไปถือว่าอยู่ในระบบใดๆ, และ SaveSubsetFonts เพื่อฝังเฉพาะ glyph ที่ใช้งานจริงแทนฟอนต์ทั้งหมด.
ขอบเขตของ FontSettings ในฉบับนี้
Document.FontSettings และ LoadOptions.FontSettings ทั้งสองจะคืนค่าอ็อบเจ็กต์ FontSettings, และ FontSettings.DefaultInstance เปิดเผยอินสแตนซ์ค่าเริ่มต้นที่ใช้ร่วมกัน. ในฉบับ FOSS นี้, พื้นผิว API ของ FontSettings จำกัดอยู่ที่คุณสมบัติอินสแตนซ์ค่าเริ่มต้นนั้น — การแก้ไขแหล่งฟอนต์แบบโฟลเดอร์และระบบ, ซึ่งใน Aspose.Words ถูกใช้เพื่อทดแทนหรือแก้ไขฟอนต์สำหรับการจัดหน้าและการเรนเดอร์, ไม่ปรากฏเนื่องจากการจัดหน้าและการเรนเดอร์อยู่นอกขอบเขตของฉบับนี้. การจัดการฟอนต์ที่นี่หมายถึงการตรวจสอบเมตาดาต้าและการฝัง, ไม่ใช่การทดแทนฟอนต์สำหรับการเรนเดอร์.
เคล็ดลับและแนวปฏิบัติที่ดีที่สุด
- ตรวจสอบ
FontInfo.EmbeddingLicensingRights.EmbeddingUsagePermissionsเสมอก่อนทำการสกัดหรือแจกจ่ายฟอนต์ที่ฝังไว้ — ฟอนต์บางตัวมีลิขสิทธิ์RestrictedLicenseหรือPrintAndPreviewเท่านั้น. - ใช้
GetEmbeddedFontAsOpenType()เมื่อคุณต้องการรูปแบบผลลัพธ์ที่สม่ำเสมอโดยไม่คำนึงว่าต้นฉบับเอกสารฝังฟอนต์อย่างไร (EmbeddedOpenTypeกับOpenType). - ตั้งค่า
FontInfoCollection.SaveSubsetFontsเป็นtrueเพื่อลดขนาดไฟล์ผลลัพธ์เมื่อฝังฟอนต์ที่ใช้ตัวอักษรเพียงไม่กี่ glyph. FontInfoCollection.Contains(name)มีต้นทุนต่ำกว่าการทำดัชนีและจัดการกับการค้นหาไม่สำเร็จ (เช่นfontInfos[name]) เมื่อคุณต้องการเพียงตรวจสอบการมีอยู่ของฟอนต์.
ปัญหาทั่วไป
| ปัญหา | สาเหตุ | วิธีแก้ไข |
|---|---|---|
GetEmbeddedFont() คืนค่าข้อมูลที่ใช้ไม่ได้ | ฟอนต์ที่อ้างอิงไม่ได้ถูกฝังอยู่ในเอกสารจริงๆ | ตรวจสอบการตั้งค่าการฝังของเอกสารก่อนสมมติว่ามีข้อมูลฟอนต์อยู่ |
การทำดัชนีใน FontInfoCollection ตามชื่อไม่พบอะไรเลย | ชื่อฟอนต์ไม่ตรงกันอย่างแม่นยำ รวมถึงตัวพิมพ์ใหญ่/เล็กด้วย | นับ FontInfoCollection ด้วย GetEnumerator() เพื่อยืนยันสตริง Name ที่แน่นอน |
| API การแทนที่/การแก้ไขแบบอักษรที่คาดหวังหายไป | การแก้ไขแหล่งที่มาของแบบอักษรแบบโฟลเดอร์และระบบยังไม่ได้รับการทำงานในรุ่น FOSS นี้ | ใช้ FontInfo/FontInfoCollection สำหรับเมตาดาต้าและการฝังเท่านั้น; การแทนที่แบบอักษรสำหรับการเรนเดอร์ไม่ได้เป็นส่วนหนึ่งของขอบเขตของรุ่นนี้ |
FAQ
ฉันจะทำรายการฟอนต์ทั้งหมดที่เอกสารอ้างอิงได้อย่างไร?
นับจำนวน Document.FontInfos (ซึ่งเป็น FontInfoCollection) ผ่าน GetEnumerator(), หรือทำดัชนีด้วยชื่อเพื่อค้นหาฟอนต์เฉพาะ (เช่น fontInfos["Arial"]).
ฉันสามารถดึงไบต์ดิบของฟอนต์ที่ฝังอยู่จากเอกสารได้หรือไม่?
ใช่, หากฟอนต์ถูกฝัง — เรียก FontInfo.GetEmbeddedFont(format, style) เพื่อรับรูปแบบที่ฝังไว้เดิม, หรือ GetEmbeddedFontAsOpenType(style) เพื่อทำให้ผลลัพธ์เป็นมาตรฐานเป็น OpenType.
ฉันจะทำอย่างไรให้แน่ใจว่าฟอนต์ถูกฝังเมื่อบันทึกเอกสาร?
ตั้งค่า FontInfoCollection.EmbedTrueTypeFonts เป็น true ก่อนบันทึก; เพิ่ม EmbedSystemFonts หากคุณต้องการให้ฟอนต์ถือว่ามีอยู่ในระบบใดก็ได้, และ SaveSubsetFonts เพื่อฝังเฉพาะ glyph ที่ใช้งานอยู่เท่านั้น.
รุ่นนี้รองรับการค้นหาฟอนต์จากโฟลเดอร์ที่กำหนดเองสำหรับการเรนเดอร์หรือไม่?
ไม่ — การแก้ไขแหล่งฟอนต์ตามโฟลเดอร์และระบบ (FontSettings source configuration) ไม่ได้ถูกนำมาใช้ที่นี่, เนื่องจากมันมีไว้เพื่อสนับสนุนการจัดหน้าและการเรนเดอร์, ซึ่งอยู่นอกขอบเขตของรุ่น FOSS นี้.
FontEmbeddingLicensingRights.NoSubsetting หมายถึงอะไร?
นี่เป็นแฟล็กการให้สิทธิ์ตามที่ผู้จำหน่ายฟอนต์รายงานเกี่ยวกับสิทธิ์การฝัง: เมื่อ true, ฟอนต์อาจไม่ถูกทำ subset ให้เหลือเฉพาะ glyph ที่ใช้งานเท่านั้น.
API Reference สรุป
| คลาส / เมธอด | คำอธิบาย |
|---|---|
FontInfoCollection | แบบอักษรที่อ้างอิงในเอกสาร; ดัชนีตามชื่อ (fontInfos[name]), Contains(), Count, GetEnumerator(), พร้อมกับ EmbedTrueTypeFonts/EmbedSystemFonts/SaveSubsetFonts |
FontInfo | เมตาดาต้าของฟอนต์หนึ่ง: Name, AltName, Family, Pitch, IsTrueType, Charset, Panose, EmbeddingLicensingRights |
FontInfo.GetEmbeddedFont() / GetEmbeddedFontAsOpenType() | ดึงไบต์ฟอนต์ที่ฝังไว้ |
EmbeddedFontFormat / EmbeddedFontStyle | Enums ที่ระบุรูปแบบและรูปแบบสไตล์ของฟอนต์ที่ฝังไว้ |
FontEmbeddingLicensingRights / FontEmbeddingUsagePermissions | ข้อจำกัดใบอนุญาตการฝังที่รายงานต่อฟอนต์แต่ละตัว |
FontSettings | จุดเริ่มต้นการตั้งค่าแบบอักษรขั้นต่ำ (Document.FontSettings, LoadOptions.FontSettings); ไม่มีการแก้ไขแหล่งที่มาของแบบอักษรในฉบับนี้ |