Przegląd
Wiele formatów dokumentów jest ściśle powiązanych z czcionkami. Na przykład, gdy użytkownik dodaje tekst do dokumentu DOCX, ten tekst zawsze ma określoną czcionkę. Niektóre formaty dokumentów zazwyczaj przechowują dane czcionki wbudowane w sam plik dokumentu, jak PDF. Inne, np. formaty rodziny Office, zazwyczaj polegają na czcionkach zainstalowanych w systemie operacyjnym.
Istnieje również wiele formatów czcionek. Na przykład większość zainstalowanych czcionek dostępna jest w formatach TTF (TrueType) i OTF (OpenType). Dokumenty Office Open XML współpracują także z formatem EOT (Embedded OpenType). W sieci najczęściej używanymi formatami są natomiast WOFF i WOFF2.
Spis treści
- Przegląd
- Pobieranie wszystkich używanych czcionek
- Przetwarzanie brakujących czcionek
- Określanie brakującej czcionki
- Zastępowanie brakującej czcionki
- Wykluczanie czcionek w HTML
- Podsumowanie
- Zobacz też
- Uzyskaj darmową wersję próbną
Pobieranie wszystkich używanych czcionek
Najbardziej przydatną funkcją w kontekście czcionek jest ich lista i zwrócenie. GroupDocs.Viewer udostępnia specjalną metodę GetAllFonts() — po załadowaniu dokumentu do instancji klasy Viewer należy wywołać tę metodę, aby uzyskać listę wszystkich czcionek użytych w dokumencie. W zwróconej liście każda czcionka jest przedstawiona jako obiekt implementujący interfejs IFontInfo. Interfejs ten zawiera wspólne właściwości dla każdej możliwej czcionki: nazwę rodziny, styl, format oraz zawartość binarną.
Specyficzne rodziny formatów, takie jak WordProcessing, Spreadsheet, Presentation i PDF, posiadają specjalistyczne implementacje interfejsu IFontInfo; te implementacje dostarczają dodatkowych danych charakterystycznych dla konkretnej rodziny formatów. Na przykład typy WordProcessingFontInfo, PresentationFontInfo i PdfFontInfo zawierają właściwość logiczną IsEmbedded — flagę wskazującą, czy czcionka jest wbudowana w ciało wczytanego dokumentu, czy jest zainstalowana w systemie operacyjnym. Typ SpreadsheetFontInfo zawiera wiele danych specyficznych dla arkuszy: kolor, czy czcionka jest podkreślona lub przekreślona. WordProcessingFontInfo może zawierać alternatywną nazwę rodziny. I tak dalej.
Krótki przykład:
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);
}
}
Należy pamiętać, że wyodrębnianie czcionek jest obsługiwane jedynie dla rodzin formatów WordProcessing, Spreadsheet, Presentation i PDF; dla wszystkich innych formatów metoda GetAllFonts() zwraca pustą tablicę.
Przetwarzanie brakujących czcionek
Sytuacja, w której dokument został utworzony na maszynie autora i używa czcionki „AAA”, a następnie jest przetwarzany przy użyciu GroupDocs.Viewer na maszynie klienta, gdzie czcionka „AAA” jest nieobecna, jest typowa. W takim wypadku GroupDocs.Viewer próbuje zastąpić tę czcionkę stosując złożone reguły podstawiania czcionek: analizuje metadane dokumentu, alternatywne nazwy brakującej czcionki, ustawienia dokumentu, ustawienia systemu operacyjnego, listę wszystkich dostępnych czcionek zainstalowanych w systemie itd. W końcu, jeśli z jakiegoś powodu system operacyjny jest „czysty”, czyli nie posiada żadnych zainstalowanych czcionek, GroupDocs.Viewer zastąpi brakującą czcionkę tą, która jest wbudowana w zestaw DLL GroupDocs.Viewer; czcionka ta służy jako ostatnia szansa w sytuacji, gdy nie ma dostępnych innych czcionek. Na przykład dla rodziny formatów WordProcessing, GroupDocs.Viewer wewnętrznie przechowuje darmową czcionkę „Fanwood”.
Obecnie GroupDocs.Viewer wykonuje operację podstawiania czcionek „cicho” podczas renderowania dokumentu (gdy wywoływana jest metoda Viewer.View()) — nie są generowane żadne komunikaty ani zdarzenia informujące, która czcionka jest brakująca i na jaką została zastąpiona, ani dla którego konkretnego dokumentu. Taka funkcjonalność jest trudna do wdrożenia, ponieważ niejasne jest, jakie powiadomienie powinno być emitowane, w jakiej formie i jak użytkownik ma je wykorzystać po stronie klienta.
GroupDocs.Viewer oferuje jednak dwa sposoby rozwiązania tej sytuacji: ręczne określenie brakującej czcionki oraz ręczne zastąpienie brakującej czcionki.
Określanie brakującej czcionki
Gdy użytkownik początkowo wie, że dokument używa czcionki „AAA”, wie, że czcionka „AAA” nie jest zainstalowana na docelowej maszynie i posiada binarną zawartość tej czcionki, może podać ją przed wywołaniem metody Viewer.View().
Aby podać jedną lub wiele własnych czcionek, które nie są zainstalowane w systemie docelowym, użytkownik powinien dodać źródła czcionek. Źródło czcionki to właściwie folder, w którym znajdują się jedne lub wiele czcionek. Jest reprezentowane przez klasę FolderFontSource. Klasa FontSettings posiada metodę SetFontSources() umożliwiającą dodanie źródeł czcionek do GroupDocs.Viewer.
Poniższy fragment kodu demonstruje to podejście. Załóżmy, że dokument „sample.docx” używa rzadkiej czcionki „AAA.ttf”, której nie ma w systemie docelowym. Użytkownik umieszcza plik „AAA.ttf” w folderze C:\custom_fonts, tworzy instancję klasy FolderFontSource wskazującą ten folder, a następnie przekazuje ją do klasy statycznej FontSettings. Po tym „sample.docx” zostaje wyrenderowany do formatu HTML, a czcionka „AAA” zostaje użyta w wynikowym dokumencie HTML.
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);
}
Zastępowanie brakującej czcionki
Gdy użytkownik początkowo wie, że dokument używa czcionki „AAA”, wie, że czcionka „AAA” nie jest zainstalowana na docelowej maszynie, ale nie ma dostępu do binarnej zawartości tej czcionki, może określić inną czcionkę „BBB”, która zostanie użyta zamiast brakującej „AAA”. W przeciwieństwie do poprzedniego przypadku, odbywa się to poprzez opcje renderowania, które następnie są przekazywane do metody Viewer.View().
Ta opcja nazywa się [DefaultFontName] i jest właściwością typu string, zadeklarowaną w abstrakcyjnej klasie BaseViewOptions, dlatego jest wspólna dla wszystkich opcji renderowania: HtmlViewerOptions, PdfViewOptions, PngViewOptions, oraz JpgViewOptions.
Kiedy ta opcja zostanie ustawiona, GroupDocs.Viewer użyje podanej czcionki podczas renderowania zamiast jakichkolwiek niedostępnych czcionek. Na przykład, jeśli dokument zawiera czcionkę z znakami nieangielskimi, określenie domyślnej nazwy czcionki zapewni, że GroupDocs.Viewer zastąpi brakującą czcionkę tą, która posiada ten sam zestaw znaków. Oczywiście czcionka podana w właściwości [DefaultFontName] musi być zainstalowana w systemie operacyjnym, na którym GroupDocs.Viewer renderuje dokument.
Poniżej przykład ustawienia domyślnej nazwy czcionki:
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);
}
Wykluczanie czcionek w HTML
Podczas renderowania dokumentów do formatu HTML GroupDocs.Viewer domyślnie eksportuje wszystkie użyte czcionki do dokumentu HTML. Dzięki temu zapewniona jest poprawna prezentacja niezależnie od tego, czy wymagane czcionki są dostępne na urządzeniu przeglądającym. Czcionki mogą być przechowywane w rezultującym dokumencie HTML jako zasoby zewnętrzne (HtmlViewOptions.ForExternalResources) lub wstawiane bezpośrednio do kodu HTML przy użyciu schematu data URI (HtmlViewOptions.ForEmbeddedResources). Eksport czcionek do HTML jest obsługiwany praktycznie przez wszystkie formaty dokumentów, które same obsługują czcionki: Microsoft Office (z wyjątkiem Excela), formaty OpenDocument, e‑mail, PDF, e‑booki i tak dalej.
Czasami jednak ta funkcjonalność jest niepożądana. Gdy czcionki są włączone, znacznie zwiększają rozmiar wygenerowanego dokumentu HTML. Dlatego, jeśli docelowe urządzenie, na którym HTML ma być wyświetlany, ma już wszystkie potrzebne czcionki zainstalowane, przeglądarka może skorzystać z tych systemowych czcionek.
Aby sprostać takim potrzebom, GroupDocs.Viewer umożliwia wykluczanie czcionek z wygenerowanego dokumentu HTML. Można to zrobić na dwa sposoby: wykluczyć wszystkie czcionki lub wykluczyć tylko wybrane czcionki.
Obie opcje są dostępne w klasie HtmlViewOptions jako różne właściwości:
ExcludeFonts– flaga wyłączająca eksport wszystkich użytych czcionek do wynikowego dokumentu HTML, gdy ustawiona natrue. Domyślnie opcja jest wyłączona (false).FontsToExclude– lista ciągów znaków, z których każdy reprezentuje nazwę czcionki, którą należy wykluczyć z wygenerowanego dokumentu HTML. Domyślnie lista jest pusta – żadna czcionka nie jest wykluczona. Uwaga: ta opcja działa wyłącznie wtedy, gdy właściwośćExcludeFontsjest ustawiona nafalse.
Dwa fragmenty kodu poniżej pokazują oba scenariusze: pierwszy wykorzystuje ExcludeFonts, drugi – 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"); // Wyklucz czcionkę Times New Roman.
viewOptions.FontsToExclude.Add("Arial"); // Wyklucz czcionkę Arial.
viewer.View(viewOptions);
}
Podsumowanie
GroupDocs.Viewer koncentruje się głównie na renderowaniu dokumentów różnych formatów do powszechnie używanych „widocznych” formatów – HTML, PDF, JPEG i PNG. W ostatnim czasie dodaliśmy szereg przydatnych funkcji związanych z przetwarzaniem czcionek, które umożliwiają przegląd i analizę użytych czcionek, kontrolowanie ich eksportu oraz dostosowywanie mechanizmu podstawiania czcionek.
Zobacz też
- Getting all used fonts in the loaded document
- Set custom fonts
- Replace missing font
- Exclude fonts when rendering to HTML
Uzyskaj darmową wersję próbną
Możesz pobrać darmową wersję próbną GroupDocs.Viewer dla .NET ze strony releases.groupdocs.com. Możesz również uzyskać tymczasową licencję, aby wypróbować wszystkie funkcje i możliwości bez ograniczeń, klikając tutaj.