如何从 android 中的字体文件夹中获取 ttf 字体文件

How to get tff font file from Font folder in android

我正在 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)

有人可以告诉我该怎么做吗?下面我附上了我的代码截图。

字体 = R.font.notoserifdevanagaribold;

正如 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>