Übersicht

Viele Dokumentformate sind eng mit Schriftarten verknüpft. Wenn ein Benutzer beispielsweise Text zu einem DOCX‑Dokument hinzufügt, besitzt dieser Text stets eine definierte Schriftart. Einige Dokumentformate speichern die Schriftartdaten im Dokument selbst, wie PDF. Andere, wie die Office‑Familienformate, verlassen sich in der Regel auf die auf dem Betriebssystem installierten Schriftarten.

Es gibt zudem zahlreiche Schriftartformate. Die meisten installierten Schriften liegen z. B. im TTF (TrueType)‑ bzw. OTF (OpenType)‑Format vor. Office‑Open‑XML‑Dokumente arbeiten außerdem mit dem EOT (Embedded OpenType)-Format. Im Web werden dagegen am häufigsten WOFF und WOFF2 verwendet.

Inhaltsverzeichnis

Alle verwendeten Schriften ermitteln

Die nützlichste Funktion im Kontext von Schriften besteht darin, diese aufzulisten und zurückzugeben. GroupDocs.Viewer bietet eine spezielle Methode GetAllFonts() — wenn das Dokument in eine Instanz der Klasse Viewer geladen wird, rufen Sie diese Methode auf, um eine Liste aller im Dokument verwendeten Schriften zu erhalten. In der zurückgegebenen Liste wird jede Schriftart als Instanz des Typs dargestellt, der das Interface IFontInfo implementiert. Dieses Interface enthält allgemeine Eigenschaften für jede mögliche Schrift: Familienname, Stil, Format und binärer Inhalt.

Spezifische Formatefamilien wie WordProcessing, Spreadsheet, Presentation und PDF besitzen spezialisierte Implementierungen von IFontInfo; diese Implementierungen liefern zusätzliche, formatspezifische Daten. Beispielsweise enthalten die Typen WordProcessingFontInfo, PresentationFontInfo und PdfFontInfo die boolesche Eigenschaft IsEmbedded — ein Flag, das angibt, ob die Schrift im geladenen Dokumentkörper eingebettet oder im Betriebssystem installiert ist. Der Typ SpreadsheetFontInfo beinhaltet zahlreiche tabellenspezifische Schriftinformationen: Farbe, Unterstreichung, Durchstreichung usw. WordProcessingFontInfo kann zudem einen alternativen Familiennamen enthalten. Und so weiter.

Ein kurzes Beispiel:

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);
    }
}

Bitte beachten Sie, dass die Schriftart‑Extraktion nur für die Familien WordProcessing, Spreadsheet, Presentation und PDF unterstützt wird; für alle anderen Dokumentformate liefert die Methode GetAllFonts() ein leeres Array.

Verarbeiten fehlender Schriften

Die Situation, dass ein Dokument auf dem Rechner des Autors erstellt wurde und die Schriftart „AAA“ verwendet, und anschließend auf dem Rechner eines Kunden mit GroupDocs.Viewer verarbeitet wird, wo die Schrift „AAA“ fehlt, ist typisch. In einem solchen Fall versucht GroupDocs.Viewer, diese Schrift zu ersetzen — unter Anwendung komplexer Ersetzungsregeln: Es analysiert die Metadaten des Dokuments, alternative Namen der fehlenden Schrift, Dokument‑ und OS‑Einstellungen, die Liste aller im Betriebssystem installierten Schriften usw. Sollte das Betriebssystem aus irgendeinem Grund „leer“ sein und keinerlei installierte Schriften besitzen, ersetzt GroupDocs.Viewer die fehlende Schrift durch eine, die im GroupDocs.Viewer‑Assembly (DLL) eingebettet ist; diese Schrift dient als letzter Ausweg, falls sonst keine Schrift verfügbar ist. Beispielsweise speichert GroupDocs.Viewer intern für die WordProcessing‑Familie die freie Schrift „Fanwood“.

Derzeit führt GroupDocs.Viewer die Schrift‑Ersetzung stillschweigend während des Renderns des Dokuments (wenn die Methode Viewer.View() aufgerufen wird) — es gibt weder Meldungen noch Events, die aktivieren, welche Schrift fehlt und durch welche ersetzt wird, und für welches konkrete Dokument. Diese Funktion ist schwer zu implementieren, weil unklar ist, welche Art von Benachrichtigung sinnvoll wäre, in welchem Format und wie sie clientseitig genutzt werden kann.

GroupDocs.Viewer bietet jedoch zwei mögliche Wege, um diese Situation zu lösen: Manuelles Angeben der fehlenden Schrift und manuelles Ersetzen der fehlenden Schrift.

Fehlende Schrift angeben

Wenn der Benutzer weiß, dass ein Dokument die Schrift „AAA“ verwendet, weiß, dass diese Schrift auf dem Zielrechner nicht installiert ist, und den binären Inhalt dieser Schrift „AAA“ besitzt, kann er sie vor dem Aufruf der Methode Viewer.View() angeben.

Um eine oder mehrere benutzerdefinierte Schriften, die nicht im Ziel‑Betriebssystem installiert sind, zu registrieren, muss der Benutzer Schrift‑Quellen hinzufügen. Eine Schrift‑Quelle ist im Grunde ein Ordner, in dem sich eine oder mehrere Schriften befinden. Sie wird durch die Klasse FolderFontSource repräsentiert. Die Klasse FontSettings bietet die Methode SetFontSources(), um Schrift‑Quellen dem GroupDocs.Viewer hinzuzufügen.

Das folgende Code‑Snippet demonstriert dies. Angenommen, das Dokument sample.docx verwendet die seltene Schrift AAA.ttf, die auf dem Ziel‑Betriebssystem nicht installiert ist. Der Benutzer legt die Datei AAA.ttf in den Ordner C:\custom_fonts und erstellt eine Instanz von FolderFontSource, die auf diesen Ordner verweist. Diese Instanz wird der statischen Klasse FontSettings übergeben, und anschließend wird sample.docx in das HTML‑Format gerendert. Das Ergebnis enthält die Schrift „AAA“ im ausgegebenen HTML‑Dokument.

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);
}

Fehlende Schrift ersetzen

Wenn der Benutzer weiß, dass ein Dokument die Schrift „AAA“ verwendet, weiß, dass diese Schrift auf dem Zielrechner nicht installiert ist, aber keinen Zugriff auf den binären Inhalt von „AAA“ hat, kann er stattdessen eine andere Schrift „BBB“ angeben, die statt der fehlenden „AAA“ verwendet wird. Im Unterschied zum vorherigen Szenario geschieht dies über die View‑Optionen, die dann an die Methode Viewer.View() übergeben werden.

Diese Option heißt DefaultFontName, sie ist eine Zeichenketten‑Eigenschaft, die in der abstrakten Klasse BaseViewOptions deklariert ist und somit für alle Rendering‑Optionen gilt: HtmlViewOptions, PdfViewOptions, PngViewOptions, und JpgViewOptions.

Wird diese Option gesetzt, verwendet GroupDocs.Viewer diese Schrift während des Renderns anstelle aller nicht verfügbaren Schriften. Zum Beispiel kann man bei Dokumenten, die nicht‑englische Zeichen enthalten, einen Standardschrift‑Namen festlegen, um sicherzustellen, dass GroupDocs.Viewer jede fehlende Schrift durch eine mit demselben Zeichensatz ersetzt. Selbstverständlich muss die im DefaultFontName angegebene Schrift im Betriebssystem installiert sein, auf dem GroupDocs.Viewer das Dokument rendert.

Das folgende Code‑Snippet zeigt, wie der Standardschrift‑Name gesetzt wird:

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);
}          

Schriften für HTML ausschließen

Beim Rendern von Dokumenten ins HTML‑Format exportiert GroupDocs.Viewer standardmäßig alle verwendeten Schriften in das HTML‑Dokument. Dadurch wird eine korrekte Anzeige gewährleistet, unabhängig davon, ob die erforderlichen Schriften auf dem Endgerät des Betrachters vorhanden sind. Schriften können im resultierenden HTML‑Dokument entweder als externe Ressourcen (HtmlViewOptions.ForExternalResources) oder direkt im HTML‑Markup mittels des Data‑URI‑Schemas über Base64‑Kodierung (HtmlViewOptions.ForEmbeddedResources) eingebettet werden. Der Export von Schriften nach HTML wird von fast allen Dokumentformaten unterstützt, die selbst Schriften enthalten: Microsoft Office (außer Excel), OpenDocument‑Formate, E‑Mails, PDF, E‑Books usw.

Manchmal ist diese Funktion jedoch unerwünscht. Wenn Schriften eingebettet werden, steigt die Dateigröße des erzeugten HTML‑Dokuments erheblich. Ist auf dem Ziel‑Gerät bereits jede verwendete Schrift installiert, kann der Browser die System‑Schriften nutzen.

Um diesem Bedarf gerecht zu werden, bietet GroupDocs.Viewer die Möglichkeit, Schriften vom erzeugten HTML‑Dokument auszuschließen. Dies lässt sich auf zwei Arten erreichen: Alle Schriften ausschließen oder nur bestimmte Schriften ausschließen.

Beide Optionen werden in der Klasse HtmlViewOptions als unterschiedliche Eigenschaften bereitgestellt:

  • ExcludeFonts ist ein Flag, das den Export aller verwendeten Schriften verhindert, wenn es auf true gesetzt ist. Standardmäßig ist diese Option deaktiviert (false).
  • FontsToExclude ist eine Liste von Zeichenketten, wobei jede Zeichenkette einen Schriftnamen repräsentiert, der vom erzeugten HTML‑Dokument ausgeschlossen werden soll. Standardmäßig ist die Liste leer — es werden keine Schriften ausgeschlossen. Hinweis: Diese Option wirkt nur, wenn ExcludeFonts deaktiviert (false) ist.

Nachfolgend zwei Code‑Snippets, die beide Möglichkeiten demonstrieren: Das erste verwendet ExcludeFonts, das zweite 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);
}

Fazit

GroupDocs.Viewer konzentriert sich primär darauf, Dokumente unterschiedlicher Formate in gängige „anschaubare“ Formate — HTML, PDF, JPEG und PNG — zu rendern. In der letzten Zeit haben wir jedoch mehrere nützliche Funktionen zum Umgang mit Schriften hinzugefügt, die das Prüfen und Analysieren verwendeter Schriften, das Anpassen ihres Exports sowie das Steuern der Schrift‑Ersetzung ermöglichen.

Siehe auch

Kostenlose Testversion erhalten

Sie können eine kostenlose Testversion von GroupDocs.Viewer für .NET von releases.groupdocs.com herunterladen. Außerdem können Sie hier eine temporäre Lizenz erwerben, um alle Funktionen und Features uneingeschränkt auszuprobieren: here.