一、iText简介

   iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。

使用iText非常方便,引入jar包,程序中就可以使用iText类库了。iText.jar包下载地址:http://www.itextpdf.com/download.php

如果生成的PDF文件中需要出现中文、日文、韩文字符,则同样的地址,下载extrajars-2.3.zip扩展包,里面包括itext-asian.jar等扩展工具包。

二、功能介绍

在企业的信息系统中,报表处理一直占比较重要的作用,iText组件通过在服务器端使用Jsp 或JavaBean生成PDF报表,客户端采用超级连接显示或下载得到生成的报表,这样就很好的解决了B/S系统的报表处理问题。

适合使用IText的需求:

Typically, iText is used in projects that have one ofthe following requirements:

The content isn't available in advance: it'scalculated based on user input or real-time database information.

The PDF files can't be produced manually due to the massivevolume of content: a large number of pages or documents.

Documents need to be created in unattended mode, in abatch process.

The content needs to be customized or personalized;for instance, the name of the end user has to be stamped on a number of pages.

Often you'll encounter these requirements in webapplications, where content needs to be served dynamically to a browser.Normally, you'd serve this information in the form of HTML, but for somedocuments, PDF is preferred over HTML for better printing quality, foridentical presentation on a variety of platforms, for security reasons, or toreduce the file size.

通常,iText用于具有下列条件之一的项目:

内容不固定,它是基于用户输入或实时数据库信息计算。

由于页数多或者文件较大而造成的内容过多而使得PDF文件不能手动生成,。

文件需要在无人值守模式下创建的,使用批处理过程。

内容需要自定义或个性化;例如,最终用户的名字需要被印在某一页中。

通常你会在Web应用程序中遇到的这些要求,其中的内容对于浏览者来说必须是动态。通常,你会以HTML的形式提供这些信息,但对于一些文档,PDF格式在印刷质量上是优于HTML的,同样,在各种平台上,出于安全原因,或减少文件大小的考虑,PDF都优于HTML。

三、demo演示,一个最简单的使用IText转化为PDF的例子

用iText生成PDF文档需要5个步骤:

  ①建立com.itextpdf.text.Document对象的实例。

Document document= new Document();

  ②建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中。

PDFWriter.getInstance(document,new FileOutputStream("ITextTest.pdf"));

  ③打开文档。

document.open();

  ④向文档中添加内容。

document.add(newParagraph("IText  Test"));

  ⑤关闭文档。

document.close();

  通过上面的5个步骤,就能产生一个ITextTest.PDF的文件,文件内容为"ITextTest"。

具体代码如下:

 package com.wh;  

 importjava.io.FileOutputStream;
importcom.itextpdf.text.BaseColor;
importcom.itextpdf.text.Document;
importcom.itextpdf.text.Element;
importcom.itextpdf.text.Font;
importcom.itextpdf.text.Paragraph;
importcom.itextpdf.text.Rectangle;
importcom.itextpdf.text.pdf.BaseFont;
importcom.itextpdf.text.pdf.PdfPTable;
importcom.itextpdf.text.pdf.PdfWriter; public class ToPDF{
// 表头
public static final String[] tableHeader= { "姓名", "性别", "年龄",
"学院", "专业", "年级"}; // 数据表字段数
private static final int colNumber = 6; // 表格的设置
private static final int spacing = 2; // 表格的设置
private static final int padding = 2; // 导出Pdf文挡
public static void exportPdfDocument() {
// 创建文Pdf文挡50, 50, 50,50左右上下距离
Document document = newDocument(new Rectangle(1500, 2000), 50, 50, 50,
50);
try {
//使用PDFWriter进行写文件操作
PdfWriter.getInstance(document,new FileOutputStream(
"d:\\学生信息.pdf"));
document.open();
// 中文字体
BaseFont bfChinese =BaseFont.createFont("STSong-Light",
"UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);
Font fontChinese = newFont(bfChinese, 12, Font.NORMAL);
// 创建有colNumber(6)列的表格
PdfPTable datatable = newPdfPTable(colNumber);
//定义表格的宽度
int[] cellsWidth = { 8, 2,2, 8, 5, 3 };
datatable.setWidths(cellsWidth);
// 表格的宽度百分比
datatable.setWidthPercentage(100);
datatable.getDefaultCell().setPadding(padding);
datatable.getDefaultCell().setBorderWidth(spacing);
//设置表格的底色
datatable.getDefaultCell().setBackgroundColor(BaseColor.GREEN);
datatable.getDefaultCell().setHorizontalAlignment(
Element.ALIGN_CENTER);
// 添加表头元素
for (int i = 0; i <colNumber; i++) {
datatable.addCell(newParagraph(tableHeader[i], fontChinese));
}
// 添加子元素
for (int i = 0; i <colNumber; i++) {
datatable.addCell(newParagraph(tableHeader[i], fontChinese));
}
document.add(datatable);
} catch (Exception e) {
e.printStackTrace();
}
document.close();
} public static void main(String[] args)throws Exception {
exportPdfDocument();
} }

下载示例代码及jar包请点击: 下载

最新文章

  1. Spring泛型依赖注入
  2. Head First 设计模式 --4 工厂模式 抽象工厂模式
  3. mysql日志问题定位实用命令
  4. js库中$冲突的解决方法
  5. Apache源码分析资源
  6. codeforces 391C3 - The Tournament
  7. linux —— 学习笔记(用户管理与权限控制)
  8. Partition List ——LeetCode
  9. php获取本周周一、周日时间,上周周一、周日时间,本月第一天,本月最后一天,上个月第一天,最后一天时间
  10. Python 文件对象
  11. (转载)Java变量作用域详解
  12. C#设计模式之二简单工厂模式(过渡模式)
  13. 登录界面输入判断为空的bug
  14. 【CF997E】Good Subsegments (线段树+单调栈)
  15. JVM—内存溢出、OutOfMemoryError、StackOverflowError
  16. MongoDB常用操作--简介
  17. if-else 重构
  18. expect脚本同步文件 expect脚本指定host和要同步的文件 构建文件分发系统 批量远程执行命令
  19. react全家桶-路由
  20. vue 渲染页面的时候 出现闪烁问题的解决办法

热门文章

  1. Day4作业及默写
  2. jar安装
  3. Python 黏包及黏包解决方案
  4. Puppet的一些奇技淫巧
  5. Bug02_MyBatis_org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
  6. HDU 6066 17多校3 RXD&#39;s date(超水题)
  7. C高级第三次作业
  8. Oval框架如何校验枚举类型的一种思路
  9. ss linux终端配置
  10. 07 Object类,Scanner,Arrays类,String类,StringBuffer类,包装类