首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >itext android印地语pdf创建

itext android印地语pdf创建
EN

Stack Overflow用户
提问于 2017-01-11 22:04:48
回答 1查看 1.9K关注 0票数 2

我使用itextg lib在我的android设备上用印地语创建pdf。(PDF正在用英语完美地创建)。

以下是我的代码:

Gradle-

代码语言:javascript
复制
compile 'com.itextpdf:itextg:5.5.10'

Java代码-

代码语言:javascript
复制
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文件中。

提前感谢

EN

回答 1

Stack Overflow用户

发布于 2017-02-22 17:33:50

首先,将您的FreeSans.ttf文件放入资产生成器中。iText库采用字体文件的文件路径,因此您不能仅将资源路径提供给它,因为您不能直接访问assets文件夹。下面是将字体文件从assets文件夹复制到应用程序本地目录的代码。

代码语言:javascript
复制
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语句

代码语言:javascript
复制
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()可以工作。我在表格单元格中添加了一个短语。你也可以在段落中类似地使用它。我检查过这段代码,它工作正常。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41592989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档