字体 在文档和网页中的文本呈现中起着重要作用。有各种字体系列可供您使用花哨的字符以使您的文本更具吸引力。由于 Aspose 处理文件格式自动化,我们推出了专用的字体操作 API 来处理字体文件格式。在本文中,您将熟悉我们的 Java 字体 API,并了解如何在您的 Java 应用程序中使用 CFF、TrueType、OpenType 和 Type1 字体。
Java 字体操作 API
Aspose.Font for Java 是字体操作 API,允许您加载、保存和操作流行的字体,包括 CFF、TrueType、Type1、 EOT 和 OpenType。此外,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 等)来加载字体。
- 使用 CffFont、TtfFont 或 Type1Font 类分别从 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 字体。
- 根据字体类型使用 TtfFont 或 Type1Font 类访问字体。
- 提取字体的度量信息。
使用 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 的更多信息。