Itext 使用入门 之 创建pdf 文档 附中文解决方案

Itext.jar 的版本是 5.0.5

往 c:/test.pdf 文件写入中文

[java]  view plain copy
  1. Document doc = new Document();  
  2.         FileOutputStream out = new FileOutputStream(new File("C:/test.pdf"));  
  3.         PdfWriter.getInstance(doc, out);  
  4.         //文字com/lowagie/text/pdf/fonts/  
  5. //      BaseFont chinese = BaseFont.createFont("STSong-Light",  
  6. //              "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);     
  7.           
  8. //      BaseFont chinese = BaseFont.createFont("C:/windows/fonts/simsun.ttc,1", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);     
  9.         BaseFont chinese = BaseFont.createFont(PdfTest.class.getResource("/") + "/simsun.ttc,1",  
  10.                 BaseFont.IDENTITY_H, BaseFont.EMBEDDED);  
  11.         Font fontChinese = new Font(chinese, 12, Font.NORMAL);     
  12.         Paragraph text = new Paragraph("你好。。。。",fontChinese);  
  13.         doc.open();     // 打开文档  
  14.         doc.add(text);  
  15.         doc.add(text);  
  16.         doc.close();  

 

BaseFont chinese = BaseFont.createFont("STSong-Light",   "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);  

 

若 BaseFont 如此定义 则会报一个

com.itextpdf.text.DocumentException: Font 'STSong-Light' with 'UniGB-UCS2-H' is not recognized.

原因: 以及解决方案: (摘自网上未测试.....)
http://cst.is-programmer.com/posts/18844.html

Font 'STSong-Light' with 'UniGB-UCS2-H' is not recognized

还是不行,继续研究,在网上前辈们说如下原因:

  iText5.x版本以上中的font和encoding文件都是从String RESOURCE_PATH = "com/itextpdf/text/pdf/fonts/"加载的,而老itextasian.jar的包名是com.lowagie.text.pdf.fonts, 包名不一致导致路径错误,。

具体解决方法就是修改包的路径了,详细方法如下:

1.解压iTextAsian.jar
  得到如下目录:
  iTextAsian
     --com
        --lowagie
          --text
            --pdf
              --fonts
                --...(字体属性文件)
2.将解压后的com目录下的包名lowagie更改为itextpdf
3.在命令行转至iTextAsian目录,重新打包为iTextAsian.jar文件
4.打包命令如下:
  jar cvf iTextAsian.jar com/itextpdf/text/pdf/fonts/*
5.执行后,将新的iTextAsian.jar加入classpath路径

运行结果,OK,解决问题。

 

 

 

===========================

 

 

可以使用系统自带的字体

 

[java]  view plain copy
  1. BaseFont chinese = BaseFont.createFont("C:/windows/fonts/simsun.ttc,1", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);     

 

或者 将simsun.ttc复制到 src 目录下面;

 

[java]  view plain copy
  1. BaseFont chinese = BaseFont.createFont(PdfTest.class.getResource("/") + "/simsun.ttc,1",                BaseFont.IDENTITY_H, BaseFont.EMBEDDED);  

 

Itext.jar 的版本是 5.0.5

 

往 c:/test.pdf 文件写入中文

 

[java]  view plain copy
  1. Document doc = new Document();  
  2.         FileOutputStream out = new FileOutputStream(new File("C:/test.pdf"));  
  3.         PdfWriter.getInstance(doc, out);  
  4.         //文字com/lowagie/text/pdf/fonts/  
  5. //      BaseFont chinese = BaseFont.createFont("STSong-Light",  
  6. //              "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);     
  7.           
  8. //      BaseFont chinese = BaseFont.createFont("C:/windows/fonts/simsun.ttc,1", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);     
  9.         BaseFont chinese = BaseFont.createFont(PdfTest.class.getResource("/") + "/simsun.ttc,1",  
  10.                 BaseFont.IDENTITY_H, BaseFont.EMBEDDED);  
  11.         Font fontChinese = new Font(chinese, 12, Font.NORMAL);     
  12.         Paragraph text = new Paragraph("你好。。。。",fontChinese);  
  13.         doc.open();     // 打开文档  
  14.         doc.add(text);  
  15.         doc.add(text);  
  16.         doc.close();  

 

BaseFont chinese = BaseFont.createFont("STSong-Light",   "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);  

 

若 BaseFont 如此定义 则会报一个

 

com.itextpdf.text.DocumentException: Font 'STSong-Light' with 'UniGB-UCS2-H' is not recognized.

 

 

原因: 以及解决方案: (摘自网上未测试.....)
http://cst.is-programmer.com/posts/18844.html

Font 'STSong-Light' with 'UniGB-UCS2-H' is not recognized

还是不行,继续研究,在网上前辈们说如下原因:

  iText5.x版本以上中的font和encoding文件都是从String RESOURCE_PATH = "com/itextpdf/text/pdf/fonts/"加载的,而老itextasian.jar的包名是com.lowagie.text.pdf.fonts, 包名不一致导致路径错误,。

具体解决方法就是修改包的路径了,详细方法如下:

1.解压iTextAsian.jar
  得到如下目录:
  iTextAsian
     --com
        --lowagie
          --text
            --pdf
              --fonts
                --...(字体属性文件)
2.将解压后的com目录下的包名lowagie更改为itextpdf
3.在命令行转至iTextAsian目录,重新打包为iTextAsian.jar文件
4.打包命令如下:
  jar cvf iTextAsian.jar com/itextpdf/text/pdf/fonts/*
5.执行后,将新的iTextAsian.jar加入classpath路径

运行结果,OK,解决问题。

 

 

 

===========================

 

 

可以使用系统自带的字体

 

[java]  view plain copy
  1. BaseFont chinese = BaseFont.createFont("C:/windows/fonts/simsun.ttc,1", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);     

 

或者 将simsun.ttc复制到 src 目录下面;

 

[java]  view plain copy
  1. BaseFont chinese = BaseFont.createFont(PdfTest.class.getResource("/") + "/simsun.ttc,1",                BaseFont.IDENTITY_H, BaseFont.EMBEDDED);  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值