这是本人学习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
分享到:
相关推荐
- 使用Adobe Acrobat Pro DC制作包含图片占位符的PDF模板。这种工具提供了丰富的功能,便于设计出符合需求的模板。 - 模板中需包含一个或多个用于放置图片的图像框,这些图像框可以通过设置特定的名称来标识。 2....
相关教程 iText 简介 iText创建文档简介 iText入门实例 IText使用PDF模板输出报表的实践 我和iText第一次亲密接触 相关JAR iText-2.1.7.jar(核心) iTextAsian.jar(中文支持) iText-rups-2.1.7.jar iText-rtf-...
这篇博客 "freemarker+itext生成PDF" 可能详细介绍了如何结合这两者来生成PDF文件,这在报表生成、发票打印或任何需要静态化输出的场景中非常有用。 首先,让我们了解FreeMarker。FreeMarker是一个基于模板的语言,...
1. iText主库:`itextpdf-版本号.jar` - 这是iText的核心库,包含了生成PDF的所有基本功能。 2. Bouncy Castle库:`bcprov-jdk15on-版本号.jar` - iText在处理加密和数字签名时依赖Bouncy Castle库,因此需要将其...
在实际开发中,这四个jar包通常一起使用,以实现从数据源获取信息,通过iReport设计报表模板,然后利用iText将报表导出为PDF格式。这种组合方式在企业级应用中非常常见,特别是在需要生成大量定制化报告的场景下。 ...
<groupId>com.itextpdf</groupId> <artifactId>itext7-core <version>7.x.x <groupId>org.freemarker <artifactId>freemarker <version>2.x.x ``` 请替换`x.x.x`为最新版本号。 步骤二:创建...
ITEXT 是一个强大的Java库,专门用于创建、编辑和处理PDF文档。在版本5开头的ITEXT中,它被广泛用于生成PDF...在实际项目中,结合数据库、模板设计以及业务逻辑,ITEXT能够帮助我们快速、高效地生成高质量的PDF报告。
1. iText相关的jar:这可能包括`itextpdf.jar`,这是iText的主要库,包含了创建和操作PDF的基本功能。 2. Freemarker的jar:例如`freemarker.jar`,这是Freemarker模板引擎的核心库。 3. XMLWorker的jar:例如`...
在IT行业中,生成PDF文档是常见的需求,特别是在报表、合同或者文档自动化等领域。"Velocity"是一个强大的模板引擎,常用于动态生成HTML或者其他格式的文本,而"Itext"则是一款流行的Java库,专门用于创建和修改PDF...
iText是一款强大的PDF库,主要...总结,iText是JAVA开发中不可或缺的PDF处理工具,其强大功能和易用性使其成为报表打印和文档生成的理想选择。通过不断学习和实践,你将能够熟练运用iText解决实际问题,提高项目效率。
5. PDF模板:可以创建模板PDF,然后在运行时填充数据,这在批量生成类似格式的PDF文档时非常有效。 6. 数字签名:iText支持PDF文档的数字签名,确保文档的完整性和来源的真实性。 7. PDF表单处理:可以创建交互式...
- 使用iText,你可以创建一个新的PDF文档或打开一个现有的PDF模板。 - 添加静态内容如页眉、页脚、背景图片等,这些通常在模板设计阶段就固定下来。 2. **插入文字**: - iText提供了`ColumnText`类,可以方便地...
**正文** ITextPDF是一款强大的Java...无论你是新手还是经验丰富的开发者,都能通过学习和使用iTextPDF来提升报表开发的效率和质量。在实际项目中,结合具体的业务场景,善用iTextPDF将使你的报表更具专业性和个性化。
总结来说,PDF模板报表导出技术是通过编程方式利用如iText这样的工具,将动态数据与预设的PDF模板结合,生成结构化、标准化的报告。在这个场景中,提供的附件包括了一个可能用于填充数据的模板,以及iText库的两个...
此外,Itext还支持PDF模板,允许你在现有PDF上进行编辑和填充数据。 其次,`itext-asian-5.2.0.jar`是针对亚洲字符集的扩展库。由于PDF文档经常需要包含中日韩等语言的字符,这个库提供了对CJK(Chinese, Japanese,...
在IT行业中,利用Java从PDF模板中导出数据并设置保护是一项常见的需求,尤其是在文档自动化处理、报表生成或数据安全领域。以下是对这一主题的深入探讨,包括所需的技术栈、步骤详解以及潜在的安全措施。 ### 技术...
在这个项目中,我们看到标题和描述提到了使用SpringBoot来实现工资条的生成,这涉及到两个关键的技术:FreeMarker模板引擎和iTextPdf库。 首先,FreeMarker是一个强大的模板引擎,常用于动态生成HTML或其他类型的...
同样地,我们可以在Spring Boot应用中创建一个控制器或服务,接收PDF模板和填充数据,通过iText API找到模板中的特定字段并替换为实际值,生成新的PDF文件。 实现这一功能的过程大致分为以下步骤: 1. **模板准备*...
在这里,我们使用iTextPDF5来将HTML转换为PDF,因为HTML模板更易于设计和维护。 要实现从HTML模板生成PDF,我们需要以下步骤: 1. **设置依赖**:在Spring Boot项目的`pom.xml`文件中,添加iTextPDF5的依赖。确保...
1. **报表生成**:开发人员可以利用iText动态生成包含中文数据的PDF报告,例如财务报表、销售统计等。 2. **电子书籍制作**:在制作电子书时,iText可以帮助将中文文本转换为高质量的PDF格式,便于阅读和分享。 3. *...