这是本人学习ITEXT的一些小实践,希望可以帮到大家。这也是我第一次写这种类型博客,如有不好之处欢迎指出!!下面我们开始吧!
本文所要用到的工具或jar主要有: Acrobat 8 这个主要用来制作PDF模板、eclipse这个看你喜欢咯(你用其他也行) 、 itext.jar、
还有为了解决中文的输出问题,需要多下载一个名为iTextAsian.jar的JAR包。这个包里面定义了与中文输出相关的一些文件。
好了,需要做的就是这些了,简单的PDF生成这里就不再作介绍了,本文主要讲解如何使用PDF模板。
我们先来看看制作出来的效果:
上图表格上及表格中的数据是动态添加进去的,页数为两页(为节约版面现只显示一页)
两页都是用的同一模板的,
1、 模板的制作:
我主要使用的是Acrobat8.0,上面所用到的模板是由 周工作报告 模板修改而来的,如果想学习如何新建一个新的模板,大家可以参照下这里吧!
http://lxy19791111.iteye.com/blog/102848
2、 取得每个表单域的名字
模板制作好后,要插入数据首先就要知道需要插在模板中位置,
//需要生成后的PDF
FileOutputStream fos = new FileOutputStream("c:/test/Pdf.pdf");
//PDF模板路径
String TemplatePDF ="c:/test/PdfTemplate.pdf";
PdfReader reader = new PdfReader(TemplatePDF);
PdfStamper stamp = new PdfStamper(reader,fos);
AcroFields form = stamp.getAcroFields();
for (Iterator it = form.getFields().keySet().iterator(); it
.hasNext();) {
System.out.println(it.next());
}
这个是打印后的部分结果:
我们只取后面那个命名就行,如"星期四[3]"
当然,模板是你自己定义,文本域的命名你当然知道了,这里只是作个简单介绍而已。
3、下面是插入数据及PDF合并的代码:
package com.golden.info.test;
import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.pdf.AcroFields;
import com.lowagie.text.pdf.PdfCopy;
import com.lowagie.text.pdf.PdfImportedPage;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfStamper;
public class TestPdfTemplate {
public static void main(String[] args) {
try {
int count = 8;// 总记录数
int pageCount = 4;// 每页记录数
int index = 1; // 表格序号
int page = 0;// 总共页数
/** 主要控制总共的页数*/
if (count >= pageCount && count % pageCount == 0) {
page = count / pageCount;
} else {
page = count / pageCount + 1;
}
String TemplatePDF = "c:/test/PdfTemplate.pdf";//设置模板路径
FileOutputStream fos = new FileOutputStream("c:/test/Pdf.pdf");//需要生成PDF
ByteArrayOutputStream baos[] = new ByteArrayOutputStream[page];//用于存储每页生成PDF流
/** 向PDF模板中插入数据 */
for (int item = 0; item < page; item++) {
baos[item] = new ByteArrayOutputStream();
PdfReader reader = new PdfReader(TemplatePDF);
PdfStamper stamp = new PdfStamper(reader, baos[item]);
AcroFields form = stamp.getAcroFields();
form.setField("DepartmnetNmae", "蓝飞");//插入的数据都为字符类型
form.setField("qq", "252462807");
form.setField("pageNumber", "第" + (item + 1) + "页,共" + page
+ "页");
if (count % pageCount != 0 && item == page - 1) {
System.out.println("====pageCount+" + pageCount + "=====");
pageCount = count % pageCount;
}
/**因为PDF中的表格其实是众多的文本域组成,就是一个数组,所以把它循环出来就可以了*/
for (int j = 0; j < pageCount; j++) {
form.setField("ProjectTask[" + j + "]", index + "");
form.setField("星期一[" + j + "]", "星期一[" + index + "]");
form.setField("星期二[" + j + "]", "星期二[" + index + "]");
form.setField("星期三[" + j + "]", "星期三[" + index + "]");
form.setField("星期四[" + j + "]", "星期四[" + index + "]");
form.setField("星期五[" + j + "]", "星期五[" + index + "]");
form.setField("星期六[" + j + "]", "星期六[" + index + "]");
form.setField("星期日[" + j + "]", "星期日[" + index + "]");
form.setField("意见[" + j + "]", "同意[" + j + "]");
index++;
}
stamp.setFormFlattening(true); // 千万不漏了这句啊, */
stamp.close();
}
Document doc = new Document();
PdfCopy pdfCopy = new PdfCopy(doc, fos);
doc.open();
PdfImportedPage impPage = null;
/**取出之前保存的每页内容*/
for (int i = 0; i < page; i++) {
impPage = pdfCopy.getImportedPage(new PdfReader(baos[i]
.toByteArray()), 1);
pdfCopy.addPage(impPage);
}
doc.close();//当文件拷贝 记得关闭doc
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
}
}
至于,生于PDF后,想打印出来,只要调用以下代码就行了
try{
Executable ex = new Executable();
ex.openDocument("c:/test/Pdf.pdf");
ex.printDocument("c:/test/Pdf.pdf");
}catch(IOException e){
e.printStackTrace();
}
到这里,运用上面的那些代码,就完成了PDF模板输出报表.
(PDF模板、代码跟运行结果在附件里)
有错误之处请指正.
也希望这篇文章可以帮到您.
- 大小: 41.6 KB
- 大小: 24.6 KB
分享到:
相关推荐
相关教程 iText 简介 iText创建文档简介 iText入门实例 IText使用PDF模板输出报表的实践 我和iText第一次亲密接触 相关JAR iText-2.1.7.jar(核心) iTextAsian.jar(中文支持) iText-rups-2.1.7.jar iText-rtf-...
在企业的信息系统中,报表处理一直占比较重要的作用,这里介绍一种生成PDF报表的Java组件--iText。通过在服务器端使用Jsp或 JavaBean生成PDF报表,客户端采用超级连接显示或下载得到生成的报表,这样就很好的解决了B...
也没有很好操作PDF的类库,所以我们需要对pdf进行编辑,加密,模板打印等操作不得不去找可用的第三方组件,这里就可以选择使用ITextSharp来实现,这个程序是JAVA工具IText的.Net版本。 二、注意事项 1、开发环境为...
科根据pdf模板填充文字信息和图片信息,并且进行布局,免费,没有水印
asp.net生成PDF详解 asp.net生成PDF PDF详解 用C#制作PDF文件全攻略 丽水市汽车运输集团有限公司信息中心 苟安廷 目 录 前 言 3 第一部分 iText的简单应用 4 第一章 创建一个Document 4 第一步 创建一个Document实例...
该代码提供了word、excel、pdf三种类型的文档生成方案,其中word文档使用“freemarker + xml + 模板”技术;excel使用“POI + 模板”技术;pdf使用“freemarker + itext + flying saucer”技术
网络上多次搜索没有自己想要的,于是硬着头皮到itextpdf官网看英文文档,按时完成任务,以实用为主,共享一下:使用HTML文件创建PDF模板:使用自定义字体的一种方法: 代码如下: FontFactory.Register(System.Web....
Apache Commons包中的一个,java.io.*的扩展,输入输出,支持文件上传 commons-fileupload.jar Apache Commons包中的一个,是一个通过Http接收上传的文件并处理结果文件的库 dom4j-1.4.jar 和 jaxen-1.1.1.jar 是一...
基于模板的Excel / PDF文件生成器(Java / Apache POI / iText)。 不需要报表设计器。 模板是在Excel工作簿中创建的。 允许生成复杂的Excel文档。 简单易用,易于学习。
2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...
2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...