`

Itext中文处理(更新版)

阅读更多

Itext中文处理:

在Itext中的中文处理随着Itext的版本变化,采取的方法也在变化。

首先我来演示一下利用Itext-2.1.3.jar与iTextAsian.jar两个包来解决中文问题。

附件中有所需要的包:

示例代码:

package com.lwf.pdf.test;
import java.awt.Color;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Font;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfWriter;


public class HelloWord {
	
	public static void main(String[] args) {

		try {
			Document doc = new Document();
			PdfWriter.getInstance(doc, new FileOutputStream("c:\\good.pdf"));
			doc.open();
			BaseFont bfChinese = BaseFont.createFont( "STSongStd-Light" ,  "UniGB-UCS2-H" ,  false );
			Font fontChinese =  new  Font(bfChinese  ,  12 , Font.NORMAL, Color.GREEN);
			Paragraph pf = new Paragraph("eee");
			pf.add(new Paragraph("我们的家好大的家",fontChinese));
			pf.add(new Paragraph("sfsfsf"));
			doc.add(pf);
			
			doc.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (DocumentException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

 

上面代码测试环境是:JDK1.4编译环境也为1.4,当然在以后的JDK版本中测试也是没问题的。

 

好了,现在最新的Itext版本为Itext 5.0,附件中iText.jar即为该版本。以下为Itext5.0的修改:

http://itextpdf.com/history.php

关注两句话:

From now on, the iText.jar is compiled using Java 5 (instead of with the JDK 1.4).

The package names have changed from com.lowagie to com.itextpdf.

上面两句话第一说明itext5.0用于JDK1.5以及之后的版本。第二句更改了包名。

好了,如果我现在的程序使用iText.jar+iTextAsian.jar运行下面程序:

package com.lwf.pdf.test;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfWriter;


public class HelloWord {
	
	public static void main(String[] args) {

		try {
			Document doc = new Document();
			PdfWriter.getInstance(doc, new FileOutputStream("c:\\good.pdf"));
			doc.open();
			BaseFont bfChinese = BaseFont.createFont( "STSongStd-Light" ,  "UniGB-UCS2-H" ,  false );
			//Font fontChinese =  new  Font(bfChinese,12,Font.NORMAL,Color.GREEN);
			Font fontChinese =  new  Font(bfChinese  ,  12 , Font.NORMAL, BaseColor.GREEN);   

			Paragraph pf = new Paragraph("eee");
			pf.add(new Paragraph("我们的家好大的家",fontChinese));
			pf.add(new Paragraph("sfsfsf"));
			doc.add(pf);
			
			doc.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (DocumentException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

 会报以下错误:

com.itextpdf.text.DocumentException: No message found for font.1.with.2.is.not.recognized
	at com.itextpdf.text.pdf.BaseFont.createFont(Unknown Source)
	at com.itextpdf.text.pdf.BaseFont.createFont(Unknown Source)
	at com.itextpdf.text.pdf.BaseFont.createFont(Unknown Source)
	at com.lwf.pdf.test.HelloWord.main(HelloWord.java:24)

 

这是为什么呢?

不难发现上面两个测试只是更改了iText包。而iTextAsian.jar只是包含了亚洲国家的文字信息。打开iTextAsian.jar发现它采用了与原来iText-2.1.3.jar一样的包名:com.lowagie.text.Font而现在的iText5.0包名已经改为了com.itextpdf.text.Font,显然我们更一下包名就可以解决问题。在winrar中把对应包名重命名加进来即可。我把改好的jar放在附件的更改.rar中。好了,那么现在使用iText.jar+更改.rar中的iTextAsian.jar测试就不会报错了。

 

其实这个问题也有文章谈到,如:http://xiaolongfeixiang.iteye.com/blog/577816

 

我在itext官方网站上,查iTextAsian,发现这样的文章http://www.itextpdf.com/examples/index.php?page=example&id=214

显然,它是一个示例。那么同样使用iText5.0+更改后的iTextAsian包,下面有另一种实现方法:

/*
 * This class is part of the book "iText in Action - 2nd Edition"
 * written by Bruno Lowagie (ISBN: 9781935182610)
 * For more info, go to: http://itextpdf.com/examples/
 * This example only works with the AGPL version of iText.
 */



import java.io.FileOutputStream;
import java.io.IOException;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.FontFactory;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.FontSelector;
import com.itextpdf.text.pdf.PdfWriter;

/**
 * This example was written by Bruno Lowagie. It is part of the book 'iText in
 * Action' by Manning Publications. 
 * ISBN: 1932394796
 * http://www.1t3xt.com/docs/book.php 
 * http://www.manning.com/lowagie/
 */

public class FontSelectionExample {

    /** The resulting PDF file. */
    public static final String RESULT
        = "results/part3/chapter11/font_selection.pdf";
    /** Some text */
    public static final String TEXT
        = "These are the protagonists in 'Hero', a movie by Zhang Yimou:\n"
			+ "\u7121\u540d (Nameless), \u6b98\u528d (Broken Sword), "
			+ "\u98db\u96ea (Flying Snow), \u5982\u6708 (Moon), "
			+ "\u79e6\u738b (the King), and \u9577\u7a7a (Sky)." +
					"中华人民共和国万岁劳动人民是光荣的,岁月峥嵘,百舸争流" ;

    /**
     * Creates a PDF document.
     * @param filename the path to the new PDF document
     * @throws DocumentException 
     * @throws IOException 
     * @throws    DocumentException 
     * @throws    IOException
     */
	public void createPdf(String filename) throws IOException, DocumentException {
		// step 1
		Document document = new Document(PageSize.A4);
		// step 2
		PdfWriter.getInstance(document, new FileOutputStream(filename));
		// step 3: we open the document
		document.open();
		// step 4:
		FontSelector selector = new FontSelector();
		selector.addFont(FontFactory.getFont(FontFactory.TIMES_ROMAN, 12));
//		selector.addFont(FontFactory.getFont("MSung-Light",
//			"UniCNS-UCS2-H", BaseFont.NOT_EMBEDDED));
//		
		selector.addFont(FontFactory.getFont("STSongStd-Light",
				"UniGB-UCS2-H", BaseFont.NOT_EMBEDDED));
			
		
		Phrase ph = selector.process(TEXT);
		document.add(new Paragraph(ph));
		// step 5: we close the document
		document.close();
	}

    /**
     * Main method.
     *
     * @param    args    no arguments needed
     * @throws DocumentException 
     * @throws IOException
     */
	public static void main(String[] args) throws IOException, DocumentException {
		new FontSelectionExample().createPdf("c:/good.pdf");
	}
}

 呵呵,我只是把示例代码改了一下,那么在C盘就会生成一个名为good.pdf的文件.内容在附件里.

 

注:原包iTextAsian.jar的下载路径为:http://itextpdf.sourceforge.net/

分享到:
评论
9 楼 九尾狐的yi巴 2018-04-17  
很好 感谢!
8 楼 wlt1220 2013-07-05  
stoneeye 写道
那你们有没有遇到过这种问题:
现在我加了那个支持中文的jar 但是英文又显示不正常了,一个连贯的单词中间会有空格

求解答?

使用itext的fontselecter,依次添加默认的英文字体和中文字体,优先用英文字体来解析应该就可以了。
7 楼 wo17796452 2012-11-13  
中文显示不完整。。。。。。。。表示没有真正解决问题
6 楼 禀圣含华 2012-11-07  
楼主现在用5.3.4中午不能这样处理,怎么的弄啊
5 楼 yantianxun 2012-07-17  
感谢楼主,你是有科学精神的,有钱途!
4 楼 happenZheng 2011-03-27  
你好,我想问下,为什么现在的iText版本里,没有对表头啊,页面啊,这些的支持。感觉很奇怪,IDE的智能提示没有提示相应的方法。
3 楼 stoneeye 2010-05-17  
那你们有没有遇到过这种问题:
现在我加了那个支持中文的jar 但是英文又显示不正常了,一个连贯的单词中间会有空格

求解答?
2 楼 stoneeye 2010-05-17  
那你们有没有遇到过这种问题:
现在我加了那个支持中文的jar 但是英文又显示不支持了,一个连贯的单词中间会有空格

求解答?
1 楼 zhxing 2010-03-04  
luo338244 写道
我也是遇到一样的问题,这是为什么?使用楼主说的就可以正确运行,使用itext5.0就会异常,出错。求解呀~~~


public static final String RESOURCE_PATH = "com/itextpdf/text/pdf/fonts/";

这个是itext5 中BaseFont 源码上的。把iTextAsian.jar 的包名改成这个就行了。。

相关推荐

    iText5.1.0(解决不支持中文问题)

    这个更新对于在中国、台湾、香港以及其他使用中文语言的地区的企业和开发者尤其重要,他们现在可以更加自如地使用iText来生成包含中文字符的PDF文档。 iTextAsian.jar是iText针对亚洲语言,包括中文,特别设计的一...

    itext-asian-5.2.0.jar和itextpdf-5.5.5.jar

    需要注意的是,随着iText库的更新,新的版本可能会引入更多的特性和优化,因此,根据项目需求和兼容性考虑,选择合适的版本至关重要。同时,使用iText时也需要遵守其开源许可证的要求,确保合法合规使用。

    iText-2.0.8-支持中文

    在 iText-2.0.8 版本中,该库已经针对中文字符集进行了优化,能够很好地支持中文显示和处理,这对于需要在 PDF 文件中包含中文内容的开发者来说是一大福音。以下是对 iText 的详细知识点介绍: 1. **iText 基础**:...

    itext-rtf-2.1.7.jar,iTextAsian.jar,iText-5.0.6.jar,itext-2.1.7.jar

    2. iTextAsian.jar:这个文件是针对亚洲语言的支持模块,如中文、日文和韩文。由于这些语言的字符集和排版规则与西方语言不同,因此需要特定的库来正确处理这些字符。iTextAsian.jar包含了处理东亚文字所必需的字体...

    官方最新itextpdf-5.5.8.jar+中文支持包itext-asian.jar

    这个压缩包包含了iText库的官方最新版本,即5.5.8版,以及针对中文支持的扩展包`itext-asian.jar`。这两个组件在Java开发中,特别是在处理PDF文档时,是不可或缺的工具。 **iText PDF库**: iText 是一个功能强大的...

    iTextAsian.jar iText.jar

    iTextAsian增强了对这些语言的支持,包括正确显示和处理汉字、假名和谚文的能力。它包含了额外的字体资源和排版算法,确保在PDF中能够准确地呈现亚洲文字。 使用这两个库,开发者可以轻松地在Java应用程序中集成PDF...

    itext 5.5.3 jar 带中文语音包

    对于处理中文字符的支持,5.5.3版已经相当成熟,能够很好地处理中文文本的排版和渲染,确保了PDF文档在不同系统和设备上的正确显示。 **中文语音包** 提到的“中文语音包”可能指的是iText库中用于读取和播放PDF...

    iTextAsian 中文包

    iTextAsian是一款专门为处理中文字符集而设计的Java库,它是国际知名开源PDF处理库iText的扩展。这个中文包提供了对简体中文、繁体中文以及其它东亚语言(如日语和韩语)的全面支持,使得开发者能够在生成PDF文档时...

    解决Itext生成PDF中文不换行的jar

    5. **更新或替换库**:问题可能源于Itext的版本较旧,无法良好处理中文。可以尝试更新到最新版本,或者使用其他支持中文换行的库,如Apache PDFBox或 Flying Saucer。 在提供的文件列表中,`core-renderer-R8-...

    解决itext 5.2.0中文问题资源包(含新版亚洲语言包extrajars-2.2.zip)

    在版本5.2.0之后,iText针对中文字符的支持出现了一些问题,这可能是由于内部字体处理和Unicode编码的改变导致的。为了应对这些挑战,官方提供了一个更新的资源包,其中包含了解决中文显示问题的关键组件。 在资源...

    itext相关jar包

    总结起来,IText是一个功能丰富的Java库,用于处理PDF和RTF文档,尤其是`itext-asian-5.2.0.jar`对于亚洲语言的支持,使得在中文环境下的应用更加得心应手。通过学习和掌握IText,开发者可以有效地提高工作效率,...

    itext相关JARitext-asian-5.2.0及itextpdf-5.5.13.1.zip

    iText是一款广泛使用的Java库,专门用于创建、编辑和处理PDF文档。这个压缩包包含了两个主要的JAR文件:`itext-asian-5.2.0.jar`和`itextpdf-5.5.13.1.jar`,它们在处理PDF文件时扮演着重要的角色。 `itext-asian-...

    IText 2.1.7 jar 包

    4. **iTextAsian.jar**:这个文件是为了支持亚洲语言(如中文、日文和韩文)而特别编译的IText扩展。由于PDF标准对多语种文本的支持复杂,iTextAsian提供了额外的字体和排版功能,确保亚洲字符正确显示。 5. **...

    itext全套jar包

    2. **iTextAsian.jar**:这个JAR文件提供了对亚洲语言(如中文、日文、韩文)的支持。在处理这些语言时,iText需要额外的字体和字符映射信息,因为PDF标准的内置字体通常不包含这些字符。知识点包括: - 亚洲字符...

    itext jar 几个jar 包

    2. **iTextAsian.jar**:这是一个专门为处理亚洲字符集(如简体中文、繁体中文、日文和韩文)设计的扩展库。它包含了处理CJK(Chinese, Japanese, Korean)字体和排版所需的支持,使得在iText生成的PDF文档中可以...

    itextpdf-5.5.12.jar+itext-asian-5.2.0.jar

    接下来是`itext-asian-5.2.0.jar`,这是一个专门处理亚洲语言(如中文、日文、韩文等)的扩展模块。由于PDF标准对亚洲字符的支持较为复杂,iText通过这个扩展提供更完善的字体和排版支持,确保这些语言在PDF中的正确...

    itext2.1.1.jar iTextAsian.jar

    3. **文本排版**:针对东亚文字的特殊排版规则,如中文的全角字符和标点,iTextAsian提供了相应的处理机制。 4. **Unicode兼容**:iTextAsian.jar 确保了与Unicode的兼容性,使得开发者能处理多语言的PDF文档。 综...

    itext2.0.6.jar itextasian.jar

    iText 是一个流行的Java库,用于创建和修改PDF文档。...然而,需要注意的是,随着技术的发展,更新的版本如iText 5和iText 7可能提供了更多的功能和性能改进,因此在新项目中,考虑使用最新版本的iText会更合适。

Global site tag (gtag.js) - Google Analytics