在java中操作字体

字体 在文档和网页中的文本呈现中起着重要作用。有各种字体系列可供您使用花哨的字符以使您的文本更具吸引力。由于 Aspose 处理文件格式自动化,我们推出了专用的字体操作 API 来处理字体文件格式。在本文中,您将熟悉我们的 Java 字体 API,并了解如何在您的 Java 应用程序中使用 CFF、TrueType、OpenType 和 Type1 字体。

Java 字体操作 API

Aspose.Font for Java 是字体操作 API,允许您加载、保存和操作流行的字体,包括 CFFTrueTypeType1 EOTOpenType。此外,API 支持检索字体指标以及使用支持的字体类型呈现文本。您可以使用以下配置 下载 API 或将其安装在基于 Maven 的应用程序中。

<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>20.10</version>
</dependency>

使用 Java 加载 CFF、TrueType 和 Type1 字体

您可以从 Java 程序中的存储中的文件轻松加载字体。加载字体后,您可以根据需要执行进一步的操作。以下是使用 Aspose.Font for Java 加载字体的步骤。

  • 使用 FontDefinition 类通过指定字体类型(如 TrueType、Type1 等)来加载字体。
  • 使用 CffFontTtfFontType1Font 类分别从 FontDefinition 对象访问 CFF、TrueType 和 Type1 字体。

使用 Java 加载 CFF 字体

这是您可以使用 Java 从文件中加载 CFF 字体的方法。

// 如需完整的示例和数据文件,请访问 https://github.com/aspose-font/Aspose.Font-for-Java
String fileName = Utils.getDataDir() + "OpenSans-Regular.cff"; //Font file name with full path

      FontDefinition fd = new FontDefinition(FontType.CFF, new FontFileDefinition("cff", new FileSystemStreamSource(fileName)));
      CffFont ttfFont = (CffFont) Font.open(fd);
      
      System.out.println("Font has been loaded");

使用 Java 加载 TrueType 字体

以下 Java 代码示例加载 TrueType 字体。

// 如需完整的示例和数据文件,请访问 https://github.com/aspose-font/Aspose.Font-for-Java
String fileName = Utils.getDataDir() + "Montserrat-Regular.ttf"; //Font file name with full path

      FontDefinition fd = new FontDefinition(FontType.TTF, new FontFileDefinition("ttf", new FileSystemStreamSource(fileName)));
      TtfFont font = (TtfFont) Font.open(fd);        

使用 Java 加载 Type1 字体

以下代码示例显示了如何使用 Java 加载 Type1 字体。

// 如需完整的示例和数据文件,请访问 https://github.com/aspose-font/Aspose.Font-for-Java
String fileName = Utils.getDataDir() + "courier.pfb"; //Font file name with full path

FontDefinition fd = new FontDefinition(FontType.Type1, new FontFileDefinition("pfb", new FileSystemStreamSource(fileName)));
      Type1Font font = (Type1Font) Font.open(fd);

使用 Java 从 TrueType 或 Type1 字体中提取字体度量

字体文件还包含用于指定行距、下标和上标位置、对齐方式等的字体信息。Aspose.Font for Java 还允许您提取字体度量信息,包括 Ascender、Descender、TypoAscender、TypoDescender , 和单位 PerEm。以下是执行此操作的步骤。

  • 使用 FontDefinition 类加载 TrueType 或 Type1 字体。
  • 根据字体类型使用 TtfFontType1Font 类访问字体。
  • 提取字体的度量信息。

使用 Java 从 TrueType 字体获取字体度量

// 如需完整的示例和数据文件,请访问 https://github.com/aspose-font/Aspose.Font-for-Java
String fileName = Utils.getDataDir() + "Montserrat-Regular.ttf"; //Font file name with full path

      FontDefinition fd = new FontDefinition(FontType.TTF, new FontFileDefinition("ttf", new FileSystemStreamSource(fileName)));
      TtfFont font = (TtfFont) Font.open(fd);

      String name = font.getFontName();
      System.out.println("Font name: " + name);
      System.out.println("Glyph count: " + font.getNumGlyphs());
      String metrics = MessageFormat.format(
          "Font metrics: ascender - {0}, descender - {1}, typo ascender = {2}, typo descender = {3}, UnitsPerEm = {4}",
          font.getMetrics().getAscender(), font.getMetrics().getDescender(),
          font.getMetrics().getTypoAscender(), font.getMetrics().getTypoDescender(), font.getMetrics().getUnitsPerEM());

      System.out.println(metrics);
      
    //从字体中获取 cmap unicode 编码表作为对象 TtfCMapFormatBaseTable 以访问有关符号“A”的字体字形的信息。
      //还要检查字体是否有对象 TtfGlyfTable(表'glyf')来访问字形。
      TtfCMapFormatBaseTable cmapTable = null;
      if (font.getTtfTables().getCMapTable() != null)
      {
          cmapTable = font.getTtfTables().getCMapTable().findUnicodeTable();
      }
      if (cmapTable != null && font.getTtfTables().getGlyfTable() != null)
      {
      	System.out.println("Font cmap unicode table: PlatformID = " + cmapTable.getPlatformId() +
      			", PlatformSpecificID = " + cmapTable.getPlatformSpecificId());

          //“A”符号的代码
          char unicode = (char)65;

          //“A”的字形索引
          long glIndex = cmapTable.getGlyphIndex(unicode);

          if (glIndex != 0)
          {
              //“A”字形
              Glyph glyph = font.getGlyphById(glIndex);
              if (glyph != null)
              {
                  //打印字形指标
              	System.out.println("Glyph metrics for 'A' symbol:");
                  String bbox = MessageFormat.format(
                      "Glyph BBox: Xmin = {0}, Xmax = {1}" + ", Ymin = {2}, Ymax = {3}",
                      glyph.getGlyphBBox().getXMin(), glyph.getGlyphBBox().getXMax(),
                      glyph.getGlyphBBox().getYMin(), glyph.getGlyphBBox().getYMax());
                  System.out.println(bbox);
                  System.out.println("Width:" + font.getMetrics().getGlyphWidth(new GlyphUInt32Id(glIndex)));
              }
          }
      }

使用 Java 从 Type1 字体中提取字体度量

// 如需完整的示例和数据文件,请访问 https://github.com/aspose-font/Aspose.Font-for-Java
String fileName = Utils.getDataDir() + "courier.pfb"; //Font file name with full path

FontDefinition fd = new FontDefinition(FontType.Type1, new FontFileDefinition("pfb", new FileSystemStreamSource(fileName)));
      Type1Font font = (Type1Font) Font.open(fd);

      String name = font.getFontName();
      System.out.println("Font name: " + name);
      System.out.println("Glyph count: " + font.getNumGlyphs());
      String metrics = MessageFormat.format(
          "Font metrics: ascender - {0}, descender - {1}, typo ascender = {2}, typo descender = {3}, UnitsPerEm = {4}",
          font.getMetrics().getAscender(), font.getMetrics().getDescender(),
          font.getMetrics().getTypoAscender(), font.getMetrics().getTypoDescender(), font.getMetrics().getUnitsPerEM());

      System.out.println(metrics);

结论

在本文中,您学习了如何使用 Java 以编程方式处理 CFF、TrueType 和 Type1 字体。此外,您还了解了如何访问特定字体的字体度量信息。您可以使用 文档源代码示例 探索有关 Java 字体操作 API 的更多信息。