Glifos y métricas de fuentes TrueType | Java

Obtener métricas de fuentes

Las métricas de fuentes se refieren a información como “Ascender”, “Descender”, “TypoAscender”, “TypoDescender” y “UnitsPerEm”. Aspose.Font para Java API se puede utilizar para abrir archivos de fuentes TTF y leer la información de métricas de fuentes de estos usando el siguiente código de muestra.

 1// For complete examples and data files, please go to https://github.com/aspose-font/Aspose.Font-for-Java
 2String fileName = Utils.getDataDir() + "Montserrat-Regular.ttf"; //Font file name with full path
 3
 4      FontDefinition fd = new FontDefinition(FontType.TTF, new FontFileDefinition("ttf", new FileSystemStreamSource(fileName)));
 5      TtfFont font = (TtfFont) Font.open(fd);
 6
 7      String name = font.getFontName();
 8      System.out.println("Font name: " + name);
 9      System.out.println("Glyph count: " + font.getNumGlyphs());
10      String metrics = MessageFormat.format(
11          "Font metrics: ascender - {0}, descender - {1}, typo ascender = {2}, typo descender = {3}, UnitsPerEm = {4}",
12          font.getMetrics().getAscender(), font.getMetrics().getDescender(),
13          font.getMetrics().getTypoAscender(), font.getMetrics().getTypoDescender(), font.getMetrics().getUnitsPerEM());
14
15      System.out.println(metrics);
16      
17    //Get cmap unicode encoding table from font as object TtfCMapFormatBaseTable to access information about font glyph for symbol 'A'.
18      //Also check that font has object TtfGlyfTable (table 'glyf') to access glyph.
19      TtfCMapFormatBaseTable cmapTable = null;
20      if (font.getTtfTables().getCMapTable() != null)
21      {
22          cmapTable = font.getTtfTables().getCMapTable().findUnicodeTable();
23      }
24      if (cmapTable != null && font.getTtfTables().getGlyfTable() != null)
25      {
26      	System.out.println("Font cmap unicode table: PlatformID = " + cmapTable.getPlatformId() +
27      			", PlatformSpecificID = " + cmapTable.getPlatformSpecificId());
28
29          //Code for 'A' symbol
30          char unicode = (char)65;
31
32          //Glyph index for 'A'
33          long glIndex = cmapTable.getGlyphIndex(unicode);
34
35          if (glIndex != 0)
36          {
37              //Glyph for 'A'
38              Glyph glyph = font.getGlyphById(glIndex);
39              if (glyph != null)
40              {
41                  //Print glyph metrics
42              	System.out.println("Glyph metrics for 'A' symbol:");
43                  String bbox = MessageFormat.format(
44                      "Glyph BBox: Xmin = {0}, Xmax = {1}" + ", Ymin = {2}, Ymax = {3}",
45                      glyph.getGlyphBBox().getXMin(), glyph.getGlyphBBox().getXMax(),
46                      glyph.getGlyphBBox().getYMin(), glyph.getGlyphBBox().getYMax());
47                  System.out.println(bbox);
48                  System.out.println("Width:" + font.getMetrics().getGlyphWidth(new GlyphUInt32Id(glIndex)));
49              }
50          }
51      }

Detectar símbolos latinos

Aspose.Font para .API le permite detectar símbolos latinos en archivos de fuentes TrueType. Esto se puede lograr utilizando el siguiente código de muestra.

 1// For complete examples and data files, please go to https://github.com/aspose-font/Aspose.Font-for-Java
 2String fileName = Utils.getDataDir() + "Montserrat-Regular.ttf"; //Font file name with full path
 3
 4      FontDefinition fd = new FontDefinition(FontType.TTF, new FontFileDefinition("ttf", new FileSystemStreamSource(fileName)));
 5      TtfFont ttfFont = (TtfFont) Font.open(fd);
 6
 7      boolean latinText = true;
 8
 9
10      for (int code = 65; code < 123; code++)
11      {
12          GlyphId gid = ttfFont.getEncoding().decodeToGid(code);
13          if (gid == null || gid == GlyphUInt32Id.getNotDef())
14          {
15              latinText = false;
16          }
17      }
18
19      if (latinText)
20      {
21          System.out.println(MessageFormat.format("Font {0} supports latin symbols.", ttfFont.getFontName()));
22      }
23      else
24      {
25      	System.out.println(MessageFormat.format("Latin symbols are not supported by font {0}.", ttfFont.getFontName()));
26      }

Extraer restricciones de licencia

Utilice Aspose.Font para Java API para extraer restricciones de licencia de archivos de fuentes. Las fuentes pueden tener información de licencia incorporada en uno de los siguientes modos.

El siguiente ejemplo de código muestra cómo utilizar un objeto Aspose.Font.Ttf.LicenseFlags para obtener información sobre las restricciones de licencia de fuentes (marca fsType de la tabla OS/2) de forma cómoda.

 1// For complete examples and data files, please go to https://github.com/aspose-font/Aspose.Font-for-Java
 2String fileName = Utils.getDataDir() + "Montserrat-Regular.ttf"; //Font file name with full path
 3
 4      FontDefinition fd = new FontDefinition(FontType.TTF, new FontFileDefinition("ttf", new FileSystemStreamSource(fileName)));
 5      TtfFont font = (TtfFont) Font.open(fd);
 6
 7      LicenseFlags licenseFlags = null;
 8      if (font.getTtfTables().getOs2Table() != null)
 9      {
10          licenseFlags = font.getTtfTables().getOs2Table().getLicenseFlags();
11      }
12
13      if (licenseFlags == null || licenseFlags.isFSTypeAbsent())
14      {
15          System.out.println(MessageFormat.format("Font {0} has no embedded license restrictions", font.getFontName()));
16      }
17      else
18      {
19          if (licenseFlags.isEditableEmbedding())
20          {
21          	System.out.println(MessageFormat.format("Font {0} may be embedded, and may be temporarily loaded on other systems.", font.getFontName())
22                  + " In addition, editing is permitted, including ability to format new text"
23                  + " using the embedded font, and changes may be saved.");
24          }
25          else if (licenseFlags.isInstallableEmbedding())
26          {
27          	System.out.println(MessageFormat.format("Font {0} may be embedded, and may be permanently installed", font.getFontName())
28                  + " for use on a remote systems, or for use by other users.");
29          }
30          else if (licenseFlags.isPreviewAndPrintEmbedding())
31          {
32          	System.out.println(MessageFormat.format("Font {0} may be embedded, and may be temporarily loaded", font.getFontName())
33                  + "  on other systems for purposes of viewing or printing the document.");
34          }
35          else if (licenseFlags.isRestrictedLicenseEmbedding())
36          {
37          	System.out.println(MessageFormat.format("Font {0} must not be modified, embedded or exchanged in any manner", font.getFontName())
38                  + " without first obtaining explicit permission of the legal owner.");
39          }
40      }

Have any questions about Aspose.Font?



Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.