Java 使用 iText动态生成PDF文档

原创 2006年05月20日 14:36:00
iText是一个开发源代码的项目,你可以使用iText方便的实现PDF的输出。
 
 
一、iText的下载:

    你可以在 http://www.lowagie.com/iText/  查看关于iText的相关信息,包括源代码,文档..

    1. itext-src-1.4.zip(源代码)

         http://jaist.dl.sourceforge.net/sourceforge/itext/itext-src-1.4.zip

    2.  itext-1.4.jar(可以直接导入的jar文件)

         http://jaist.dl.sourceforge.net/sourceforge/itext/itext-1.4.jar

    3.  亚洲语言包

         http://itextdocs.lowagie.com/downloads/iTextAsian.jar          (或者)

        http://itextdocs.lowagie.com/downloads/iTextAsianCmaps.jar

二、示例程序:

        首先把上面的这几个jar包的完整路径添加到环境变量 classpath 中,然后再下面的程序
        中导入相应的包

 

/**
  * HelloWorld.java
 */

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

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

public class HelloWorld {

  public static void main(String[] args) {

    System.out.println("Hello World");

    // 创建一个Document对象
    Document document = new Document();

    try
    {

      // 生成名为 HelloWorld.pdf 的文档
      PdfWriter.getInstance(document, new FileOutputStream("HelloWorld.pdf"));

      // 添加PDF文档的一些信息
      document.addTitle("Hello World example");
      document.addAuthor("Bruno Lowagie");
      document.addSubject("This example explains how to add metadata.");
      document.addKeywords("iText, Hello World, step 3, metadata");
      document.addCreator("My program using iText");

      // 打开文档,将要写入内容
      document.open();

      // 插入一个段落
      document.add(new Paragraph("Hello World!"));

    } 
    catch (DocumentException de)
    {
      System.err.println(de.getMessage());
    }
    catch (IOException ioe)
    {
      System.err.println(ioe.getMessage());
    }

    // 关闭打开的文档
    document.close();
  }

编译运行以后,我们可以在运行的目录发现生成的HelloWorld.pdf,打开可以看到我们写的文字:

Hello World



<script type="text/javascript"><!-- google_ad_client = "pub-8787307476642604"; google_ad_width = 110; google_ad_height = 32; google_ad_format = "110x32_as_rimg"; google_cpa_choice = "CAAQmIbL9gEaCOiqhnQqbHVJKLS-6n4"; //--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script><script type="text/javascript"><!-- google_ad_client = "pub-8787307476642604"; google_ad_width = 110; google_ad_height = 32; google_ad_format = "110x32_as_rimg"; google_cpa_choice = "CAAQtcH8zwEaCBVOGRJND7CQKOWkwXU"; //--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script><script type="text/javascript"><!-- google_ad_client = "pub-8787307476642604"; google_ad_width = 110; google_ad_height = 32; google_ad_format = "110x32_as_rimg"; google_cpa_choice = "CAAQvKOU_AEaCMjb-vm8Brj8KKzx9IMB"; //--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

三、中文问题:

        由于iText不支持东亚语言,我们下载了iTextAsian.jar 以后,就可以在PDF里面写中文:

/**
  * AsianTest.java
 */

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

import com.lowagie.text.*;
import com.lowagie.text.pdf.PdfWriter;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.Font;
import java.awt.Color;

public class AsianTest{

  public static void main(String[] args) {

    // 创建一个Document对象
    Document document = new Document();

    try
    {

      // 生成名为 AsianTest.pdf 的文档
      PdfWriter.getInstance(document, new FileOutputStream("AsianTest.pdf"));

     /**  新建一个字体,iText的方法
       
STSongStd-Light 是字体,在iTextAsian.jar 中以property为后缀
       *  UniGB-UCS2-H   是编码,在iTextAsian.jar 中以cmap为后缀
       *  H 代表文字版式是 横版, 相应的 V 代表 竖版
      */

      BaseFont bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", false);

        Font fontChinese = new Font(bfChinese, 12, Font.NORMAL, Color.GREEN);

      // 打开文档,将要写入内容
      document.open();

      // 插入一个段落
     
Paragraph par = new Paragraph("我们",fontChinese);

      document.add(par);

    } 
    catch (DocumentException de)
    {
      System.err.println(de.getMessage());
    }
    catch (IOException ioe)
    {
      System.err.println(ioe.getMessage());
    }

    // 关闭打开的文档
    document.close();
  }
}

就可以显示中文了。

四、其他问题:(应导入相应的包)

       1. 换页:

document.newPage();

       2. 表格:

// 设置 Table
Table aTable = new Table(3);
int width[] = {25,25,50};
aTable.setWidths(width);
aTable.setWidth(80); // 占页面宽度 80%

aTable.setDefaultHorizontalAlignment(Element.ALIGN_LEFT);
aTable.setDefaultVerticalAlignment(Element.ALIGN_MIDDLE);
aTable.setAutoFillEmptyCells(true);
//自动填满
aTable.setPadding(1);
aTable.setSpacing(1);
aTable.setDefaultCellBorder(0);
aTable.setBorder(0);

Cell cell = new Cell(new Phrase("这是一个测试的 3*3 Table 数据", fontChinese ));
cell.setVerticalAlignment(Element.ALIGN_TOP);
cell.setRowspan(3);
aTable.addCell(cell);

aTable.addCell(new Cell("#1"));
aTable.addCell(new Cell("#2"));
aTable.addCell(new Cell("#3"));

aTable.addCell(new Cell("#4"));
aTable.addCell(new Cell("#5"));
aTable.addCell(new Cell("#6"));

document.add(aTable);

       3. 图片:

// 可以是绝对路径,也可以是URL
Image img = Image.getInstance("logo.gif");

// Image image = Image.getInstance(new URL(http://xxx.com/logo.jpg));

img.setAbsolutePosition(0, 0);

document.add(img);

五、参考文档:

在springmvc中使用itext生成pdf文件

在springmvc中使用itext生成pdf文件 org.springframework.web.servlet.view.document.AbstractPdfStamperView Font ...
  • u013905744
  • u013905744
  • 2017年06月09日 10:23
  • 1245

Java iText使用PDF模板生成PDF文档

版权声明:欢迎大家转载,转载请声明转载地址http://blog.csdn.net/u012377333,谢谢大家。 我们系统需要生成一个可以打印的PDF文档,老板给了我一个Word文档...
  • LWJdear
  • LWJdear
  • 2017年11月28日 15:20
  • 95

Java使用itext生成PDF报表

Java使用itext生成PDF报表
  • u011233087
  • u011233087
  • 2015年06月18日 11:45
  • 1258

【java】 iText使用PDF模板生成输出PDF

本文所要用到的工具或jar主要有: Adobe Acrobat 这个主要用来制作PDF模板、eclipse、 itext.jar、 解决中文的输出问题,需要多下载一个名为iTextAsian.jar...
  • leayefang
  • leayefang
  • 2015年07月08日 17:09
  • 3475

java 利用itext生成PDF并下载

/** * 测试生成pdf下载 * @author liqimo * @param request * @param response * @return null; */ ...
  • liqimo1799
  • liqimo1799
  • 2017年02月13日 15:14
  • 3527

java通过xml配置属性用iText包生成pdf文件

总共步骤为:1、提供一个需要替换参数传入类;2、解析xml文件,替换xml文件中的特定参数(写死格式);3、解析xml文件中的pdf文件布局(包括表、段落、文字、换行等); 4、生成pdf文件。 第一...
  • asdcxz868
  • asdcxz868
  • 2016年05月05日 20:47
  • 2318

利用IText导出Word

生成Word文档的类库有很多,常用的有jacob,poi,itext等等,jacob操作office的能力是不错的,但是对于我个人来说,我不喜欢它的两方面:一、jacob只能应用于windows平台。...
  • ap0906230
  • ap0906230
  • 2014年01月07日 21:52
  • 12131

PDF文档解析:PDFBox和iText实例

PDFBox和IText是解析PDF文档最常用的两种java API。 1、 使用PDFBox时,需要添加:pdfbox-2.0.0.jar、fontbox-2.0.0.jar、commons-log...
  • u013405574
  • u013405574
  • 2016年04月07日 15:12
  • 3496

ITEXT 目录生成的第二种方法

---最近在用itext写pdf报告,期间遇到目录生成的问题,而目录生成我认为最关键的是获取章节的页码问题。下面分别介绍这两种方法。 ---前言:为了能唯一定位每个章节的页码,章节都是通过图片贴在...
  • sand_clock
  • sand_clock
  • 2016年09月08日 12:00
  • 1624

使用itext生成pdf的,各种布局

代码如下,jar包为itext.jar,itextAsia.jar,最好都是最新的 ;2张图片也在最后贴出,把图片放到D盘可以直接生成制定格式的pdf。 最后生成的pdf如下: 代码如下:pack...
  • tanqian351
  • tanqian351
  • 2016年04月20日 16:09
  • 10756
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java 使用 iText动态生成PDF文档
举报原因:
原因补充:

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