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)

可以请让我知道如何做到这一点。下面我附上了我的代码的截图。

整数字体 = R.font.notoserifdevanagaribold;

4

1 回答 1

2

正如安德烈在评论中正确指出的那样,您应该使用 AndroidAssetManager来获取资源。最初的例外只是因为文件访问与 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>
于 2020-01-05T19:52:03.307 回答