Glyphen, Metriken und Lizenzinformationen aus TTF- und OTF-Schriften in Java extrahieren

Untersuchen, messen und analysieren Sie TrueType (.ttf)- und OpenType (.otf)-Schriften programmgesteuert mit Aspose.Font for Java. Greifen Sie auf globale Schriftmetriken (Ascender, Descender, UnitsPerEm) zu, ordnen Sie Glyphenindizes über cmap-Tabellen zu, berechnen Sie Begrenzungsrahmen einzelner Zeichen, überprüfen Sie die Unterstützung von Zeichensätzen und setzen Sie Einschränkungen für die Schrifteinbettung durch, ohne auf native Grafikumgebungen des Systems angewiesen zu sein.

 

Eine umfassende Schriftanalyse ist für automatisierten Schriftsatz, die PDF-Erstellung, die Automatisierung von Grafikdesign und digitale Publishing-Workflows von entscheidender Bedeutung. Mit Aspose.Font for Java können Entwickler:

  • Präzises Textlayout: Exakte typografische Abmessungen (Ascender, Descender, UnitsPerEm) abrufen, um Zeilenhöhen und Textpositionen präzise zu berechnen.
  • Zeichensatzvalidierung: Erkennen, ob eine Schrift die gewünschten Schriftsysteme (z. B. lateinische, kyrillische oder CJK-Zeichen) unterstützt, bevor sie gerendert wird.
  • Analyse der Glyphengeometrie: Begrenzungsrahmen von Glyphen (XMin, XMax, YMin, YMax) und Vorschubbreiten extrahieren, um eine präzise Trefferprüfung und Ausrichtung zu ermöglichen.
  • Compliance- und rechtliche Prüfungen: Eingebettete Lizenzflags (fsType in OS/2-Tabellen) programmgesteuert überprüfen, um die Einhaltung der Anforderungen an die Dokumenteinbettung sicherzustellen.

Kernmetriken und Glyphenfunktionen

Globale Schriftmetriken - Ascender, Descender, TypoAscender, TypoDescender und UnitsPerEM-Metriken extrahieren.

Begrenzungsrahmen von Glyphen (BBox) - Exakte Begrenzungskoordinaten (XMin, XMax, YMin, YMax) und Vorschubbreiten für jede Glyphe abrufen.

Unicode-cmap-Zuordnung - Zuordnungen von Zeichen zu Glyphen über Unicode- und plattformspezifische Codierungstabellen hinweg nachschlagen.

Zeichensatzunterstützung - Das Vorhandensein von Symbolen (z. B. im lateinischen Zeichensatz) überprüfen, indem Zeichencodes in Glyphen-IDs dekodiert werden.

Überprüfung von Lizenzbeschränkungen - Flags der OS/2-Tabelle untersuchen, um festzustellen, ob eine Schrift bearbeitbar, installierbar, für Vorschau und Druck vorgesehen oder eingeschränkt ist.

So extrahieren Sie globale Schriftmetriken und Glyphendetails

Greifen Sie mithilfe der Strukturen Font.getMetrics() und der Unicode-Tabellenstrukturen von CMap auf die Gesamtabmessungen der Schrift sowie auf zeichenbezogene Metriken zu.

import com.aspose.font.*;
import java.text.MessageFormat;

public class GetFontMetricsAndGlyphs {
    public static void main(String[] args) {
        // Load the TrueType / OpenType font
        String fileName = "path/to/Montserrat-Regular.ttf";
        FontDefinition fd = new FontDefinition(FontType.TTF, new FontFileDefinition("ttf", new FileSystemStreamSource(fileName)));
        TtfFont font = (TtfFont) Font.open(fd);

        // Print global font metrics
        System.out.println("Font Name: " + font.getFontName());
        System.out.println("Glyph Count: " + font.getNumGlyphs());
        
        IFontMetrics metrics = font.getMetrics();
        System.out.println(MessageFormat.format(
            "Metrics: Ascender={0}, Descender={1}, TypoAscender={2}, TypoDescender={3}, UnitsPerEm={4}",
            metrics.getAscender(), metrics.getDescender(), 
            metrics.getTypoAscender(), metrics.getTypoDescender(), metrics.getUnitsPerEM()
        ));

        // Access cmap unicode table to locate character 'A'
        TtfCMapFormatBaseTable cmapTable = null;
        if (font.getTtfTables().getCMapTable() != null) {
            cmapTable = font.getTtfTables().getCMapTable().findUnicodeTable();
        }

        if (cmapTable != null && font.getTtfTables().getGlyfTable() != null) {
            char unicodeA = 'A';
            long glyphIndex = cmapTable.getGlyphIndex(unicodeA);

            if (glyphIndex != 0) {
                Glyph glyph = font.getGlyphById(glyphIndex);
                if (glyph != null) {
                    // Step 4: Extract bounding box and advance width
                    FontBBox bbox = glyph.getGlyphBBox();
                    System.out.println(MessageFormat.format(
                        "Glyph BBox for 'A': Xmin={0}, Xmax={1}, Ymin={2}, Ymax={3}",
                        bbox.getXMin(), bbox.getXMax(), bbox.getYMin(), bbox.getYMax()
                    ));
                    System.out.println("Glyph Width: " + metrics.getGlyphWidth(new GlyphUInt32Id(glyphIndex)));
                }
            }
        }
    }
}

Zeichensatzunterstützung in Java erkennen

Überprüfen Sie, ob eine geladene Schrift gültige Glyphenzuordnungen für einen bestimmten Bereich von Zeichencodes enthält.

import com.aspose.font.*;
import java.text.MessageFormat;

public class CheckFontLicense {
    public static void main(String[] args) {
        String fileName = "path/to/font.ttf";
        FontDefinition fd = new FontDefinition(FontType.TTF, new FontFileDefinition("ttf", new FileSystemStreamSource(fileName)));
        TtfFont font = (TtfFont) Font.open(fd);

        LicenseFlags licenseFlags = null;
        if (font.getTtfTables().getOs2Table() != null) {
            licenseFlags = font.getTtfTables().getOs2Table().getLicenseFlags();
        }

        if (licenseFlags == null || licenseFlags.isFSTypeAbsent()) {
            System.out.println(MessageFormat.format("Font {0} has no embedded license restrictions.", font.getFontName()));
        } else if (licenseFlags.isEditableEmbedding()) {
            System.out.println("License Mode: Editable Embedding allowed.");
        } else if (licenseFlags.isInstallableEmbedding()) {
            System.out.println("License Mode: Installable Embedding allowed.");
        } else if (licenseFlags.isPreviewAndPrintEmbedding()) {
            System.out.println("License Mode: Preview and Print Embedding only.");
        } else if (licenseFlags.isRestrictedLicenseEmbedding()) {
            System.out.println("License Mode: Restricted Embedding - explicit permission required.");
        }
    }
}

Installation und Einrichtung

Fügen Sie Aspose.Font for Java über Maven zu Ihrem Projekt hinzu.

Package Manager Console Command

<repository>
    <id>AsposeJavaAPI</id>
    <name>Aspose Java API</name>
    <url>https://repository.aspose.com/repo/</url>
</repository>

<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-font</artifactId>
    <version>Latest</version>
</dependency>

Häufig gestellte Fragen

1. Welche Einheiten werden zur Messung von Schriftartmetriken in Aspose.Font for Java verwendet?

Metriken wie Ascender, Descender und GlyphBBox werden in Schriftarteinheiten ausgedrückt, die durch die Eigenschaft UnitsPerEM definiert sind (üblicherweise 1000 oder 2048 Einheiten pro EM-Box bei TTF/OTF-Schriftarten).

2. Wie erhalte ich die Darstellung einer fehlenden Glyphe, wenn ein Zeichen nicht unterstützt wird?

Wenn ein Zeichen in der Codierungstabelle der Schriftart nicht definiert ist, gibt decodeToGid() GlyphUInt32Id.getNotDef() zurück, was dem Index 0 entspricht (dem standardmäßigen Symbol .notdef für eine nicht definierte oder fehlende Glyphe).

3. Kann ich Tabellen in OpenType-Schriftarten (.otf) ebenso wie in TrueType-Schriftarten (.ttf) untersuchen?

Ja. Aspose.Font for Java analysiert sowohl .ttf- als auch .otf-Schriftarttabellen (CFF-basierte oder TrueType-basierte OpenType-Schriftarten) und ermöglicht den Zugriff auf die Tabellen OS/2, cmap, glyf, head und hhea.