java运用itextpdf实现根据模板生成合同并返回网络路径,供用户查看
最近业务需求,需要生成合同展现给用户,研究了下itextpdf,基本实现需求,参考http://blog.csdn.net/top__one/article/details/65442390
具体实现步骤如下:
1、maven引入所需jar
<dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.3.4</version> </dependency><dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version></dependency>
注:itextpdf注意版本问题,有些版本就会引起jar包冲突,这个版本是可以的
2、运用wps,编辑模板文本,最后运用wps特色功能生成PDF
3、下载Adobe Acrobat Pro DC 这个是收费的,可以先试用进行测试
用Adobe Acrobat Pro DC打开刚生成的PDF文件,进行编辑选择标红部分下拉框中的“准备表单”
选择标红工具,对需要自动填充的属性进行标注
下图为我标注的属性
至此,模板生成,保存为test.pdf。
4、java代码,根据模板生成相应的文件
package com.loantest.controller;
import java.awt.Color;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;import javax.servlet.ServletContext;import org.springframework.web.context.ContextLoader;
import org.springframework.web.context.WebApplicationContext;import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.PdfCopy;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper; public class ITextPdfTest { // 利用模板生成pdf public static void fillTemplate() throws IOException, DocumentException { String templatePath ="E:/test.pdf"; // 生成的新文件路径 String newPDFPath = "E:/test1.pdf";PdfReader reader; FileOutputStream out; ByteArrayOutputStream bos; PdfStamper stamper; try { out = new FileOutputStream(newPDFPath);// 输出流 reader = new PdfReader(templatePath);// 读取pdf模板 bos = new ByteArrayOutputStream(); stamper = new PdfStamper(reader, bos); AcroFields form = stamper.getAcroFields(); String[] contactInfo = {"TOP__ONE1几经师傅", "132323231几经师傅","几经师傅1234567891" }; int i = contactInfo.length-1; java.util.Iterator<String> it = form.getFields().keySet().iterator(); while (it.hasNext()) { String name = it.next().toString(); form.setField(name, contactInfo[i]); i--;} stamper.setFormFlattening(true);// 如果为false那么生成的PDF文件还能编辑,一定要设为true stamper.close(); Document doc = new Document(); PdfCopy copy = new PdfCopy(doc, out); doc.open(); PdfImportedPage importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), 1); copy.addPage(importPage); doc.close(); } catch (IOException e) { e.getStackTrace();} catch (DocumentException e) { e.getStackTrace();} } public static void main(String[] args) throws IOException, DocumentException {fillTemplate();}
}
模板文件路径,生成文件路径如下图:
运行代码,打开test1:
至此,成功,这是简单的测试。
5、如果需要从取服务器上文件模板,生成到服务器上则需稍微处理一下,就只贴代码吧~
package com.loantest.controller;import java.awt.Color;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;import javax.servlet.ServletContext;import org.springframework.web.context.ContextLoader;
import org.springframework.web.context.WebApplicationContext;import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.PdfCopy;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;public class ITextPdf {// 利用模板生成pdfpublic static String fillTemplate(String[] contactInfo) throws IOException, DocumentException {WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();ServletContext servletContext = webApplicationContext.getServletContext();String os = System.getProperty("os.name");// 默认为win系统String relativeTemplatePath = "\\static\\test5.pdf";String relativeNewPDFPath = "\\static\\" + (int) ((Math.random() * 9 + 1) * 100000) + ".pdf";// 非win系统if (!os.toLowerCase().startsWith("win")) {relativeTemplatePath = "/static/test5.pdf";relativeNewPDFPath = "/static/" + (int) ((Math.random() * 9 + 1) * 100000) + ".pdf";}// 模板路径String templatePath = servletContext.getRealPath(relativeTemplatePath);// 生成的新文件路径String newPDFPath = servletContext.getRealPath(relativeNewPDFPath);PdfReader reader;FileOutputStream out;ByteArrayOutputStream bos;PdfStamper stamper;try {out = new FileOutputStream(newPDFPath);// 输出流reader = new PdfReader(templatePath);// 读取pdf模板bos = new ByteArrayOutputStream();stamper = new PdfStamper(reader, bos);AcroFields form = stamper.getAcroFields();int i = contactInfo.length - 1;java.util.Iterator<String> it = form.getFields().keySet().iterator();while (it.hasNext()) {String name = it.next().toString();form.setField(name, contactInfo[i]);i--;}stamper.setFormFlattening(true);// 如果为false那么生成的PDF文件还能编辑,一定要设为truestamper.close();Document doc = new Document();PdfCopy copy = new PdfCopy(doc, out);doc.open();PdfImportedPage importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), 1);copy.addPage(importPage);doc.close();} catch (IOException e) {e.getStackTrace();} catch (DocumentException e) {e.getStackTrace();}System.out.println(relativeNewPDFPath);return relativeNewPDFPath;}public static void main(String[] args) throws IOException, DocumentException {String[] str = { "TOP__ONE1几经师傅", "132323231几经师傅", "几经师傅1234567891" };fillTemplate(str);}
}
java运用itextpdf实现根据模板生成合同并返回网络路径,供用户查看相关推荐
- Java/web/jsp根据pdf模板生成荣誉证书PDF文件
Java/web/jsp根据pdf模板生成荣誉证书PDF文件 1.前言 最近博主在开发一个大学生学分管理系统,按照对方用户的要求,他们需要一个生成PDF荣誉证书的功能. 于是Java根据pdf模板生成 ...
- Java使用Itext5与html模板生成pdf并支持下载
Java使用Itext5与html模板生成pdf 文章目录 Java使用Itext5与html模板生成pdf 前言 一.引入依赖 二.相关使用说明 1.工具类 2.模板配置 3.模板的抽象类(定义了相 ...
- itextpdf通过pdf模板生成pdf文件
itextpdf通过pdf模板生成pdf文件,设置粗体字体 1.创建pdf模板 2.使用模板生成pdf 3.itext自带的字体列表 4.遇到的坑 1.创建pdf模板 可以使用PDFFescape网站 ...
- apache poi使用例_使用java Apache poi 根据word模板生成word报表例子
[实例简介] 使用java Apache poi 根据word模板生成word报表 仅支持docx格式的word文件,大概是word2010及以后版本,doc格式不支持. 使用说明:https://b ...
- 使用java Apache poi 根据word模板生成word报表
使用java Apache poi 根据word模板生成word报表 使用poi读取word模板,替换word中的{text}标签,并根据自定义标签循环生成表格或表格中的行. 代码示例下载:https ...
- java itextpdf使用HTML模板生成pdf文件,并设置table
我们这里是maven项目,导入相应jar包: <dependency><groupId>org.freemarker</groupId><artifactId ...
- java pdf工具类_Java PDF工具类(一)| 使用 itextpdf 根据PDF模板生成PDF(文字和图片)...
Java PDF工具类(一)| 使用 itextpdf 根据设置好的PDF模板填充PDF(文字和图片) 相关文章: Java PDF工具类(二)| 使用 wkhtmltox 实现 HTML转PDF(文 ...
- JAVA根据word模板生成合同,并能实现网页在线浏览/打印/下载
最近, 项目有这样一个需求: 根据我选择的模板(docx文件),和我表单填的数据,生成相应的合同文件(docx),该合同要能网页在线浏览/打印/下载在合同中还要放置签字图片和身份证图片 我 ...
- JAVA使用POI-TL通过Word模板生成Word文件
技术背景 很多时候我们网站或者系统需要提供一些word文件,例如证明.docx或者订单.docx等文件供用户下载打印等. 用Java操作word文档,毫无疑问,当下最流行apache poi,对于po ...
最新文章
- 在Ubuntu中自动运行KMS服务
- MIPI参数配置解释
- leetcode - Single Number
- Change default duration for Fiori Toast
- 百度SEO抖音无水印解析网站源码
- python编程技术总结_Python面向对象编程(OOP)技术总结
- 会mysql不会sql_不是吧,不会有人还不知道MySQL中具实用的SQL语句
- MongoDB学习笔记~官方驱动的原生Curd操作
- sklearn.ensemble.RandomForestRegressor参数含义
- 专利:专利说明书的主要组成部分
- Analog Trunk Features (模拟中继特征)
- 谷歌Flan-T5诞生!1800种语言任务超大规模微调
- 20191025 前端开发日报
- 学机器视觉好找工作吗?人工智能机器视觉方向怎么样?
- 解放前端工程师——手把手教你开发自己的自定义列表和自定义表单系列之二接口
- 艾永亮:打造超级产品做到这五点,有效提高用户对企业的印象
- mybatis和spring框架的整合
- 《产品经理心得》02:表单提示和输入验证方案
- Hadoop权威指南——关于Sqoop
- C语言程序设计(第三版)何钦铭著 习题4-6
热门文章
- MATLAB安装后出现“License Manager Error -8?”,替换文档时报错解决方法
- CodeSoft模板问题--字体扭曲条码无法扫描
- 【python】【转调】用python程序实现简谱转调
- 小学教师计算机课评课,信息技术公开课的评课
- 分布式操作系统 淘宝 服务器,什么是分布式操作系统?
- couchbase java view_java连接couchbase的memcache
- 瑞盟视频数模转换器MS2502-适合于数字电视、电脑视频处理及雷达信号处理等数字视频应用
- CAN总线(二)——CAN2.0标准与协议分析
- android 根目录 文件 打包,Android image文件的打包和解包
- 【webrtc】RTPSender