【问题标题】:No glyph for U+000A in font NotoSerifDevanagari-BoldNotoSerifDevanagari-Bold 字体中没有 U+000A 的字形
【发布时间】:2020-01-06 10:30:53
【问题描述】:

我正在尝试使用 pdfbox 创建 pdf。我将 EditText 数据作为 html 存储在 Sqlite DB 中。

现在我正在从 sqliteDB 检索数据并创建它的 pdf。这个数据有马拉地语和英语。

我正在使用 NotoSerifDevanagari-Bold 字体并将其添加到 assets 文件夹中。从那里我正在将此字体访问到代码中。但我收到错误。请在下面找到我的代码和错误。

AssetManager assetManager;
PDFBoxResourceLoader.init(getApplicationContext());
File FilePath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
assetManager = getAssets();

PDDocument document = new PDDocument();
PDPage page = new PDPage();
document.addPage(page);

PDFont font = PDType0Font.load(document, assetManager.open("notoserifdevanagaribold.ttf"));
PDPageContentStream contentStream;
// Define a content stream for adding to the PDF
contentStream = new PDPageContentStream(document, page);

Cursor data = mDatabaseHelper.getDataByDeckname(deckname);
StringBuilder builder=new StringBuilder();
while (data.moveToNext()) {
    String front_page_desc = data.getString(3);
    String back_page_desc =  data.getString(4);

    contentStream.beginText();
    contentStream.setNonStrokingColor(15, 38, 192);
    contentStream.setFont(font, 12);
    contentStream.newLineAtOffset(100, 700);
    contentStream.showText(Html.fromHtml(front_page_desc).toString());
    contentStream.endText();

    contentStream.beginText();
    contentStream.setNonStrokingColor(15, 38, 192);
    contentStream.setFont(font, 12);
    contentStream.newLineAtOffset(100, 700);
    contentStream.showText(Html.fromHtml(back_page_desc).toString());
    contentStream.endText();
}

contentStream.close();

String path = FilePath.getAbsolutePath() + "/temp.pdf";
document.save(path);
document.close();

错误

W/System.err: java.lang.IllegalArgumentException: No glyph for U+000A in font NotoSerifDevanagari-Bold

我为上述错误尝试了很多示例,但我无法解决问题。我在 contentStream.showText(Html.fromHtml(front_page_desc).toString()); 行上遇到此错误。有人可以在上面帮助我吗?

【问题讨论】:

  • 如果我用 contentStream 替换 contentStream.showText(Html.fromHtml(front_page_desc).toString()); .showText(" TEsting content page back"); 然后我也得到同样的错误。
  • 换行符不是字形。
  • 我已删除 contentStream.newLineAtOffset(100, 700); 但我也遇到了同样的错误。
  • 'contentStream.showText(" TEsting content page back"); 然后我也遇到了同样的错误。' - 因为该字符串中似乎没有 U+000A 字符,这很难相信。
  • 你能解释一下我没有正确理解的位吗。应该有什么字符,这样我的代码才能运行。

标签: java android pdfbox


【解决方案1】:

根据this link,U+000A 是换行符的 Unicode。如果您尝试渲染它,任何字体都会失败。 为了避免此类错误,您可以尝试以下操作:

 String[] lines = text.split("\\n");
        for (String line : lines) {
            if (!line.isBlank()) {
                contentStream.showText(line);
               // add new line here if you want to
            }
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多