iText中文问题

转载 2011年01月19日 17:33:00

1.前言

  有很多文章对Java的中文问题进行了论述,论坛上的许多问题也与此有关,所以中文问题实在是Java应用中的一个不小的问题。尽管已经有这么多的参考资料,但是由于Java的应用范围实在太广,包含的内容太多,虽然问题的根源往往万变不离其宗,然而很容易乱花渐欲迷人眼,导致各种各样的问题层出不穷。
总的说来,Java的中文问题较多的出现在数据传输的场合,比如数据从A传递到B,将B得到的数据显示出来可能就成了乱码。Java中文问题产生的根源是编码,如果A和B存放字符的编码不同,则乱码就产生了。
下面我就将iText中所遇到的一些中文问题进行一下力所能及的阐述,恐言有所未逮,不能尽善尽美,面面俱到之处,权当抛砖引玉耳。
我将分两个部分进行阐述,一个是application中的中文问题,一个是在JSP中的中文问题。
iText是一个用来生成PDF文件的开源类库,详细情况和用法请参考http: //www.lowagie.com/iText/tutorial/index.html,下载请至http://sourceforge.net/projects/itext。如果有必要的话我会再写一篇iText的简单介绍。
************************************

2.iText在Java Application中的中文问题


1)从“HelloWorld”开始

我们从iText的一个入门程序开始:

该程序在PDF文件中写入HelloWorld,编译并运行该程序,我们可以在同级目录下得到一个名为“Chap0101”的PDF文件,打开这个文件,就可以看到左上角的“HelloWorld”。
这样我们就完成了一个几乎就是最简单的PDF文件的制作,有心的朋友可能就想,如果把HelloWorld替换成中文字符效果如何。好的!

2)用“我们是害虫”替换“HelloWorld”

  我们把document.add(new Paragraph("HelloWorld"));改成document.add(new Paragraph("我们是害虫"));然后编译运行,得到一个PDF文件,但是打开却发现,没有任何字符。添加中文字符失败!PDF文件完全不认这里的中文字符。
  iText添加中文字符,需要设置相应的编码和字体。
  在程序开端添加import com.lowagie.text.pdf.BaseFont;引入所需要的类。
  然后将中文字符做成字符串:String chinese =”我们是害虫”;
  设置字体和编码:BaseFont bfChinese = BaseFont.createFont("STSong-Light",
                    "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
            Font FontChinese = new Font(bfChinese, 12, Font.NORMAL);
加入document:
              Paragraph chunk = new Paragraph(chinese, FontChinese);
              document.add(chunk);
  此时要正确编译,还需要下载一个包,该包包含了中、日、韩文字的一些字体和编码。该包名为iTextAsian.jar,访问http://itext.sourceforge.net/downloads/iTextAsian.jar可以下载。
  下载后加入classpath,则程序可以正确编译运行了。

3)可能存在的意外

  一般来说,按照上述的步骤将中文字符加入到PDF文件中,是没有问题的。为什么这么说呢?这样就不得不说到Java的编译器javac。
  如果我们在命令行中输入javac然后回车,就可以看到屏幕上会输出一些javac的相关参数。其中有一个是encoding。我们一般很少用到这个参数,其实这个参数对于java的跨平台非常重要。如果在编译时不指定这个参数,则系统默认:在中文平台上为gb2312,英文平台上为ISO8859_1。编译器就是根据这个参数来读取java文件的,然后把用utf-8形式编译成class文件。
  想象一下,如果此时所用为英文操作系统,则在不指定encoding参数的情况下,javac以ISO8859_1为编码读取java文件,则中文字符串必定不能顺利读出,于是在PDF中出现乱码!!
  我们可以将上面可以正确生成中文的java文件重新编译和执行,指定encoding参数为ISO8859_1:javac ?Cencoding ISO8859_1 ……打开生成的PDF文件,你可以看到奇形怪状的乱码。
  我们一般用的都是中文平台,所以上述“凑巧”不会碰到,但是以后如果真遇上了这样的场合,只要指定encoding为相应的编码就可以了。
  还有一种方法就是将字符串放在文本文件中,用相应的编码保存,然后在程序中利用流读进来。

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Itext设置导出word文件的字体

首先,要导入Itext的三个jar包:iText-2.1.7.jar,itext-rtf-2.1.7.jar,iTextAsian.jar; 其次,Itext里面设置导出word文件的字体,用RtfF...

IText简介及示例

一、iText简介    iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、H...

iText导出PDF经典实现

上篇文章我们借助POI导出了EXCEL格式的文件,这次我们换另一种格式PDF,那么,用什么开源组件呢?呵呵,听说iText不错,我们就用iText吧。 首先我们来了解下iText: 简单地说,iTex...
  • lenotang
  • lenotang
  • 2008年08月24日 14:58
  • 39785

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

iText系列(一) Itext简单介绍

iTextAsian.jar (亚洲语言包,可以使用中文) 需要添加到工程中 使用时需要在系统的环境变量Path中加入iText的路劲,在程序中就可以使用了 用iText生成PDF文档需要5个步...
  • jarniyy
  • jarniyy
  • 2016年06月08日 14:17
  • 1610

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

iText学习(一)

一、使用iText五步创建pdf文档    在项目中导入iText5.0.6.jar

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iText中文问题
举报原因:
原因补充:

(最多只允许输入30个字)