Fonts
Fonts
Dieses Handbuch zeigt, wie man die in einem Dokument referenzierten Schriften inspiziert, eingebettete Schriftartdaten extrahiert und das TrueType Einbetten von Schriften beim Speichern mit Aspose.Words FOSS für .NET steuert. Aspose.Words FOSS für .NET verfolgt jede von einem geladenen Dokument referenzierte Schrift über FontInfoCollection und stellt pro-Schrift-Metadaten, eingebettete Schrift-Extraktion sowie Einbetten-beim-Speichern-Steuerungen über FontInfo bereit. Document.FontSettings und LoadOptions.FontSettings bieten den (absichtlich minimalen, in dieser Ausgabe) FontSettings Einstiegspunkt.
Untersuchung der im Dokument verwendeten Schriften
DocumentBase.FontInfos (geerbt von Document) liefert ein FontInfoCollection, das jede im Dokument irgendwo referenzierte Schrift beschreibt. Greifen Sie per Name darauf zu (z.B. fontInfos["Arial"]), prüfen Sie mit Contains(name), ob sie existiert, zählen Sie sie mit Count oder enumerieren Sie die gesamte Sammlung über GetEnumerator().
Schrifteigenschaften und Klassifizierung
Jedes FontInfo beschreibt eine Schrift: Name und AltName identifizieren sie, Family klassifiziert sie über das FontFamily-Enum (Auto, Roman, Swiss, Modern, Script, Decorative), Pitch gibt ihr FontPitch (Default, Fixed, Variable) aus, und IsTrueType, Charset und Panose stellen niedrigere Font-Matching-Daten bereit.
Extraktion eingebetteter Schriften
Wenn ein Dokument eingebettete Schriftarten hat, gibt FontInfo.GetEmbeddedFont(format, style) die rohen eingebetteten Schriftart-Bytes für ein gegebenes EmbeddedFontFormat (EmbeddedOpenType oder OpenType) und EmbeddedFontStyle (Regular, Bold, Italic, BoldItalic) zurück. GetEmbeddedFontAsOpenType(style) gibt die Schriftart direkt im OpenType-Format zurück, unabhängig davon, wie sie ursprünglich eingebettet wurde.
Lizenzrechte für das Einbetten von Schriftarten
Bevor Sie eine Schriftart extrahieren oder erneut einbetten, prüfen Sie FontInfo.EmbeddingLicensingRights, ein FontEmbeddingLicensingRights-Objekt. EmbeddingUsagePermissions meldet die Lizenzstufe über das FontEmbeddingUsagePermissions-Enum (Installable, RestrictedLicense, PrintAndPreview, Editable), während NoSubsetting und BitmapEmbeddingOnly weitere vom Schriftartenhersteller festgelegte Einschränkungen kennzeichnen.
Steuerung der Schriftarten-Einbettung beim Speichern
FontInfoCollection enthält zudem schreibebene Einbettungsschalter: Setzen Sie EmbedTrueTypeFonts auf true, um jede TrueType-Schriftart, die im Dokument verwendet wird, beim Speichern einzubetten, EmbedSystemFonts, um Schriftarten einzuschließen, die normalerweise auf jedem System vorhanden sein sollen, und SaveSubsetFonts, um nur die tatsächlich genutzten Glyphen statt der gesamten Schriftart einzubetten.
Geltungsbereich von FontSettings in dieser Ausgabe
Document.FontSettings und LoadOptions.FontSettings geben beide ein FontSettings-Objekt zurück, und FontSettings.DefaultInstance stellt eine gemeinsam genutzte Standardinstanz bereit. In dieser FOSS-Ausgabe ist die FontSettings’ API Oberfläche auf jene Standardinstanz-Eigenschaft beschränkt – die auf Ordnern basierende und systemweite Schriftquellen-Auflösung, die andernorts in Aspose.Words zum Ersetzen oder Auflösen von Schriftarten für Seitenlayout und Rendering verwendet wird, fehlt, da Seitenlayout und Rendering außerhalb des Geltungsbereichs dieser Ausgabe liegen. Die Schriftarten-Verarbeitung hier bedeutet Metadaten-Inspektion und Einbettung, nicht das Ersetzen von Schriftarten für das Rendering.
Tipps und bewährte Praktiken
- Überprüfen Sie immer
FontInfo.EmbeddingLicensingRights.EmbeddingUsagePermissions, bevor Sie eine eingebettete Schriftart extrahieren oder weiterverbreiten — einige Schriftarten sind nurRestrictedLicenseoderPrintAndPreviewlizenziert. - Verwenden Sie
GetEmbeddedFontAsOpenType(), wenn Sie ein konsistentes Ausgabeformat benötigen, unabhängig davon, wie das Quelldokument die Schriftart eingebettet hat (EmbeddedOpenTypevsOpenType). - Setzen Sie
FontInfoCollection.SaveSubsetFontsauftrue, um die Ausgabedateigröße zu reduzieren, wenn Sie Schriftarten einbetten, die nur eine Handvoll Glyphen verwenden. FontInfoCollection.Contains(name)ist günstiger als das Indizieren und Verarbeiten einer fehlgeschlagenen Suche (z.B.fontInfos[name]), wenn Sie nur das Vorhandensein einer Schriftart testen müssen.
Häufige Probleme
| Problem | Ursache | Lösung |
|---|---|---|
GetEmbeddedFont() liefert keine nutzbaren Daten | Die referenzierte Schriftart ist im Dokument nicht tatsächlich eingebettet | Überprüfen Sie die Einbettungseinstellungen des Dokuments, bevor Sie davon ausgehen, dass Schriftartdaten vorhanden sind |
Das Indizieren von FontInfoCollection nach Namen liefert nichts | Der Schriftartname stimmt nicht exakt überein, einschließlich Groß-/Kleinschreibung | Enumerieren Sie FontInfoCollection mit GetEnumerator(), um die genaue Name-Zeichenkette zu bestätigen |
| Erwartete APIs für Schriftart-Substitution/Auflösung fehlen | Die auf Ordnern und Systemen basierende Auflösung von Schriftquellen ist in dieser FOSS-Edition nicht implementiert | Verwenden Sie FontInfo/FontInfoCollection nur für Metadaten und Einbettung; Schriftart-Substitution für die Darstellung gehört nicht zum Umfang dieser Edition |
FAQ
Wie kann ich jede Schriftart auflisten, die ein Dokument referenziert?
Enumerieren Sie Document.FontInfos (ein FontInfoCollection) über GetEnumerator() oder greifen Sie per Namen darauf zu, um ein bestimmtes Element nachzuschlagen (z.B. fontInfos["Arial"]).
Kann ich die Rohbytes eines eingebetteten Fonts aus einem Dokument extrahieren?
Ja, falls die Schriftart eingebettet ist — rufen Sie FontInfo.GetEmbeddedFont(format, style) für das ursprüngliche eingebettete Format auf, oder GetEmbeddedFontAsOpenType(style), um das Ergebnis zu OpenType zu normalisieren.
Wie stelle ich sicher, dass Schriften beim Speichern eines Dokuments eingebettet werden?
Setzen Sie FontInfoCollection.EmbedTrueTypeFonts auf true vor dem Speichern; fügen Sie EmbedSystemFonts hinzu, falls Sie außerdem Schriften voraussetzen, die auf jedem System vorhanden sein sollen, und SaveSubsetFonts, um nur die tatsächlich genutzten Glyphen einzubetten.
Unterstützt diese Edition das Auflösen von Schriften aus einem benutzerdefinierten Ordner für das Rendering?
Nein — die ordner- und systembasierte Auflösung von Schriftquellen (FontSettings Quellkonfiguration) ist hier nicht implementiert, da sie der Seitenlayout- und Rendering-Unterstützung dient, die außerhalb des Geltungsbereichs dieser FOSS-Edition liegen.
Was bedeutet FontEmbeddingLicensingRights.NoSubsetting?
Es ist ein Lizenz-Flag, das von den Einbettungsrechten des Font-Anbieters gemeldet wird: Wenn true, darf die Schrift nicht nur auf die tatsächlich verwendeten Glyphen reduziert werden.
API Reference Zusammenfassung
| Klasse / Methode | Beschreibung |
|---|---|
FontInfoCollection | Schriften, die in einem Dokument referenziert werden; Indexer nach Name (fontInfos[name]), Contains(), Count, GetEnumerator(), plus EmbedTrueTypeFonts/EmbedSystemFonts/SaveSubsetFonts |
FontInfo | Metadaten einer Schriftart: Name, AltName, Family, Pitch, IsTrueType, Charset, Panose, EmbeddingLicensingRights |
FontInfo.GetEmbeddedFont() / GetEmbeddedFontAsOpenType() | Eingebettete Schriftbytes extrahieren |
EmbeddedFontFormat / EmbeddedFontStyle | Enums zur Identifizierung des Formats und der Stilvariante einer eingebetteten Schriftart |
FontEmbeddingLicensingRights / FontEmbeddingUsagePermissions | Einbettungs-Lizenzbeschränkungen pro Schriftart |
FontSettings | Minimaler font-settings Einstiegspunkt (Document.FontSettings, LoadOptions.FontSettings); keine font-source Auflösung in dieser Ausgabe |