【问题标题】:How to create iText BaseFont based on InputStream如何基于 InputStream 创建 iText BaseFont
【发布时间】:2025-12-31 15:30:12
【问题描述】:

我在 Web 应用程序中有一个字体文件“arial.ttf”,我只能以InputStream 获取其内容。

InputStream inputFont = getResourceAsStream("/resources/arial.ttf");

如何根据InputStream 创建iText BaseFontcreateFont 方法不接受它。

BaseFont bf = BaseFont.createFont(inputFont, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);

createFont(InputStream,String,boolean) 不能调用 createFont(java.lang.String,java.lang.String,boolean) 在 BaseFont 中。

【问题讨论】:

  • 什么是BaseFont?它不在普通的JDK中。
  • @aryn.galadar 它在 itext 中。 99maas:你不能包括那些信息吗?
  • BaseFont 没有接受 InputStream 的 createFont 方法。
  • 如果字体在文件系统上不可用,您需要将字体文件读入字节数组并使用 BaseFont.createFont(String, String, boolean, boolean, byte[ ], byte[]) 构造函数。有关更多信息,请参阅 iText javadoc。

标签: java fonts itext inputstream


【解决方案1】:

尝试以下方法:

byte[] bytes = IOUtils.toByteArray(Thread.currentThread().getContextClassLoader()
        .getResourceAsStream("/resources/arial.ttf"));
BaseFont.createFont("arial.ttf", BaseFont.IDENTITY_Harial.ttf, BaseFont.EMBEDDED, true, bytes, null);

您必须在字体名称中指定 .ttf 来告诉方法它应该将其解释为 ttf 格式。

【讨论】: