Tổng quan
Nhiều định dạng tài liệu bị ràng buộc chặt chẽ với phông chữ. Ví dụ, khi người dùng thêm một đoạn văn bản vào tài liệu DOCX, đoạn văn bản này luôn có một phông chữ được xác định. Một số định dạng tài liệu thường lưu trữ dữ liệu phông chữ nhúng trong chính file tài liệu, như PDF. Nhưng những định dạng khác, như các định dạng trong họ Office, thường dựa vào các phông chữ được cài đặt trên hệ điều hành.
Cũng có rất nhiều định dạng phông chữ. Ví dụ, hầu hết các phông chữ được cài đặt đều có định dạng TTF (TrueType) và OTF (OpenType). Các tài liệu Office Open XML cũng làm việc với định dạng EOT (Embedded OpenType). Trên web, however, WOFF và WOFF2 là các định dạng được sử dụng nhiều nhất.
Mục lục
- Tổng quan
- Lấy tất cả phông chữ đã dùng
- Xử lý các phông chữ bị thiếu
- Xác định phông chữ bị thiếu
- Thay thế phông chữ bị thiếu
- Loại bỏ phông chữ khi xuất HTML
- Kết luận
- Xem thêm
- Nhận bản dùng thử miễn phí
Lấy tất cả phông chữ đã dùng
Tính năng hữu ích nhất trong ngữ cảnh phông chữ là liệt kê và trả về chúng. GroupDocs.Viewer cung cấp một phương thức đặc biệt GetAllFonts() — khi tài liệu được tải vào một thể hiện của lớp Viewer, gọi phương thức này để lấy danh sách tất cả các phông chữ được sử dụng trong tài liệu. Trong danh sách trả về, mỗi phông chữ sẽ được biểu diễn dưới dạng một thể hiện của kiểu thực thi giao diện IFontInfo. Giao diện này chứa các thuộc tính chung cho mọi phông chữ có thể: tên họ, kiểu, định dạng và nội dung nhị phân.
Các họ định dạng cụ thể, như WordProcessing, Spreadsheet, Presentation và PDF, có các triển khai chuyên biệt của IFontInfo; các triển khai này cung cấp thêm dữ liệu riêng cho từng họ định dạng. Ví dụ, các kiểu WordProcessingFontInfo, PresentationFontInfo và PdfFontInfo có thuộc tính boolean IsEmbedded — một cờ chỉ ra phông chữ này được lưu trữ ở đâu (có được nhúng trong nội dung tài liệu đã tải hay được cài đặt trên hệ điều hành). Kiểu SpreadsheetFontInfo chứa rất nhiều dữ liệu phông chữ đặc thù của Spreadsheet: màu, có gạch chân hay gạch ngang hay không. WordProcessingFontInfo có thể chứa tên họ thay thế. Và cứ như vậy.
Ví dụ ngắn gọn dưới đây:
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);
}
}
Lưu ý rằng việc trích xuất phông chữ chỉ được hỗ trợ cho các họ định dạng WordProcessing, Spreadsheet, Presentation và PDF; đối với các định dạng tài liệu khác, phương thức GetAllFonts() sẽ trả về một mảng rỗng.
Xử lý các phông chữ bị thiếu
Tình huống khi một tài liệu được tạo trên máy của tác giả và sử dụng một phông chữ “AAA”, sau đó được xử lý bằng GroupDocs.Viewer trên máy của khách hàng mà không có phông chữ “AAA”, là một trường hợp điển hình. Trong trường hợp này GroupDocs.Viewer sẽ thay thế phông chữ này dựa trên một loạt quy tắc thay thế phông chữ phức tạp: nó phân tích siêu dữ liệu của tài liệu, các tên thay thế của phông chữ thiếu, cài đặt của tài liệu, cài đặt của hệ điều hành, danh sách tất cả các phông chữ khả dụng đã cài trên OS, v.v. Cuối cùng, nếu vì một lý do nào đó OS “sạch” – không có phông chữ nào được cài đặt – GroupDocs.Viewer sẽ thay thế phông chữ thiếu bằng phông chữ được nhúng trong assembly GroupDocs.Viewer (DLL); phông chữ này sẽ hoạt động như “phương án cuối cùng” khi không còn phông chữ nào khác. Ví dụ, đối với các định dạng họ WordProcessing, GroupDocs.Viewer nội bộ lưu trữ phông chữ miễn phí “Fanwood”.
Hiện tại GroupDocs.Viewer thực hiện hoạt động thay thế phông chữ một cách im lặng trong quá trình render tài liệu (khi phương thức Viewer.View() được gọi) — không có thông báo hay sự kiện nào khi cơ chế thay thế phông chữ được kích hoạt, không cho biết phông chữ nào bị thiếu và phông chữ nào được thay thế, cũng như tài liệu cụ thể nào. Tính năng này khó thực hiện vì không rõ ràng, mơ hồ và không chắc chắn loại thông báo nào nên được phát ra, ở dạng nào và cách khách hàng sử dụng chúng.
Tuy nhiên, GroupDocs.Viewer cung cấp cho người dùng hai cách khả thi để giải quyết tình huống này: xác định phông chữ bị thiếu một cách thủ công và thay thế phông chữ bị thiếu một cách thủ công.
Xác định phông chữ bị thiếu
Khi người dùng biết trước rằng một tài liệu sử dụng phông chữ “AAA”, và cũng biết rằng phông chữ “AAA” không được cài trên máy đích nơi tài liệu sẽ được render, và người dùng có nội dung nhị phân của phông chữ “AAA”, họ có thể chỉ định phông chữ này trước khi gọi phương thức Viewer.View().
Để chỉ định một hoặc nhiều phông chữ tùy chỉnh không được cài trên hệ điều hành đích, người dùng cần thêm nguồn phông chữ. Nguồn phông chữ thực chất là một thư mục chứa một hoặc nhiều phông chữ. Nó được biểu diễn bằng lớp FolderFontSource. Lớp FontSettings có phương thức SetFontSources() để thêm các nguồn phông chữ vào GroupDocs.Viewer.
Đoạn mã dưới đây minh họa cách thực hiện. Giả sử tài liệu “sample.docx” sử dụng một phông chữ hiếm “AAA.ttf” chưa được cài trên hệ điều hành đích. Người dùng đặt file “AAA.ttf” vào thư mục "C:\custom_fonts" và tạo một thể hiện của lớp FolderFontSource trỏ tới thư mục này. Thể hiện này sau đó được truyền cho lớp tĩnh FontSettings, và cuối cùng file “sample.docx” được render ra định dạng HTML. Kết quả, phông chữ “AAA” sẽ được dùng trong tài liệu HTML đầu ra.
using GroupDocs.Viewer;
using GroupDocs.Viewer.Options;
using GroupDocs.Viewer.Fonts;
// ...
// Specify the font source.
FolderFontSource fontSource =
new FolderFontSource(@"C:\custom_fonts", SearchOption.TopFolderOnly);
FontSettings.SetFontSources(fontSource);
using (Viewer viewer = new Viewer("sample.docx"))
{
// Create an HTML file.
HtmlViewOptions viewOptions = HtmlViewOptions.ForEmbeddedResources();
viewer.View(viewOptions);
}
Thay thế phông chữ bị thiếu
Khi người dùng biết rằng tài liệu sử dụng phông chữ “AAA”, đồng thời biết rằng phông chữ này không được cài trên máy đích, nhưng không có quyền truy cập vào nội dung nhị phân của phông chữ “AAA”, họ có thể chỉ định một phông chữ khác “BBB” sẽ được dùng thay cho “AAA”. Khác với trường hợp trên, việc này nên được thực hiện thông qua các tùy chọn view, sau đó được truyền cho phương thức Viewer.View().
Tùy chọn này gọi là “DefaultFontName”, là một thuộc tính kiểu chuỗi, khai báo trong lớp trừu tượng BaseViewOptions, do đó nó chung cho mọi tùy chọn render: HtmlViewerOptions, PdfViewOptions, PngViewOptions, và JpgViewOptions.
Khi tùy chọn này được chỉ định, GroupDocs.Viewer sẽ dùng phông chữ này trong quá trình render thay cho bất kỳ phông chữ nào không khả dụng. Ví dụ, nếu tài liệu chứa phông chữ có ký tự không phải tiếng Anh, hãy chỉ định tên phông chữ mặc định để đảm bảo GroupDocs.Viewer thay thế mọi phông chữ thiếu bằng một phông chữ có bộ ký tự tương tự. Tất nhiên, phông chữ được chỉ định trong thuộc tính DefaultFontName phải được cài trên hệ điều hành nơi GroupDocs.Viewer thực hiện render.
Đoạn mã dưới đây cho thấy cách thiết lập tên phông chữ mặc định:
using GroupDocs.Viewer;
using GroupDocs.Viewer.Options;
// ...
using (Viewer viewer = new Viewer("sample.pptx"))
{
// Create options for rendering HTML document with embedded resources
HtmlViewOptions viewOptions = HtmlViewOptions.ForEmbeddedResources();
// Specify a default font name is the options
viewOptions.DefaultFontName = "Courier New";
// Render input PPTX to output HTML
viewer.View(viewOptions);
}
Loại bỏ phông chữ khi xuất HTML
Khi render tài liệu sang định dạng HTML, GroupDocs.Viewer mặc định sẽ xuất tất cả các phông chữ đã dùng vào tài liệu HTML. Điều này đảm bảo hiển thị đúng dù thiết bị xem có hay không có các phông chữ cần thiết. Các phông chữ có thể được lưu trữ trong tài liệu HTML kết quả dưới dạng tài nguyên ngoại vi (HtmlViewOptions.ForExternalResources) hoặc được nhúng trực tiếp vào markup HTML bằng cách sử dụng scheme URI dữ liệu thông qua mã hoá base64 (HtmlViewOptions.ForEmbeddedResources). Việc xuất phông chữ sang HTML được hỗ trợ bởi hầu hết các định dạng tài liệu có khả năng chứa phông chữ: Microsoft Office (trừ Excel), các định dạng OpenDocument, email, PDF, eBooks, v.v.
Tuy nhiên, đôi khi tính năng này không mong muốn. Thực tế, khi phông chữ được nhúng, chúng làm tăng đáng kể kích thước của file HTML đầu ra. Vì vậy, khi máy hoặc thiết bị đích – nơi HTML sẽ được hiển thị – đã cài sẵn tất cả các phông chữ được sử dụng, trình duyệt có thể dùng những phông chữ hệ thống này.
Để đáp ứng nhu cầu này, GroupDocs.Viewer cung cấp khả năng loại bỏ phông chữ khỏi tài liệu HTML được tạo, và có thể làm điều này theo hai cách: loại bỏ tất cả phông chữ và chỉ loại bỏ các phông chữ cụ thể.
Cả hai tùy chọn này được biểu diễn trong lớp HtmlViewOptions dưới dạng các thuộc tính khác nhau:
ExcludeFontslà một cờ tắt việc xuất toàn bộ phông chữ đã dùng vào tài liệu HTML khi được bật (true). Mặc định tùy chọn này bị tắt (false).FontsToExcludelà một danh sách các chuỗi, mỗi chuỗi đại diện cho một tên phông chữ sẽ bị loại bỏ khỏi tài liệu HTML. Mặc định danh sách này rỗng – không có phông chữ nào bị loại bỏ. Lưu ý rằng tùy chọn này chỉ hoạt động khi thuộc tínhExcludeFontsbị tắt (false).
Hai đoạn mã dưới đây minh họa cả hai khả năng: đoạn đầu dùng ExcludeFonts, đoạn thứ hai dùng FontsToExclude.
using GroupDocs.Viewer;
using GroupDocs.Viewer.Options;
// ...
using (Viewer viewer = new Viewer("sample.docx"))
{
// Create an HTML file.
var viewOptions = HtmlViewOptions.ForEmbeddedResources();
viewOptions.ExcludeFonts = true;
viewer.View(viewOptions);
}
using GroupDocs.Viewer;
using GroupDocs.Viewer.Options;
// ...
using (Viewer viewer = new Viewer("presentation.pptx"))
{
// Create an HTML file.
var viewOptions = HtmlViewOptions.ForEmbeddedResources();
viewOptions.FontsToExclude.Add("Times New Roman");// Loại bỏ phông chữ Times New Roman.
viewOptions.FontsToExclude.Add("Arial");// Loại bỏ phông chữ Arial.
viewer.View(viewOptions);
}
Kết luận
GroupDocs.Viewer chủ yếu tập trung vào việc render các tài liệu ở các định dạng khác nhau thành những định dạng “có thể xem” phổ biến — HTML, PDF, JPEG và PNG. Tuy nhiên, trong thời gian gần đây chúng tôi đã bổ sung một số tính năng hữu ích liên quan đến xử lý phông chữ, cho phép xem và kiểm tra các phông chữ đã dùng, điều chỉnh việc xuất chúng và tùy chỉnh cơ chế thay thế phông chữ.
Xem thêm
- Lấy tất cả phông chữ đã dùng trong tài liệu đã tải
- Đặt phông chữ tùy chỉnh
- Thay thế phông chữ bị thiếu
- Loại bỏ phông chữ khi render sang HTML
Nhận bản dùng thử miễn phí
Bạn có thể tải phiên bản dùng thử miễn phí của GroupDocs.Viewer cho .NET từ releases.groupdocs.com. Bạn cũng có thể mua giấy phép tạm thời để thử mọi tính năng và chức năng mà không có giới hạn từ đây.