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

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

步骤如下:

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

2、创建字体:

[java]  view plain  copy
  1. // 使用微软雅黑字体显示中文  
  2. String yaHeiFontName = getResources().getString(R.raw.msyhl);  
  3. yaHeiFontName += ",1";  
  4. Font yaHeiFont = new Font(BaseFont.createFont(yaHeiFontName, BaseFont.IDENTITY_H, BaseFont.EMBEDDED));//中文简体  

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


简单实例:

[java]  view plain  copy
  1. public void createPDF(String path) {  
  2.     try {  
  3.         Rectangle rectPageSize = new Rectangle(PageSize.A4);// A4纸张  
  4.         Document document = new Document(rectPageSize, 40404040);// 上、下、左、右间距  
  5.           
  6.         OutputStream outputStream = new FileOutputStream(new File(path));  
  7.       
  8.         PdfWriter.getInstance(document, outputStream);  
  9.         document.open();  
  10.           
  11.         // 字体  
  12.         Font font = new Font();  
  13.             font.setFamily("STSongStd-Light");  
  14.             //font.setFamily("Droid Sans");  
  15.             font.setColor(BaseColor.BLUE);// 颜色  
  16.             font.setSize(40);  
  17.           
  18.             Paragraph content = new Paragraph("PDF", font);  
  19.             content.setAlignment(Paragraph.ALIGN_MIDDLE);  
  20.             document.add(content);  
  21.           
  22.         // 使用微软雅黑字体显示中文  
  23.         String yaHeiFontName = getResources().getString(R.raw.msyhl);  
  24.         yaHeiFontName += ",1";  
  25.         Font yaHeiFont = new Font(BaseFont.createFont(yaHeiFontName, BaseFont.IDENTITY_H, BaseFont.EMBEDDED));//中文简体  
  26.           
  27.             // 添加一行包含中文的信息到PDF测试  
  28.             String info = "默认的iText字体设置不支持中文字体,需要下载远东字体包iTextAsian.jar,否则不能往PDF文档中输出中文字体。\n iText的安装非常方便,在http://www.lowagie.com/iText/download.html - download 网站上下载iText.jar文件后,只需要在系统的CLASSPATH中加入iText.jar的路径,在程序中就可以使用iText类库了。\n 本地化测试包括繁体\n本地化測試包括繁體";  
  29.             Paragraph content1=null;  
  30.             if (LocalizationHelper.hasChinese(info)) {// 如果含有简体中文  
  31.                 content1 = new Paragraph(info, yaHeiFont);// 使用微软雅黑字体  
  32.     }  
  33.     else {  
  34.         content1 = new Paragraph(info);  
  35.     }  
  36.   
  37.     content1.setAlignment(Paragraph.ALIGN_MIDDLE);  
  38.     document.add(content1);  
  39.   
  40.     for (int i=0; i<100; i++) {// 随意加一些内容  
  41.         document.add(new Paragraph("Hello World, iText"));  
  42.             document.add(new Paragraph(new Date().toString()));  
  43.         }  
  44.         document.close();  
  45.         outputStream.close();  
  46.     } catch (Exception e) {  
  47.         e.printStackTrace();  
  48.     }  
  49. }  
  50.   
  51. private String readPDF(String path)  
  52. {  
  53.     //byte[] contentBytes;  
  54.     //String byteToStr;  
  55.     String content="";  
  56.     int pageNum=0;  
  57.       
  58.     try {  
  59.     PdfReader reader = new PdfReader(path);  
  60.       
  61.     pageNum = reader.getNumberOfPages();//获得页数  
  62.     for (int i=1; i// 只能从第1页开始读  
  63.         //contentBytes = reader.getPageContent(i);  
  64.         //byteToStr = new String(contentBytes, "UTF-8");// 转码有问题  
  65.         content += PdfTextExtractor.getTextFromPage(reader, i);  
  66.     }  
  67.           
  68.     } catch (IOException e) {  
  69.         // TODO Auto-generated catch block  
  70.         e.printStackTrace();  
  71.     }  
  72.       
  73.     return content;  
  74. }  

你可能感兴趣的:(Java)