MENU

Java-iText-PDF库-使用中文字体

January 5, 2016 • 其他

问题描述

在安卓开发时使用iText库生成PDF文档,发现不能生成的PDF无法显示中文,如图

Screen Shot 2016-01-05 at 9.28.03 PM.png

解决方案

查阅 itextpdf文档 后,发现com.itextpdf.text.fonts只带6种西文字体,谷歌后发现官方提供itext-asian.jar(下载链接)

下载后导入itext-assian.jar放到Android项目的libs目录下,配置properties,然后build project,报错了,报错如下:

“ Error generating final archive: Found duplicate file for APK: com/itextpdf/text/pdf/fonts/cmap_info.txt

Origin 1: X:\XXX\XXX\libs\itext-asian-5.2.0.jar

Origin 2: X:\XXX\XXX\libs\itextpdf-5.2.0.jar ”

在Libraries下有两个JAR都包含com.itextpdf.text.pdf.fonts.cmaps这个包,编译时候,里面都包含cmap_info.txt文件,导致编译冲突。

只需要在用RAR打开itext-asian-5.2.0.jar,然后在根目录删除cmap_info.txt,即可解决冲突。

中文PDF导出-DEMO

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.pdf.PdfAction;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.BaseFont;
//此处省略代码
BaseFont chinese = null; 
    try {
      chinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);  
    } catch (DocumentException e1) {
      // TODO Auto-generated catch block
      e1.printStackTrace();
    } catch (IOException e1) {
      // TODO Auto-generated catch block
      e1.printStackTrace();
    }   

Font chinsefont = new Font(chinese, 10, Font.NORMAL);

Paragraph p = new Paragraph("此处输入中文", chinsefont);

效果如下

Screen Shot 2016-01-05 at 9.27.10 PM.png

Last Modified: May 19, 2022
Comment Lists