使用 Java 提取 TrueType 和 OpenType 字体许可证限制
在软件应用程序、文档生成引擎或 Web 平台中处理数字字体时,遵守字体许可限制至关重要。字体供应商会将许可和使用规则直接嵌入字体文件中,以定义字体的嵌入、安装或修改方式。使用 Aspose.Font for Java,开发人员可以检查嵌入的 OS/2 表指标,并以编程方式从 TrueType (.ttf) 和 OpenType (.otf) 字体文件中提取许可证限制。
了解字体许可模式
TrueType 和 OpenType 字体规范在字体的 OS/2 表中的 fsType 标志中存储嵌入权限。Aspose.Font for Java 通过 LicenseFlags 类将这些嵌入的许可限制分类为不同的模式:
- 可安装嵌入:字体可以嵌入并永久安装在远程系统上,或供其他用户使用。
- 可编辑嵌入:字体可以嵌入并临时加载到其他系统中。允许进行编辑,包括使用嵌入字体设置新文本的格式,并且可以保存更改。
- 预览和打印嵌入:字体可以嵌入并临时加载到其他系统中,仅用于查看或打印文档。
- 受限许可证嵌入:在事先获得法律所有者明确许可之前,不得以任何方式修改、嵌入或交换字体。
在 Java 中提取 TTF 许可证限制
要使用 Aspose.Font for Java 读取许可证权限:
- 使用
FontFileDefinition和FontDefinition加载字体文件,并指定FontType.TTF. - 从字体的表集合 (
getTtfTables().getOs2Table()) 中获取OS/2表。 - 使用
getLicenseFlags()获取许可证标志。 - 使用
isEditableEmbedding()、isInstallableEmbedding()、isPreviewAndPrintEmbedding()或isRestrictedLicenseEmbedding()等辅助方法评估嵌入权限。
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);
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(MessageFormat.format("Font {0} may be embedded, and may be temporarily loaded on other systems."
+ " In addition, editing is permitted, including ability to format new text"
+ " using the embedded font, and changes may be saved.", font.getFontName()));
}
else if (licenseFlags.isInstallableEmbedding())
{
System.out.println(MessageFormat.format("Font {0} may be embedded, and may be permanently installed"
+ " for use on a remote systems, or for use by other users.", font.getFontName()));
}
else if (licenseFlags.isPreviewAndPrintEmbedding())
{
System.out.println(MessageFormat.format("Font {0} may be embedded, and may be temporarily loaded"
+ " on other systems for purposes of viewing or printing the document.", font.getFontName()));
}
else if (licenseFlags.isRestrictedLicenseEmbedding())
{
System.out.println(MessageFormat.format("Font {0} must not be modified, embedded or exchanged in any manner"
+ " without first obtaining explicit permission of the legal owner.", font.getFontName()));
}
}安装和设置
通过 Maven 将 Aspose.Font for Java 添加到项目中。
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>
常见问题
1. Type1 字体是否支持使用 LicenseFlags 提取许可证限制?
不支持。标准 Type1 字体格式 (.pfb/.pfa) 不包含 OS/2 表。fsType 标志和 OS/2 表结构是 TrueType (.ttf) 和 OpenType (.otf) 字体格式特有的。
2. 如果 licenseFlags.isFSTypeAbsent() 返回 true,这意味着什么?
如果 isFSTypeAbsent() 返回 true(或者 licenseFlags 为 null),则表示字体文件的 OS/2 表中不存在嵌入的许可证限制标志。
3. 如何检查字体是否允许编辑文档内容?
您可以检查 licenseFlags.isEditableEmbedding()。如果值为 true,则表示该字体允许临时加载和编辑,使用户能够使用嵌入的字体设置新文本的格式并保存更改。