`
qingfengxia
  • 浏览: 89349 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Itext中文处理pdf(转)

阅读更多

http://quicker.iteye.com/blog/549876

Itext中文处理:

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

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

附件中有所需要的包:

示例代码:

Java代码 复制代码
  1. <SPAN style="FONT-SIZE: small">package com.lwf.pdf.test;   
  2. import java.awt.Color;   
  3. import java.io.FileNotFoundException;   
  4. import java.io.FileOutputStream;   
  5. import java.io.IOException;   
  6.   
  7. import com.lowagie.text.Document;   
  8. import com.lowagie.text.DocumentException;   
  9. import com.lowagie.text.Font;   
  10. import com.lowagie.text.Paragraph;   
  11. import com.lowagie.text.pdf.BaseFont;   
  12. import com.lowagie.text.pdf.PdfWriter;   
  13.   
  14.   
  15. public class HelloWord {   
  16.        
  17.     public static void main(String[] args) {   
  18.   
  19.         try {   
  20.             Document doc = new Document();   
  21.             PdfWriter.getInstance(doc, new FileOutputStream("c:\\good.pdf"));   
  22.             doc.open();   
  23.             BaseFont bfChinese = BaseFont.createFont( "STSongStd-Light" ,  "UniGB-UCS2-H" ,  false );   
  24.             Font fontChinese =  new  Font(bfChinese  ,  12 , Font.NORMAL, Color.GREEN);   
  25.             Paragraph pf = new Paragraph("eee");   
  26.             pf.add(new Paragraph("我们的家好大的家",fontChinese));   
  27.             pf.add(new Paragraph("sfsfsf"));   
  28.             doc.add(pf);   
  29.                
  30.             doc.close();   
  31.         } catch (FileNotFoundException e) {   
  32.             e.printStackTrace();   
  33.         } catch (DocumentException e) {   
  34.             e.printStackTrace();   
  35.         } catch (IOException e) {   
  36.             e.printStackTrace();   
  37.         }   
  38.     }   
  39.   
  40. }   
  41.   
  42. </SPAN>  
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运行下面程序:

Java代码 复制代码
  1. <SPAN style="FONT-SIZE: small">package com.lwf.pdf.test;   
  2.   
  3. import java.io.FileNotFoundException;   
  4. import java.io.FileOutputStream;   
  5. import java.io.IOException;   
  6.   
  7. import com.itextpdf.text.BaseColor;   
  8. import com.itextpdf.text.Document;   
  9. import com.itextpdf.text.DocumentException;   
  10. import com.itextpdf.text.Font;   
  11. import com.itextpdf.text.Paragraph;   
  12. import com.itextpdf.text.pdf.BaseFont;   
  13. import com.itextpdf.text.pdf.PdfWriter;   
  14.   
  15.   
  16. public class HelloWord {   
  17.        
  18.     public static void main(String[] args) {   
  19.   
  20.         try {   
  21.             Document doc = new Document();   
  22.             PdfWriter.getInstance(doc, new FileOutputStream("c:\\good.pdf"));   
  23.             doc.open();   
  24.             BaseFont bfChinese = BaseFont.createFont( "STSongStd-Light" ,  "UniGB-UCS2-H" ,  false );   
  25.             //Font fontChinese =  new  Font(bfChinese,12,Font.NORMAL,Color.GREEN);   
  26.             Font fontChinese =  new  Font(bfChinese  ,  12 , Font.NORMAL, BaseColor.GREEN);      
  27.   
  28.             Paragraph pf = new Paragraph("eee");   
  29.             pf.add(new Paragraph("我们的家好大的家",fontChinese));   
  30.             pf.add(new Paragraph("sfsfsf"));   
  31.             doc.add(pf);   
  32.                
  33.             doc.close();   
  34.         } catch (FileNotFoundException e) {   
  35.             e.printStackTrace();   
  36.         } catch (DocumentException e) {   
  37.             e.printStackTrace();   
  38.         } catch (IOException e) {   
  39.             e.printStackTrace();   
  40.         }   
  41.     }   
  42.   
  43. }   
  44.   
  45. </SPAN>  
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();
		}
	}

}

 会报以下错误:

Java代码 复制代码
  1. <SPAN style="FONT-SIZE: small">com.itextpdf.text.DocumentException: No message found for font.1.with.2.is.not.recognized   
  2.     at com.itextpdf.text.pdf.BaseFont.createFont(Unknown Source)   
  3.     at com.itextpdf.text.pdf.BaseFont.createFont(Unknown Source)   
  4.     at com.itextpdf.text.pdf.BaseFont.createFont(Unknown Source)   
  5.     at com.lwf.pdf.test.HelloWord.main(HelloWord.java:24)   
  6. </SPAN>  
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包,下面有另一种实现方法:

Java代码 复制代码
  1. /*  
  2.  * This class is part of the book "iText in Action - 2nd Edition"  
  3.  * written by Bruno Lowagie (ISBN: 9781935182610)  
  4.  * For more info, go to: http://itextpdf.com/examples/  
  5.  * This example only works with the AGPL version of iText.  
  6.  */  
  7.   
  8.   
  9.   
  10. import java.io.FileOutputStream;   
  11. import java.io.IOException;   
  12.   
  13. import com.itextpdf.text.Document;   
  14. import com.itextpdf.text.DocumentException;   
  15. import com.itextpdf.text.FontFactory;   
  16. import com.itextpdf.text.PageSize;   
  17. import com.itextpdf.text.Paragraph;   
  18. import com.itextpdf.text.Phrase;   
  19. import com.itextpdf.text.pdf.BaseFont;   
  20. import com.itextpdf.text.pdf.FontSelector;   
  21. import com.itextpdf.text.pdf.PdfWriter;   
  22.   
  23. /**  
  24.  * This example was written by Bruno Lowagie. It is part of the book 'iText in  
  25.  * Action' by Manning Publications.   
  26.  * ISBN: 1932394796  
  27.  * http://www.1t3xt.com/docs/book.php   
  28.  * http://www.manning.com/lowagie/  
  29.  */  
  30.   
  31. public class FontSelectionExample {   
  32.   
  33.     /** The resulting PDF file. */  
  34.     public static final String RESULT   
  35.         = "results/part3/chapter11/font_selection.pdf";   
  36.     /** Some text */  
  37.     public static final String TEXT   
  38.         = "These are the protagonists in 'Hero', a movie by Zhang Yimou:\n"  
  39.             + "\u7121\u540d (Nameless), \u6b98\u528d (Broken Sword), "  
  40.             + "\u98db\u96ea (Flying Snow), \u5982\u6708 (Moon), "  
  41.             + "\u79e6\u738b (the King), and \u9577\u7a7a (Sky)." +   
  42.                     "中华人民共和国万岁劳动人民是光荣的,岁月峥嵘,百舸争流" ;   
  43.   
  44.     /**  
  45.      * Creates a PDF document.  
  46.      * @param filename the path to the new PDF document  
  47.      * @throws DocumentException   
  48.      * @throws IOException   
  49.      * @throws    DocumentException   
  50.      * @throws    IOException  
  51.      */  
  52.     public void createPdf(String filename) throws IOException, DocumentException {   
  53.         // step 1   
  54.         Document document = new Document(PageSize.A4);   
  55.         // step 2   
  56.         PdfWriter.getInstance(document, new FileOutputStream(filename));   
  57.         // step 3: we open the document   
  58.         document.open();   
  59.         // step 4:   
  60.         FontSelector selector = new FontSelector();   
  61.         selector.addFont(FontFactory.getFont(FontFactory.TIMES_ROMAN, 12));   
  62. //      selector.addFont(FontFactory.getFont("MSung-Light",   
  63. //          "UniCNS-UCS2-H", BaseFont.NOT_EMBEDDED));   
  64. //         
  65.         selector.addFont(FontFactory.getFont("STSongStd-Light",   
  66.                 "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED));   
  67.                
  68.            
  69.         Phrase ph = selector.process(TEXT);   
  70.         document.add(new Paragraph(ph));   
  71.         // step 5: we close the document   
  72.         document.close();   
  73.     }   
  74.   
  75.     /**  
  76.      * Main method.  
  77.      *  
  78.      * @param    args    no arguments needed  
  79.      * @throws DocumentException   
  80.      * @throws IOException  
  81.      */  
  82.     public static void main(String[] args) throws IOException, DocumentException {   
  83.         new FontSelectionExample().createPdf("c:/good.pdf");   
  84.     }   
  85. }  
/*
 * 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的文件.内容在附件里.

分享到:
评论
2 楼 kuge6688 2012-07-09  
我的中文还不显示啊。。。。。。。。。。。。。。。求
1 楼 xmllong 2010-08-18  
奇怪,第一个代码例子就不行,只输出start ok,中间的中文“我们大家。。。”没有输出呀

相关推荐

    itext 将html转pdf中文显示换行以及字体问题

    1、itext将静态html转pdf中文显示及换行问题 2、itext将静态html转pdf 字体问题 3、html转pdf 参考我的另外一篇博文https://blog.csdn.net/qq_38616723/article/details/125188407?spm=1001.2014.3001.5502

    JAVA使用itextpdf实现HTML转PDF

    此外,标签中的"xpdf"通常指的是XPDF工具集,它是一个命令行工具,用于处理PDF文档。虽然本示例未直接使用XPDF,但在某些场景下,如服务器环境,你可能需要结合XPDF或其他命令行工具来完成更复杂的PDF操作。 总之,...

    itextpdf 导出pdf 表格 自动分页中文 目录

    iTextPDF是一个Java库,专门用于创建、编辑和处理PDF文档,而`iText-asian-5.2.0.jar`和`itextpdf-5.5.5.jar`是iText库的不同版本,用于支持中文字符和其他亚洲语言。 1. **iTextPDF**: iTextPDF是iText项目的一...

    iText中文帮助文档_itext中文帮助文档_itext_iTextpdf_itext中文文档_

    这个中文帮助文档提供了详细的指导,帮助开发者理解和使用iText来创建包含丰富内容的PDF文件。以下是对iText库和文档中涉及的关键知识点的详细解释: 1. **iText基本概念**: - **PDF(Portable Document Format)...

    IText5实现Html转PDF.zip

    IText5实现Html转PDF(不含图片、表格) 含:字体文件、hmtl文件、jar包、Java代码 安装字体或将字体文件放到相应的目录下。 jar包中的 core-renderer-all.jar 为其他大牛重写的,解决了中文字体和换行的问题。 Html...

    iText_pdf.rar_iText pdf_itext PDF类

    在描述中提到的“iText可以制作中文PDF文件的JAVA源程序”,意味着这个压缩包可能包含示例代码或教程,展示了如何使用iText库在Java程序中创建包含中文字符的PDF文档。通常,处理中文字符需要正确配置字体资源,并...

    itextpdf中文帮助文档.pdf

    这个中文帮助文档提供了关于如何使用iTextPDF库在Java项目中处理PDF的详细指南,适合对PDF操作有一定需求的开发者。iTextPDF不仅支持创建新的PDF文档,还能在现有文档上进行编辑,如添加文本、图像、表格、链接等,...

    iText生成pdf解决中文不显示

    iText生成pdf解决中文不显示字库,pdf凉字不显示,由于生成iText插件生成pdf的时候中文会显示不出来,遇到过的是"凉"字,查到是字体库的原因,网上下载字体库msyh.ttc,生成的时候指定字体库,就可以解决了,小bug一...

    itext7 html转换为pdf

    `iText`是一个强大的Java库,用于处理PDF文档,它的最新版本`iText 7`增加了对HTML到PDF转换的支持。本文将详细介绍如何利用`iText 7`在Windows系统上进行此操作,并讨论其关键特性,如中文支持、页眉和页脚的添加。...

    iTextpdf支持中文

    这个库使得开发者能够轻松地在应用程序中创建、修改和处理PDF文档,包括添加文本、图像、表格、链接等元素。在标题中提到的“iTextpdf支持中文”,意味着该库不仅具备基本的PDF处理功能,还特别优化了对中文字符的...

    iText7处理行首行末中文标点符号

    iText7处理行首行末中文标点符号

    iText操作Pdf简单整理

    在使用iText时,首先需要引入相应的库文件,如压缩包中的`itextpdf-5.5.1.jar`,这是iText的主要库,包含了处理PDF文档的核心功能。如果需要处理中文字符或者亚洲语言,还需要引入`itext-asian-5.1.0.jar.zip`解压后...

    利用itext将html转为pdf带图片所需jar

    iText是一个强大的Java库,能够帮助开发者实现这样的转换,并且支持包含中文字符和图像的处理。本篇文章将详细介绍如何利用iText将HTML转换为PDF,并介绍所需的jar包以及相关知识点。 首先,我们需要准备两个关键的...

    itext5.4.2 html2pdf

    iText是一个著名的Java库,专门用于处理PDF文档,而其5.4.2版本引入了对HTML到PDF转换的支持,特别强调了对中文字符的完美呈现,解决了以往许多转换工具在处理中文时出现的问题。 首先,我们来了解iText 5.4.2的...

    Android用itext库生成中文PDF文档

    iText是一个流行的Java库,用于创建和处理PDF文档。然而,由于版权和字符集的问题,原版的iText库在默认情况下可能无法正确地显示中文字符。这篇内容将深入探讨如何在Android环境中使用iText库生成包含中文的PDF文档...

    iText PDF中文字体文件.rar

    本教程将深入探讨如何在Java中使用iText PDF插件处理中文字符,以及如何引入中文字体文件,创建不同大小和风格的中文字体。 首先,让我们理解`iText PDF`。iText是一个开源的Java库,它提供了一系列API用于构建PDF...

    Java解决Itext pdf中文不显示问题

    然而,当处理中文字符时,Itext可能会出现不显示或者显示乱码的问题。这个问题主要是由于PDF编码格式与Java字符串编码不匹配导致的。下面将详细介绍如何解决Java中Itext PDF中文不显示的问题。 首先,我们需要理解...

    iText PDF pdf文档生成itext5.5.11.zip,itxt-asian5.20.jar,加水印,去水印代码,功能强大。

    总的来说,这个资源包为开发者提供了一整套处理PDF的工具,无论是生成新文档、编辑现有文档,还是处理亚洲语言,甚至是复杂的水印操作,都能得到有效的支持。通过学习和使用这些代码和库,开发者可以提升其在PDF领域...

    itext-2.1.7源码包以及 解决iText生成pdf时中文标点存在行首问题的修改class

    "itext-2.1.7源码包以及 解决iText生成pdf时中文标点存在行首问题的修改class" 这个标题提到了两个关键点。首先,`itext-2.1.7`是开源Java库iText的一个版本,用于创建、修改和操作PDF文档。这个版本的源码包提供了...

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

    总之,处理Itext生成PDF时的中文换行问题,关键在于正确设置字体、编码和布局策略。如果遇到困难,不妨尝试更新库或使用其他替代方案。同时,保持对PDF生成技术的深入理解和实践,是提高PDF文档质量的关键。

Global site tag (gtag.js) - Google Analytics