我使用itextg lib在我的android设备上用印地语创建pdf。(PDF正在用英语完美地创建)。
以下是我的代码:
Gradle-
compile 'com.itextpdf:itextg:5.5.10'
Java代码-
final String FONT = "file:///android_asset/FreeSans.ttf";
Font f = FontFactory.getFont(FONT, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
String outputString= "\u0915\u093e\u0930 \u092a\u093e\u0930\u094d\u0915\u093f\u0902\u0917";
document.add(new Paragraph(outputString,f));
输出字符串取自此处的itext文档- http://developers.itextpdf.com/examples/font-examples-itext5/language-specific-examples
在pdf上无法打印印地语文本。因此,outputString中的代码行不会打印到由此创建的pdf文件中。
提前感谢
发布于 2017-02-22 17:33:50
首先,将您的FreeSans.ttf文件放入资产生成器中。iText库采用字体文件的文件路径,因此您不能仅将资源路径提供给它,因为您不能直接访问assets文件夹。下面是将字体文件从assets文件夹复制到应用程序本地目录的代码。
public static final String HINDI_FONT = "FreeSans.ttf";
try {
File file = new File(getFilesDir(), HINDI_FONT);
if (file.length() == 0) {
InputStream fs = getAssets().open(HINDI_FONT);
FileOutputStream os = new FileOutputStream(file);
int i;
while ((i = fs.read()) != -1) {
os.write(i);
}
os.flush();
os.close();
fs.close();
}
} catch (IOException e) {
e.printStackTrace();
}
在单独的线程中执行try块代码,不要在主线程中执行此操作。if语句确保这种情况只发生一次。请将流关闭语句写在finally块中,而不是如上所示的try块中。
接下来是使用字体的itext语句
Font f = FontFactory.getFont(getFilesDir() + "/" + HINDI_FONT, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
PdfPCell eCell = new PdfPCell(new Phrase(entry, f));
eCell.setPadding(5);
table.addCell(eCell);
在这里,可变条目是您的印地语文本,代码是在活动中编写的,因此getFilesDir()可以工作。我在表格单元格中添加了一个短语。你也可以在段落中类似地使用它。我检查过这段代码,它工作正常。
https://stackoverflow.com/questions/41592989
复制相似问题