iTextPdf最简单最彻底解决中文显示

时间:2025-04-01 08:51:34

不需要轻松解决iTextpdf显示中文,本文使用itext-5.5.5,下载到是一个.zip文档,解压后把itextpdf-5.5.复制到到工程->libs中即可使用。

步骤如下:

1、在windows系统中搜索"*.ttc"(本例使用微软雅黑,使用),找一个放到Android工程->res->raw文件夹中,如果没有raw文件夹新建一个。

2、创建字体:

// 使用微软雅黑字体显示中文
String yaHeiFontName = getResources().getString();
yaHeiFontName += ",1";
Font yaHeiFont = new Font((yaHeiFontName, BaseFont.IDENTITY_H, ));//中文简体

注意:一定要在yaHeiFontName后面加",1"


简单实例:

public void createPDF(String path) {
	try {
		Rectangle rectPageSize = new Rectangle(PageSize.A4);// A4纸张
		Document document = new Document(rectPageSize, 40, 40, 40, 40);// 上、下、左、右间距
		
		OutputStream outputStream = new FileOutputStream(new File(path));
	
		(document, outputStream);
		();
		
		// 字体
		Font font = new Font();
	        ("STSongStd-Light");
	        //("Droid Sans");
	        ();// 颜色
	        (40);
	    
	        Paragraph content = new Paragraph("PDF", font);
	        (Paragraph.ALIGN_MIDDLE);
	        (content);
	    
		// 使用微软雅黑字体显示中文
		String yaHeiFontName = getResources().getString();
		yaHeiFontName += ",1";
		Font yaHeiFont = new Font((yaHeiFontName, BaseFont.IDENTITY_H, ));//中文简体
	    
	        // 添加一行包含中文的信息到PDF测试
	        String info = "默认的iText字体设置不支持中文字体,需要下载远东字体包,否则不能往PDF文档中输出中文字体。\n iText的安装非常方便,在/iText/ - download 网站上下载文件后,只需要在系统的CLASSPATH中加入的路径,在程序中就可以使用iText类库了。\n 本地化测试包括繁体\n本地化測試包括繁體";
	        Paragraph content1=null;
	        if ((info)) {// 如果含有简体中文
	    	    content1 = new Paragraph(info, yaHeiFont);// 使用微软雅黑字体
    }
    else {
    	content1 = new Paragraph(info);
    }

    (Paragraph.ALIGN_MIDDLE);
    (content1);

	for (int i=0; i<100; i++) {// 随意加一些内容
		(new Paragraph("Hello World, iText"));
			(new Paragraph(new Date().toString()));
		}
		();
		();
	} catch (Exception e) {
		();
	}
}

private String readPDF(String path)
{
	//byte[] contentBytes;
	//String byteToStr;
	String content="";
	int pageNum=0;
	
	try {
	PdfReader reader = new PdfReader(path);
	
	pageNum = ();//获得页数
	for (int i=1; i<pageNum; i++) {// 只能从第1页开始读
		//contentBytes = (i);
		//byteToStr = new String(contentBytes, "UTF-8");// 转码有问题
		content += (reader, i);
	}
		
	} catch (IOException e) {
		// TODO Auto-generated catch block
		();
	}
	
	return content;
}