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

问题描述 投票:0回答:1

我正在使用不同的语言在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)

可以让我知道该怎么做。下面我附上了我的代码的屏幕截图。

[int FONT = R.font.notoserifdevanagaribold;

android itext itext7 android-pdf-api
1个回答
0
投票

正如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>
© www.soinside.com 2019 - 2024. All rights reserved.