.NET FontManager

.NET FontManager ist eine kleine praktische Open-Source-Bibliothek für .NET und ASP.NET.

Wolkenhintergrundbild in der Hero-Sektion

Beschreibung

Mit Hilfe von .NET FontManager können Sie die gängigen Schriftartdateien verwenden, Konturen von jedem Glyph erhalten und sie nach Bedarf zeichnen. Die Bibliothek ist ziemlich einfach und Sie müssen nicht einmal über die internen Funktionen von Schriftarten Bescheid wissen.

1 var fsup = new FreetypeFontSupplier(File.ReadAllBytes("arial.ttf"));
2 fsup.DrawString(graphics, 0, 0, "This is a text!", 12.0f, Brushes.Black);

Hauptfunktionen

.NET FontManager bietet Operationenauf niedriger Ebene mit verschiedenen Schriftartformaten, darunter:

  • TrueType- und TrueType-Sammlungen,
  • OpenType und OpenType-Sammlungen,
  • Type1-Schriftarten, einschließlich Type1C,
  • CID-Schriftarten.

Technisch funktioniert es über Freetype2 Version 2.5 und unterstützt alle Schriftarten aus dieser Bibliothek. Anstatt mit Low-C-Code zu spielen, können Sie mit .NET und mit reinen .NET-Abstraktionen arbeiten.

Warum .NET FontManager

Sobald Sie mit dem DTP-Bereich arbeiten, müssen Sie bestimmte Diagramme, Vektorbilder und Logos in einem echten Vektorformat und den richtigen Pantone-Farben erstellen. Oder vielleicht mögen Sie einfach gute Diagramme auf Ihrem Mobilgerät ohne Raster. In allen diesen Fällen müssen Sie Bilder in bestimmten und manchmal alten Formaten erstellen.

Sie benötigen also auch richtige und qualitativ hochwertige Schriftarten! Es reicht nicht aus, ein paar Polygone zu erstellen, um sicher zu sein, dass es funktioniert und hervorragend aussieht.

Aber .NET bietet nicht einmal Unterstützung für OpenType-Schriftarten. Aus diesem Grund haben wir uns entschieden, unsere eigene Bibliothek .NET FontManager mit einer Reihe hilfreicher Funktionen zu erstellen. Nachdem wir den gleichen Trick mehrmals durchgeführt hatten, haben wir uns entschlossen, unseren Code mit anderen zu teilen.

Darüber hinaus haben wir auch eine API für Java.

Wann sollte .NET FontManager verwendet werden?

Immer wenn Sie eine nicht standardmäßige oder kommerzielle Schriftart haben, müssen Sie darüber nachdenken, wie Sie damit arbeiten, wie Sie sie verteilen und wie Sie verhindern, dass Windows-Font-Substitutions-Händler Ihre Schriftart verwenden.

Außerdem müssen Sie keine TrueType-Schriftarten kaufen. OpenType, CID-Schriftarten und Type1 enthalten Glyphen im Vektor und werden von Freetype2 verarbeitet.

Hier ist eine einfache Entscheidung: Bringen Sie alles mit Ihrer Bewerbung mit, verwenden Sie es aus Ihrem privaten Ordner und es wird in einer ausgezeichneten Art und Weise funktionieren: das richtige Aussehen, das richtige Gefühl und keine Störung mit anderen Schriftarten und Programmen. Manchmal ist eine einfache Verteilung wichtig.

Wenn Sie mit Schriftartdateien arbeiten, wissen Sie jederzeit, welche Schriftart die richtige ist, und Fehler in den Schriftartmetadaten bringen Ihnen keine Probleme. Verwenden Sie einfach Inhalte und fügen Sie je nach Bedarf einen beliebigen „Schriftnamen“ hinzu.

Wie zu integrieren

Technisch funktioniert es bis Freetype2 Version 2.5 und unterstützt alle Schriftarten aus dieser Bibliothek. Anstatt mit Low-C-Code zu spielen, können Sie mit .NET und mit reinen .NET-Abstraktionen arbeiten. Beispielsweise sieht das typische Gerät in der OxyPlot-Bibliothek wie folgt aus:

Alle Schriftarten werden von .Net FontManager verwaltet und im SVG-Schriftartformat gespeichert:

 1    <defs>
 2      <font id="Font_2107481958">
 3        <font-face ascent="92.9000" descent="-25.0000" units-per-em="100" height="117.9000"
 4        font-style="normal" font-family="Font_2107481958" font-weight="normal" />
 5        <glyph unicode="0" horiz-adv-x="48.0000" d="..." />
 6        <glyph unicode="5" horiz-adv-x="48.0000" d="...  Z" />
 7        <glyph unicode="2" horiz-adv-x="48.0000" d="M 3.7 7.7 ... L 3.7 7.7 Z" />
 8        ...
 9      </font>
10    </defs>
11    

Architektur

.NET FontManager ist ein intellektueller Wrapper für die Open-Source-Bibliothek FreeType2 und verwendet GPLv2 als Originalbibliothek.

Beim Erstellen von FreetypeFontSupplier stellen Sie das Byte-Array mit den Schriftart-Inhalten bereit. Dabei kann es sich um eine Datei von einem Datenträger, um aus dem Internet heruntergeladene Inhalte oder um eine Ressource aus Ihrer Assembly handeln. Während der Erstellungszeit stellen Sie dem Byte-Array eines der bekannten Schriftformate zur Verfügung.

Während des Erstellungsprozesses wird FreetypeFontSupplier FreeType genannt, um das Byte-Array zu analysieren, die Konturen zu extrahieren und es als FreetypeFontSupplier.GlyphInfo-Hashmap zu füllen. Gleichzeitig werden auch die grundlegenden Schriftmetriken ermittelt und stehen zur Verfügung, sobald der FreetypeFontSupplier erstellt wird.

Nach der Erstellung von FreetypeFontSupplier wird FreeType nicht mehr verwendet und alles bleibt im Speicher. Alle Berechnungen und Zeichnungen werden von unserem Code durchgeführt, nicht von FreeType2. Sie müssen also nicht an Cairo und andere Bibliotheken der Linux-Welt mit Wrappern denken. Nachdem die Schriftart analysiert wurde, sind alle weiteren Operationen rein.NET.

Wenn Sie nur CIDType2 aus PDF haben, extrahieren Sie einfach die Bytes der Schriftart in ein Array und lassen Sie die Bibliothek arbeiten. Das Vorhandensein bestimmter Zeichen könnte die Farben einschränken, aber die bekannten Glyphen funktionieren gut. Bitte vergessen Sie nicht, zusätzlich PDF-Kodierung und/oder CMap-Konvertierungen in Ihren Code zu extrahieren, besonders für den Fall, dass Type0-Nachkommen vorhanden sind. Einige „Optimierer“ könnten nur die Codes der Glyphen in Schriftarten anstelle von normalen Tabellen behalten. Überoptimierte PDFs können für Überraschungen sorgen.

Proben

Um mit der Nutzung der Bibliothek zu beginnen, geben Sie einfach die Schriftartdatei an: private Matrix defaultMatrix = new Matrix(0.01f, 0, 0, 0.01f, 0, 0); FreetypeFontSupplier fsup = new FreetypeFontSupplier( File.ReadAllBytes(“arial.ttf”), defaultMatrix);

Die Standardmatrix ist erforderlich, um Glyphen in einer normalen Leinwand für Messungen und Zeichnungen zu skalieren. Für die SVG-Bibliothek beträgt die „gemeinsame Größe“ beispielsweise 100. Daher verwenden wir für die Skalierung in diesem Fall 1/100. Standardwerte sind in den meisten Fällen verwendbar, daher können Sie den zweiten Parameter auf Null belassen.

Sobald eine Datei geladen ist, können Sie die Textgrößen für die Schriftgröße 12pt berechnen:

1    float width = fsup.MeasureTextWidth("Text", 12.0f);
2        float height= fsup.GetHeight(12.0f);
3    

oder

1    SizeF sz = fsup.MeasureText("Text". 12.0f);
2    

Auf die gleiche Weise können wir Aufstieg, Abstieg und sogar „Einheiten pro Em“ berechnen.

Jetzt können wir solche Details entweder aus der Schriftart ermitteln, um beispielsweise ein neues Format (wie SVG) zu erstellen, oder den Text wie folgt zeichnen:

1    fsup.DrawString(graphics, 0, 0,
2        "This\nis\na\n\text!",
3        12.0f, Brushes.Black);
4    

Dabei sind (0, 0) die linke/obere Ecke des Textes (aufsteigend wird automatisch hinzugefügt, sodass Sie sich nicht darum kümmern müssen), 12.0f ist die Schriftgröße in Punkten und Pinsel ist die Farbe, Schraffur, Farbverlauf oder Textur.

Auf die gleiche Weise können Sie einen umrissenen Text erstellen:

1    fsup.DrawOutline(graphics, 0, 0,
2        "This\nis\na\n\text!",
3        12.0f, Pens.Bisque);
4    

Manchmal müssen Sie den Text in ein bestimmtes Rechteck füllen:

1    fsup.DrawString(graphics, 0, 0, 100, 100,
2        "This\nis\na\n\text!",
3        12.0f, Brushes.Black);
4    

Der Text wird automatisch am rechten Rand umbrochen.

Und der letzte Trick besteht darin, eine benutzerdefinierte SVG-Schriftartdefinition für eine bestimmte Teilzeichenfolge zu erstellen:

 1    public String dumpFontGlyphs(String knownChars, String refName, float emSize)
 2    {
 3        float commonSize = fsup.MatrixScale;
 4        StringBuilder d = new StringBuilder();
 5        d.Append("<font id=\"" + refName + "\">");
 6        d.Append("<font-face ascent=\"" +
 7            (commonSize * fsup.GetAscent(emSize)) + "\" descent=\"" +
 8            (commonSize * fsup.GetDescent(emSize)) + "\" units-per-em=\"" +
 9            fsup.UnitsPerEm + "\" height=\"" +
10            (commonSize * fsup.GetHeight(emSize)) +
11            "\" font-style=\"normal\" font-family=\"Font_" + refName +
12            "\" font-weight=\"normal\"/>");
13         for(int k = 0; k < knownChars.Count; ++k) {
14            d.Append("<glyph unicode=\""+knownChars[k]+"\" horiz-adv-x=\"" +
15                fsup.GetAdvanceX(knownChars[k]) + "\" d=\"");
16            d.Append(fsup.ToSVGData(knownChars[k]));
17            d.Append("\"/>");
18        }
19        d.Append("<font/>");
20        return d.ToString();
21    }
22    

Dieser Code scheint knifflig zu sein, zeigt aber die Grundprinzipien der Verwendung der Bibliothek auf. Jede Zahl und jede Kurve ist über den .NET FontManager verfügbar und kann auf die gleiche Weise auch für andere Bibliotheken verwendet werden. Verwenden Sie einfach eine neue API anstelle des Tricks mit hochentwickelten „Messgeräten“ und „Rendern“. Ihre Schriftarten sind immer verfügbar und vorhersehbar.

Herunterladen

.NET FontManager-Appliances: OxyPlot-Diagrammbibliothek

Aus Gründen der Benutzerfreundlichkeit haben wir Bindungen zu beliebten .NET-Bibliotheken hinzugefügt. Einer davon ist OxyPlot. Es arbeitet schnell und verfügt über eine sehr gute Architektur, die es Ihnen ermöglicht, einige zusätzliche Optionen hinzuzufügen. Selbstverständlich haben wir nicht nur die Unterstützung von Schriftarten, sondern auch die SVG-Ausgabe hinzugefügt; Das bedeutet, dass wir SVG-Farben (mit dem Profil „icc-color(#CMYK)“) und Schriftarten hinzugefügt haben. Alle Patches (oxyplot-final.patch) und die gepatchte Bibliotheksquelle (oxyplot-develop-patched.zip) mit Binärdateien (OxyPlot-SvgNet-bin.zip) sind verfügbar.

.NET FontManager-Appliances: SVGNet

Im Gegensatz zur Diagrammbibliothek ist SVGNet ein Open-Source-Code, der Zeichnungen in SVG unterstützt. Logos, einfache Boxen und andere vektorisierte Dinge sind vorhanden. Für OxyPlot haben wir bestimmten Code hinzugefügt, um benutzerdefinierte Schriftarten zu verarbeiten und die Farben zu verbessern. Leider können wir aufgrund der GDI-API-Beschränkungen System.Drawing.Font nicht erben und unsere abgeleitete Implementierung anstelle der Standardimplementierung bereitstellen (Microsoft mag versiegelte Klassen, auch wenn sie nicht versiegelt werden sollten). Deshalb haben wir einige weitere DrawString()-Aufrufe für die SVGGraphics-Implementierung sowie in der Schnittstelle hinzugefügt. Wir haben keine Möglichkeit, dem Vertrag von Microsoft für den Grafikunterricht zu folgen. Alle Patches (svgnet-final.patch) und die gepatchte Bibliothek (SvgNet-master-patched.zip) mit Binärdateien (OxyPlot-SvgNet-bin.zip) sind verfügbar. .NET FontManager-Bibliotheksquelle (dotNET-FontManager-sources.zip). Diese Bibliothek wird „AS IS“ gemäß den Bedingungen der GPLv3 bereitgestellt. Falls Sie es unter einer anderen (z. B. kommerziellen) Lizenz benötigen, kontaktieren Sie uns bitte über das unten stehende Kontaktformular. Kommerzieller Support ist ebenfalls verfügbar.

Sie können alle spezifischen Funktionen anfordern, die Sie benötigen – bestellen Sie schnell und kostengünstig unsere kundenspezifischen Softwareentwicklungsdienste.

Verwandte Produkte