【发布时间】: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 字符,这很难相信。 -
你能解释一下我没有正确理解的位吗。应该有什么字符,这样我的代码才能运行。