Огляд
Багато форматів документів тісно пов’язані зі шрифтами. Наприклад, коли користувач додає якийсь текст до DOCX‑документу, цей текст завжди має певний визначений шрифт. Деякі формати документів зазвичай зберігають дані шрифту, вбудовані безпосередньо у файл документа, наприклад PDF. Але інші, як формати сімейства Office, зазвичай покладаються на шрифти, встановлені в операційній системі.
Існує також безліч форматів шрифтів. Наприклад, більшість встановлених шрифтів представлені у форматах TTF (TrueType) та OTF (OpenType). Документи Office Open XML також працюють з форматом EOT (Embedded OpenType). В інтернеті ж найчастіше використовуються формати WOFF та WOFF2.
Зміст
- Огляд
- Отримання всіх використаних шрифтів
- Обробка відсутніх шрифтів
- Вказування відсутнього шрифту
- Замінювання відсутнього шрифту
- Виключення шрифтів для HTML
- Висновок
- Дивіться також
- Отримати безкоштовну пробну версію
Отримання всіх використаних шрифтів
Найкориснішою функцією у контексті шрифтів є їх перелік і повернення. GroupDocs.Viewer надає спеціальний метод GetAllFonts() — коли документ завантажується у екземпляр класу Viewer , викликайте цей метод, щоб отримати список усіх шрифтів, використаних у документі. У повернутому списку кожен шрифт представлений як екземпляр типу, який реалізує інтерфейс IFontInfo. Цей інтерфейс містить загальні властивості для будь‑якого шрифту: назву сімейства, стиль, формат і двійковий вміст.
Конкретні сімейства форматів, такі як WordProcessing, Spreadsheet, Presentation та PDF, мають спеціалізовані реалізації IFontInfo; ці реалізації надають додаткові дані, специфічні для даного сімейства форматів. Наприклад, типи WordProcessingFontInfo, PresentationFontInfo та PdfFontInfo містять булеву властивість IsEmbedded — прапорець, що вказує, де шрифт зберігається (вбудований у тіло завантаженого документа чи встановлений в ОС). Тип SpreadsheetFontInfo містить багато даних, специфічних для електронних таблиць: його колір, чи підкреслений він, чи закреслений. 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 заміщує цей шрифт згідно складних правил підстановки: аналізується метадані документа, альтернативні назви відсутнього шрифту, налаштування документа, налаштування ОС, список усіх доступних шрифтів, встановлених в ОС, тощо. Нарешті, якщо з певних причин ОС «чиста», без жодних встановлених шрифтів, GroupDocs.Viewer підставить відсутній шрифт тим, що вбудований у збірку GroupDocs.Viewer (DLL); цей шрифт слугуватиме «останньою інстанцією» на випадок, коли інші шрифти недоступні. Наприклад, для сімейства форматів WordProcessing GroupDocs.Viewer внутрішньо зберігає безкоштовний шрифт «Fanwood».
На даний момент GroupDocs.Viewer виконує підстановку шрифтів «тихо» під час рендерингу документа (коли викликається метод Viewer.View()) — немає жодних повідомлень або подій, які б інформували про активацію механізму підстановки, який шрифт відсутній і на який він замінюється, а також про конкретний документ. Реалізувати таку функціональність важко, бо неясно, який тип сповіщень слід генерувати, у якій формі і як їх обробляти на стороні клієнта.
Проте GroupDocs.Viewer пропонує користувачам два можливих підходи до вирішення такої ситуації: вручну вказати відсутній шрифт і вручну підмінити його.
Вказування відсутнього шрифту
Якщо користувач спочатку знає, що певний документ використовує шрифт «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;
// ...
// 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);
}
Замінювання відсутнього шрифту
Якщо користувач спочатку знає, що певний документ використовує шрифт «AAA», і знає, що цей шрифт не встановлений на цільовій машині, але не має доступу до його двійкового вмісту, він може вказати інший шрифт «BBB», який буде використаний замість відсутнього «AAA». На відміну від попереднього випадку, це робиться через параметри відображення, які потім передаються у метод Viewer.View().
Цей параметр називається [DefaultFontName] і є властивістю типу string, оголошеною в абстрактному класі BaseViewOptions; тому він спільний для всіх параметрів рендерингу: HtmlViewerOptions, PdfViewOptions, PngViewOptions і JpgViewOptions.
Коли цей параметр вказано, GroupDocs.Viewer використовує зазначений шрифт під час рендерингу замість будь‑якого недоступного шрифту. Наприклад, якщо документ містить шрифт з неанглійськими символами, вкажіть ім’я шрифту за замовчуванням, щоб GroupDocs.Viewer замінив відсутній шрифт на такий, що підтримує той самий набір символів. Звісно, шрифт, ім’я якого вказано в параметрі DefaultFontName, має бути встановлений в операційній системі, на якій виконується рендеринг.
Приклад коду, який встановлює ім’я шрифту за замовчуванням:
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);
}
Виключення шрифтів для HTML
При рендерингу документів у формат HTML GroupDocs.Viewer за замовчуванням експортує всі використані шрифти у HTML‑документ. Це забезпечує коректне відображення незалежно від того, чи встановлені потрібні шрифти на пристрої користувача. Шрифти можуть зберігатися в отриманому HTML‑документі як зовнішні ресурси (HtmlViewOptions.ForExternalResources) або вбудовуватися безпосередньо в розмітку HTML за допомогою схеми data URI через base64 кодування (HtmlViewOptions.ForEmbeddedResources). Експорт шрифтів у HTML‑формат підтримується майже усіма форматами документів, які самі підтримують шрифти: Microsoft Office (крім Excel), формати OpenDocument, електронна пошта, PDF, електронні книги тощо.
Проте іноді ця функція небажана. Коли шрифти вбудовуються, розмір створеного HTML‑документа значно зростає. Якщо ж цільова машина або пристрій, на якому має відображатися HTML‑документ, вже має встановлені всі використані шрифти, браузер може скористатися цими системними шрифтами.
Для вирішення таких потреб GroupDocs.Viewer має можливість виключати шрифти з створеного HTML‑документа, і це можна зробити двома способами: виключити всі шрифти або виключити лише певні шрифти.
Обидва варіанти представлені в класі HtmlViewOptions різними властивостями:
ExcludeFonts— прапорець, який вимикає експорт усіх використаних шрифтів у створений HTML‑документ, коли встановлений (true). За замовчуванням ця опція вимкнена (false).FontsToExclude— список рядків, кожен з яких представляє назву шрифту, який треба виключити з HTML‑документа. За замовчуванням список порожній — шрифти не виключаються. Зауважте, що ця опція працює лише якщо властивістьExcludeFontsвимкнена (false).
Два приклади коду нижче демонструють обидві можливості: перший — використання ExcludeFonts, другий — 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");// Exclude the Times New Roman font.
viewOptions.FontsToExclude.Add("Arial");// Exclude the Arial font.
viewer.View(viewOptions);
}
Висновок
GroupDocs.Viewer орієнтований насамперед на рендеринг документів різних форматів у найпоширеніші «переглядані» формати — HTML, PDF, JPEG і PNG. Однак за останній час ми додали кілька корисних можливостей, пов’язаних із обробкою шрифтів, які дозволяють переглядати та аналізувати використані шрифти, налаштовувати їх експорт і керувати підстановкою шрифтів.
Дивіться також
- Отримання всіх використаних шрифтів у завантаженому документі
- Налаштування користувацьких шрифтів
- Замінювання відсутнього шрифту
- Виключення шрифтів при рендерингу в HTML
Отримати безкоштовну пробну версію
Ви можете завантажити безкоштовну пробну версію GroupDocs.Viewer для .NET з сайту releases.groupdocs.com. Також можна отримати тимчасову ліцензію, щоб випробувати всі функції без обмежень, за посиланням тут.