ภาพรวม
รูปแบบเอกสารหลายประเภทผูกพันกับฟอนต์อย่างแน่นหนา ตัวอย่างเช่น เมื่อผู้ใช้เพิ่มข้อความลงในเอกสาร DOCX ข้อความนั้นจะต้องมีฟอนต์ที่กำหนดไว้บางอย่าง รูปแบบเอกสารบางประเภทมักจะเก็บข้อมูลฟอนต์ฝังอยู่ในไฟล์เอกสารเอง เช่น PDF แต่รูปแบบอื่น ๆ เช่น รูปแบบของตระกูล Office ส่วนใหญ่พึ่งพาฟอนต์ที่ติดตั้งในระบบปฏิบัติการ
นอกจากนี้ยังมีรูปแบบฟอนต์หลายประเภท ตัวอย่างเช่น ฟอนต์ส่วนใหญ่ที่ติดตั้งอยู่จะอยู่ในรูปแบบ TTF (TrueType) และ OTF (OpenType) ฟอร์แมตเอกสาร Office Open XML ยังทำงานกับรูปแบบ EOT (Embedded OpenType) อีกด้วย บนเว็บ อย่างไรก็ตาม WOFF และ WOFF2 เป็นรูปแบบที่ใช้กันมากที่สุด
สารบัญ
- ภาพรวม
- การดึงข้อมูลฟอนต์ที่ใช้ทั้งหมด
- การจัดการฟอนต์ที่หายไป
- การระบุฟอนต์ที่หายไป
- การแทนที่ฟอนต์ที่หายไป
- การยกเว้นฟอนต์สำหรับ HTML
- สรุป
- ดูเพิ่มเติม
- รับการทดลองใช้ฟรี
การดึงข้อมูลฟอนต์ที่ใช้ทั้งหมด
คุณลักษณะที่มีประโยชน์ที่สุดในบริบทของฟอนต์คือการแสดงรายการและคืนค่า ฟังก์ชัน GetAllFonts() ของ GroupDocs.Viewer จะทำหน้าที่นี้ — เมื่อโหลดเอกสารเข้าสู่ตัวอย่างของคลาส Viewer ให้เรียกเมธอดนี้เพื่อรับรายการฟอนต์ทั้งหมดที่ใช้ในเอกสารนั้น รายการที่คืนค่ามีแต่ละฟอนต์เป็นออบเจ็กต์ที่เป็นชนิดที่ทำการ implement อินเทอร์เฟซ IFontInfo อินเทอร์เฟซนี้มีคุณสมบัติทั่วไปของฟอนต์ทุกประเภท: ชื่อฟอนต์, สไตล์, รูปแบบ, และเนื้อหาแบบไบต์
ตระกูลฟอร์แมตเฉพาะ เช่น WordProcessing, Spreadsheet, Presentation และ PDF มีการ implement อินเทอร์เฟซ IFontInfo ที่เป็นแบบเฉพาะเจาะจง ซึ่งให้ข้อมูลเพิ่มเติมที่สัมพันธ์กับฟอร์แมตนั้น ๆ ตัวอย่างเช่น ชนิด WordProcessingFontInfo, PresentationFontInfo และ PdfFontInfo มีคุณสมบัติแบบบูลีน IsEmbedded — เป็นแฟล็กที่บ่งบอกว่าฟอนต์นี้ถูกเก็บไว้ที่ไหน (ฝังอยู่ในเนื้อหาเอกสารที่โหลดหรือถูกติดตั้งใน OS) ชนิด SpreadsheetFontInfo มีข้อมูลฟอนต์เฉพาะของ Spreadsheet เช่น สี, การขีดเส้นใต้หรือการขีดฆ่า WordProcessingFontInfo อาจมีชื่อฟอนต์ทางเลือก ฯลฯ
ตัวอย่างสั้น ๆ มีดังนี้:
using GroupDocs.Viewer;
// ...
const string filename = "sample.docx";
string inputPath = "\full\path\" + filename;
using (Viewer viewer = new Viewer(inputPath))
{
Fonts.IFontInfo[] allFonts = viewer.GetAllFonts();
Console.WriteLine("{0} fonts found in the '{1}' document", allFonts.Length, filename);
foreach (Fonts.IFontInfo font in allFonts)
{
Console.WriteLine("Font '{0}' of '{1}' style has {2} bytes and is of '{3}' format",
font.FamilyName,
font.Style,
font.Content.Length,
font.Format);
}
}
โปรดทราบว่าการสกัดฟอนต์สนับสนุนเฉพาะตระกูลฟอร์แมต WordProcessing, Spreadsheet, Presentation และ PDF เท่านั้น สำหรับฟอร์แมตเอกสารอื่น ๆ เมธอด GetAllFonts() จะคืนค่าอาเรย์ว่าง
การจัดการฟอนต์ที่หายไป
สถานการณ์ที่เอกสารถูกสร้างบน เครื่องของผู้เขียน และใช้ฟอนต์ “AAA” แล้วนำไปประมวลผลด้วย GroupDocs.Viewer บน เครื่องของลูกค้า ที่ไม่มีฟอนต์ “AAA” ถือเป็นกรณีทั่วไป ในกรณีนี้ GroupDocs.Viewer จะพยายาม ทดแทนฟอนต์นี้ ด้วยกฎการทดแทนฟอนต์ที่ซับซ้อน: ทำการวิเคราะห์เมตาดาต้าของเอกสาร, ชื่อทางเลือกของฟอนต์ที่หายไป, การตั้งค่าของเอกสาร, การตั้งค่าของ OS, รายชื่อฟอนต์ที่มีใน OS ฯลฯ สุดท้าย หาก OS “สะอาด” ไม่มีฟอนต์ติดตั้งใด ๆ เลย GroupDocs.Viewer จะทดแทนฟอนต์ที่หายไปด้วยฟอนต์ที่ฝังอยู่ใน Assembly ของ GroupDocs.Viewer (DLL) ฟอนต์นี้ทำหน้าที่เป็น “ทางเลือกสุดท้าย” หากไม่มีฟอนต์อื่น ๆ ที่สามารถใช้ได้ ตัวอย่างเช่นสำหรับฟอร์แมตตระกูล WordProcessing GroupDocs.Viewer จะเก็บฟอนต์ฟรี “Fanwood” ไว้ภายใน
ในขณะนี้ GroupDocs.Viewer ทำการ ทดแทนฟอนต์ อย่าง เงียบ ๆ ระหว่างการเรนเดอร์เอกสาร (เมื่อเรียกเมธอด Viewer.View()) — จะไม่มีข้อความหรืออีเวนต์ใดแจ้งว่าเมคานิซึมการทดแทนฟอนต์ถูกเปิดใช้งาน ฟอนต์ใดหายไปและฟอนต์ใดถูกแทนที่ สำหรับเอกสารใดโดยเฉพาะ ฟีเจอร์นี้ยากต่อการนำไปใช้เนื่องจากไม่ชัดเจนว่าควรส่งการแจ้งเตือนแบบใดในรูปแบบใดและวิธีการใช้บนฝั่งลูกค้าอย่างไร
อย่างไรก็ตาม GroupDocs.Viewer มีวิธีให้ผู้ใช้แก้ไขสถานการณ์นี้ได้สองวิธี: ระบุ ฟอนต์ที่หายไปด้วยตนเองและ ทดแทน ฟอนต์ที่หายไปด้วยตนเอง
การระบุฟอนต์ที่หายไป
เมื่อผู้ใช้ ทราบ ว่าเอกสารบางไฟล์ใช้ฟอนต์ “AAA” และ ทราบ ว่าไม่มีฟอนต์ “AAA” ติดตั้งบนเครื่องเป้าหมายที่ต้องการเรนเดอร์เอกสาร และผู้ใช้มีเนื้อหาไบต์ของฟอนต์ “AAA” อยู่แล้ว ผู้ใช้สามารถระบุฟอนต์นี้ ก่อน เรียกเมธอด Viewer.View()
เพื่อระบุฟอนต์แบบกำหนดเองหลายตัวที่ไม่ได้ติดตั้งในระบบปฏิบัติการเป้าหมาย ผู้ใช้ต้อง เพิ่มแหล่งฟอนต์แบบกำหนดเอง แหล่งฟอนต์จริง ๆ แล้วคือโฟลเดอร์ที่เก็บฟอนต์หนึ่งหรือหลายตัว ซึ่งแทนโดยคลาส FolderFontSource ส่วนคลาส FontSettings มีเมธอด SetFontSources() สำหรับเพิ่ม แหล่งฟอนต์ เข้าไปใน GroupDocs.Viewer
โค้ดตัวอย่างด้านล่างแสดงวิธีทำ สมมติว่าเอกสาร “sample.docx” ใช้ฟอนต์หายาก “AAA.ttf” ที่ไม่ได้ติดตั้งบนระบบเป้าหมาย ผู้ใช้จึงวางไฟล์ “AAA.ttf” ใส่โฟลเดอร์ "C:\custom_fonts" แล้วสร้างออบเจ็กต์ของคลาส FolderFontSource ชี้ไปที่โฟลเดอร์นี้ จากนั้นส่งออบเจ็กต์นี้ไปยังคลาสสเตติก FontSettings แล้วทำการเรนเดอร์ไฟล์ “sample.docx” เป็น HTML ซึ่งผลลัพธ์ HTML จะใช้ฟอนต์ “AAA”
using GroupDocs.Viewer;
using GroupDocs.Viewer.Options;
using GroupDocs.Viewer.Fonts;
// ...
// ระบุแหล่งฟอนต์
FolderFontSource fontSource =
new FolderFontSource(@"C:\custom_fonts", SearchOption.TopFolderOnly);
FontSettings.SetFontSources(fontSource);
using (Viewer viewer = new Viewer("sample.docx"))
{
// สร้างไฟล์ HTML
HtmlViewOptions viewOptions = HtmlViewOptions.ForEmbeddedResources();
viewer.View(viewOptions);
}
การแทนที่ฟอนต์ที่หายไป
เมื่อผู้ใช้ ทราบ ว่าเอกสารบางไฟล์ใช้ฟอนต์ “AAA” และ ทราบ ว่าไม่มีฟอนต์ “AAA” ติดตั้งบนเครื่องเป้าหมายที่ต้องการเรนเดอร์เอกสาร แต่ไม่มีสิทธิ์เข้าถึงเนื้อหาไบต์ของฟอนต์ “AAA” ผู้ใช้สามารถระบฟอนต์อื่น “BBB” ที่จะใช้ แทนที่ ฟอนต์ “AAA” ที่หายไป วิธีนี้ทำผ่านตัวเลือกการดู (view options) ซึ่งจะถูกส่งต่อให้เมธอด Viewer.View()
ตัวเลือกนี้เรียกว่า [DefaultFontName] (ดูที่ BaseViewOptions.DefaultFontName) เป็นพร็อพเพอร์ตี้ประเภทสตริงที่ประกาศในคลาสเชิงนามธรรม BaseViewOptions ทำให้ใช้ได้กับตัวเลือกการเรนเดอร์ทั้งหมด ได้แก่ HtmlViewOptions, PdfViewOptions, PngViewOptions, และ JpgViewOptions
เมื่อกำหนดตัวเลือกนี้ GroupDocs.Viewer จะใช้ฟอนต์ที่ระบุระหว่างการเรนเดอร์แทนฟอนต์ที่ไม่มีอยู่ ตัวอย่างเช่น หากเอกสารมีฟอนต์ที่ประกอบด้วยอักขระไม่ใช่ภาษาอังกฤษ ให้ระบุชื่อฟอนต์เริ่มต้นเพื่อให้แน่ใจว่า GroupDocs.Viewer จะแทนที่ฟอนต์ที่หายไปด้วยฟอนต์ที่มีชุดอักขระเดียวกัน แน่นอนว่าฟอนต์ที่ระบุในพร็อพเพอร์ตี้ [DefaultFontName] ต้องติดตั้งอยู่บนระบบปฏิบัติการที่ GroupDocs.Viewer รันเอกสาร
โค้ดตัวอย่างแสดงวิธีตั้งชื่อฟอนต์เริ่มต้น:
using GroupDocs.Viewer;
using GroupDocs.Viewer.Options;
// ...
using (Viewer viewer = new Viewer("sample.pptx"))
{
// สร้างตัวเลือกการเรนเดอร์ HTML พร้อมทรัพยากรฝังในตัว
HtmlViewOptions viewOptions = HtmlViewOptions.ForEmbeddedResources();
// ระบุชื่อฟอนต์เริ่มต้นในตัวเลือก
viewOptions.DefaultFontName = "Courier New";
// เรนเดอร์ PPTX เป็น HTML
viewer.View(viewOptions);
}
การยกเว้นฟอนต์สำหรับ HTML
เมื่อเรนเดอร์เอกสารเป็น HTML GroupDocs.Viewer จะส่งออกฟอนต์ที่ใช้ทั้งหมดไปยังเอกสาร HTML โดยค่าเริ่มต้น สิ่งนี้ทำให้แสดงผลได้อย่างถูกต้องโดยไม่คำนึงว่าฟอนต์ที่ต้องการมีอยู่บนอุปกรณ์ผู้ชมหรือไม่ ฟอนต์สามารถจัดเก็บในเอกสาร HTML ผลลัพธ์เป็นทรัพยากรภายนอก (HtmlViewOptions.ForExternalResources) หรือฝังโดยตรงในมาร์คอัป HTML ผ่าน data URI scheme ด้วยการเข้ารหัส base64 (HtmlViewOptions.ForEmbeddedResources) การส่งออกฟอนต์เป็น HTML รองรับโดยเกือบทุกรูปแบบเอกสารที่รองรับฟอนต์เอง ได้แก่ Microsoft Office (ยกเว้น Excel), OpenDocument, อีเมล, PDF, eBooks เป็นต้น
อย่างไรก็ตามบางครั้งฟีเจอร์นี้ไม่ต้องการใช้งาน เมื่อฟอนต์ถูกฝังลงไป ขนาดของไฟล์ HTML ที่สร้างขึ้นจะเพิ่มขึ้นอย่างมาก หากเครื่องหรืออุปกรณ์เป้าหมายที่จะแสดง HTML มีฟอนต์ที่ใช้ทั้งหมดติดตั้งอยู่แล้ว เบราว์เซอร์สามารถใช้ฟอนต์ในระบบได้โดยตรง
เพื่อรองรับความต้องการนี้ GroupDocs.Viewer มีความสามารถ ยกเว้นฟอนต์ จาก HTML ที่สร้างขึ้น ซึ่งทำได้สองวิธี: ยกเว้นฟอนต์ทั้งหมด และ ยกเว้นฟอนต์เฉพาะบางตัว
ตัวเลือกเหล่านี้อยู่ในคลาส HtmlViewOptions เป็นพร็อพเพอร์ตี้ที่ต่างกัน:
ExcludeFontsเป็นแฟล็กที่ปิดการส่งออกฟอนต์ทั้งหมดเมื่อเปิด (true) โดยค่าเริ่มต้นเป็นfalseFontsToExcludeเป็นรายการสตริงที่แต่ละค่าแทนชื่อฟอนต์ที่จะยกเว้นจาก HTML ค่าเริ่มต้นคือรายการว่าง — ไม่มีฟอนต์ใดถูกยกเว้น โปรดทราบว่าตัวเลือกนี้ทำงานได้เฉพาะเมื่อExcludeFontsปิดอยู่ (false)
โค้ดตัวอย่างสองชุดด้านล่างแสดงวิธีใช้ทั้งสองแบบ: ตัวแรกใช้ ExcludeFonts ส่วนที่สองใช้ FontsToExclude
using GroupDocs.Viewer;
using GroupDocs.Viewer.Options;
// ...
using (Viewer viewer = new Viewer("sample.docx"))
{
// สร้างไฟล์ HTML
var viewOptions = HtmlViewOptions.ForEmbeddedResources();
viewOptions.ExcludeFonts = true;
viewer.View(viewOptions);
}
using GroupDocs.Viewer;
using GroupDocs.Viewer.Options;
// ...
using (Viewer viewer = new Viewer("presentation.pptx"))
{
// สร้างไฟล์ HTML
var viewOptions = HtmlViewOptions.ForEmbeddedResources();
viewOptions.FontsToExclude.Add("Times New Roman"); // ยกเว้นฟอนต์ Times New Roman
viewOptions.FontsToExclude.Add("Arial"); // ยกเว้นฟอนต์ Arial
viewer.View(viewOptions);
}
สรุป
GroupDocs.Viewer มุ่งเน้นหลักในการเรนเดอร์เอกสารหลายรูปแบบไปยังฟอร์แมต “ที่สามารถดูได้” อย่างกว้างขวาง ได้แก่ HTML, PDF, JPEG, และ PNG อย่างไรก็ตามในช่วงเวลาที่ผ่านมาเราได้เพิ่มฟีเจอร์ที่เป็นประโยชน์เกี่ยวกับการประมวลผลฟอนต์ ซึ่งช่วยให้ผู้ใช้สามารถตรวจสอบฟอนต์ที่ใช้ ปรับการส่งออกฟอนต์ และจัดการการทดแทนฟอนต์ได้อย่างละเอียด
ดูเพิ่มเติม
- การดึงฟอนต์ที่ใช้ทั้งหมดจากเอกสารที่โหลดแล้ว
- ตั้งค่าฟอนต์กำหนดเอง
- แทนที่ฟอนต์ที่หายไป
- ยกเว้นฟอนต์เมื่อเรนเดอร์เป็น HTML
รับการทดลองใช้ฟรี
คุณสามารถดาวน์โหลดรุ่นทดลองใช้งานฟรีของ GroupDocs.Viewer สำหรับ .NET จาก releases.groupdocs.com นอกจากนี้ยังสามารถขอรับไลเซนส์ชั่วคราวเพื่อทดลองใช้ทุกฟีเจอร์และความสามารถโดยไม่มีข้อจำกัดได้จาก ที่นี่