【问题标题】:How to get tff font file from Font folder in android如何从android中的Font文件夹中获取ttf字体文件
【发布时间】:2020-01-03 07:30:36
【问题描述】:

我在 android 中创建一个 pdf 文件,其中有不同的语言。我在 res 目录下的字体文件夹中有 notoserifdevanagaribold.tff,但我无法在字符串变量中访问它。我正在使用 itext7 创建一个 pdf 文件。在 itext7 PdfFontFactory.createFont(String FONT, PdfEncodings.IDENTITY_H); 需要字符串值作为字体路径。如果我将 /font/notoserifdevanagaribold 放入字符串变量中,我将遇到错误。

W/System.err: com.itextpdf.io.IOException: Font file font/notoserifdevanagaribold.ttf not found.
        at com.itextpdf.io.font.FontProgram.checkFilePath(FontProgram.java:284)
        at com.itextpdf.io.font.TrueTypeFont.<init>(TrueTypeFont.java:91)
        at com.itextpdf.io.font.FontProgramFactory.createFont(FontProgramFactory.java:206)
W/System.err:     at com.itextpdf.io.font.FontProgramFactory.createFont(FontProgramFactory.java:115)

请让我知道该怎么做。下面我附上了我的代码截图。

FONT = R.font.notoserifdevanagaribold;

【问题讨论】:

  • public static PdfFont createFont(String fontProgram, String encoding)
  • 我必须像这样传递文件名PdfFont f = PdfFontFactory.createFont("notoserifdevanagaribold.ttf", PdfEncodings.IDENTITY_H);
  • 我收到此错误W/System.err: com.itextpdf.io.IOException: Font file notoserifdevanagaribold.ttf not found
  • (stackoverflow.com/q/19225857/3409734) 我正在尝试使用自定义字体,并且我读过我想将字体放在资产/字体中。。从这篇文章中我猜你需要将你的字体文件夹放在资产文件夹而不是资源文件夹中
  • 我已经从资源文件夹中删除了该字体文件夹,现在我已经在资产文件夹中创建了但我也收到错误W/System.err: com.itextpdf.io.IOException: Font file fonts/notoserifdevanagaribold.ttf not found. 在这里我必须以字符串形式访问字体路径 PdfFont f = PdfFontFactory.createFont("fonts/notoserifdevanagaribold.ttf", PdfEncodings.IDENTITY_H); 在这个方法中

标签: android itext itext7 android-pdf-api


【解决方案1】:

正如 André 在评论中正确指出的那样,您应该使用 Android 的 AssetManager 来获取资源。最初的例外只是因为文件访问与 Android 上的其他系统不同。以下是获取流、将其转换为字节数组并将字节传递给 iText 的方法:

AssetManager am = this.getAssets();
try (InputStream inStream = am.open("notoserifdevanagaribold.ttf")) {
    byte[] fontData = IOUtils.toByteArray(inStream);
    PdfFont font = PdfFontFactory.createFont(fontData, PdfEncodings.IDENTITY_H);
}

这里我使用 Apache Commons IO 库从流中获取字节,您可以通过以下方式将其添加为 Maven 依赖项:

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.6</version>
</dependency>

【讨论】:

  • 谢谢。现在我可以从 assets 文件夹中获取字体了。
猜你喜欢
  • 2013-05-23
  • 1970-01-01
  • 2023-03-27
  • 2019-12-24
  • 1970-01-01
  • 2012-08-06
  • 2014-06-04
  • 2011-01-01
  • 2015-09-16
相关资源
最近更新 更多