powerwind 发表于 2006-12-6 19:10

用iText生成PDF文件

来自:http://blog.csdn.net/Windy83/archive/2006/12/06/1432423.aspx

这几天比较无聊,就上网到处逛逛,发现iText是个不错的生成PDF文件的JAVA开源包,就拿来学学。
发现网上有两个不错的初级教程。iText使用指南和Itext教程翻译。
英文网站会有不少好教程,但应该很少会有关于中文的。因为对中文操作,必须另外下载一个包:iTextAsian.zip。这个包里面并不包含任何class文件,而是这样的:
http://p.blog.csdn.net/images/p_blog_csdn_net/Windy83/6976e1e81e6d46e79107096dd0057937.png

其中两个文件关于编码和字体(下面例子会用到)。
cjkencodings.properties
UniGB-UCS2-H=UniGB-UCS2-H
UniGB-UCS2-V=UniGB-UCS2-HUniGB-UCS2-V
cjkfonts.properties
STSong-Light=Adobe-GB1-UCS2_UniGB-UCS2-H_UniGB-UCS2-V_
STSongStd-Light=Adobe-GB1-UCS2_UniGB-UCS2-H_UniGB-UCS2-V_

我下载的是目前最新的包——itext-1.4.7.jar 一个简单的示例代码如下:

package powerwind;

import java.io.*;

import com.lowagie.text.*;
import com.lowagie.text.pdf.*;

// 功能:把文本文件的文字读出来,然后写到PDF文件
publicclass TxtToPdf {

    publicstaticvoid main(String[] args) {

       Document doc = null;
       BufferedReader br = null;

       final String pdfFilename = "PdfFile.pdf";
       final String txtFilename = "TxtFile.txt";

       try {
         doc = new Document();
       // 设置纸张为A5
         doc.setPageSize(PageSize.A5);

         PdfWriter.getInstance(doc, new FileOutputStream(pdfFilename));

         // 设置字体和编码:
         BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
         Font font = new Font(baseFont, 8, Font.NORMAL);
         doc.open();

         br = new BufferedReader(new FileReader(txtFilename));
         String str = null;
         // 从txt文件读出一行,加入到Document的段落
         while ((str = br.readLine()) != null) {
            doc.add(new Paragraph(str, font));
         }
       } catch (DocumentException de) {
         System.out.println(de);
       } catch (IOException ioe) {
         System.out.println(ioe);

       } finally {
         if (doc != null)
            doc.close();
         try {
            if (br != null)
                  br.close();
         } catch (IOException ioe) {
            System.out.println(ioe);
         }
       }
       System.out.println("done");
    }
}


如果把程序做成有图形界面操作,可以自由选择源文件和目标文件,并且可以随意设置段落格式和字体,就是一个简单的PDF转换工具了。

[ 本帖最后由 powerwind 于 2006-12-6 19:21 编辑 ]

powerwind 发表于 2006-12-7 00:34

刚才看 iText in action 才知道,原来iText包里已经有上述功能。
运行 java -jar itext-1.4.7.jar 就有图形界面操作。
刚才试了下,发觉那个 txt2Pdf 功能不支持中文

hexq 发表于 2006-12-7 09:43

Apache组织下的Jakarta项目下的子项目POI也提供一组操纵Windows文档的JAVA API。

绿茶 发表于 2006-12-12 22:35

POI 是 对 Word,Excel 进行操作的

目前对PDF操作的开源项目主要有
PDFBOX
ITEXT
XPDF
三种

其中 ITEXT 和 XPDF 都有中文支持的补丁(虽然比较烂)
PDFBOX 只支持英文

貌似PDFBOX的功能是当中最强大的..

colin 发表于 2006-12-14 22:22

pdfcreator可以参考一下,开源的,在sf.net
页: [1]
查看完整版本: 用iText生成PDF文件