中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Java > 第三方类库
iText中的中文问题(一)iText在Java Application中的中文问题
作者:未知 时间:2005-07-24 21:26 出处:JR 责编:chinaitpower
              摘要:iText中的中文问题(一)iText在Java Application中的中文问题
1.前言
2.从“HelloWorld”开始
3.用“我们是害虫”替换“HelloWorld”
4.可能存在的意外

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的一个入门程序开始:
  1. import java.io.FileOutputStream;
  2. import java.io.IOException;
  3. import com.lowagie.text.*;
  4. import com.lowagie.text.pdf.PdfWriter;
  5. public class Chap0101 {
  6.     public static void main(String[] args) {
  7.         System.out.println("Chapter 1 example 1: Hello World");
  8.         // step 1: creation of a document-object
  9.         Document document = new Document();
  10.         try {
  11.             // step 2:
  12.             // we create a writer that listens to the document
  13.             // and directs a PDF-stream to a file
  14.             PdfWriter.getInstance(document, new FileOutputStream               ("Chap0101.pdf"));
  15.             // step 3: we open the document
  16.             document.open();
  17.             // step 4: we add a paragraph to the document
  18.             document.add(new Paragraph("Hello World"));
  19.        }
  20.         catch(DocumentException de) {
  21.             System.err.println(de.getMessage());
  22.         }
  23.         catch(IOException ioe) {
  24.             System.err.println(ioe.getMessage());
  25.         }
  26.         // step 5: we close the document
  27.         document.close();
  28.     }
  29. }

    该程序在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为相应的编码就可以了。
    还有一种方法就是将字符串放在文本文件中,用相应的编码保存,然后在程序中利用流读进来。
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有