Гліфи та метрики шрифтів TrueType | Java

Отримати показники шрифту

Показники шрифту стосуються такої інформації, як Ascender, Descender, TypoAscender, TypoDescender і UnitsPerEm. Aspose.Font для Java API можна використовувати для відкриття файлів шрифтів TTF і читання інформації про показники шрифту з них за допомогою наступного прикладу коду.

 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      }

Виявлення латинських символів

Aspose.Font для .API дозволяє виявляти латинські символи у файлах шрифтів TrueType. Цього можна досягти за допомогою наступного прикладу коду.

 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      }

Витяг ліцензійних обмежень

Використовуйте API Aspose.Font для Java, щоб отримати ліцензійні обмеження з файлів шрифтів. Шрифти можуть мати вбудовану інформацію про ліцензування в одному з наведених нижче режимів.

У наведеному нижче прикладі коду показано, як використовувати об’єкт Aspose.Font.Ttf.LicenseFlags для отримання інформації про ліцензійні обмеження шрифтів (прапор fsType з таблиці OS/2) у зручній формі.

 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      }
Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.