java运用itextpdf实现根据模板生成合同并返回网络路径,供用户查看
来源:互联网 发布:java游戏编程入门pdf 编辑:程序博客网 时间:2024/04/30 19:21
最近业务需求,需要生成合同展现给用户,研究了下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);}}
阅读全文
0 0
- java运用itextpdf实现根据模板生成合同并返回网络路径,供用户查看
- java 编码填充 word 模板生成 word合同,并将word合同转成pdf 文档
- java 使用itextpdf.jar和itext-asian.jar根据pdf模板填写数据后生成一个新的pdf文件
- Java根据模板生成excel并下载
- 6-jacob实现根据模板生成文件并打印
- jacob实现根据模板生成文件并打印
- poi实现根据excel模板,生成excel并导入数据
- java实现pdf的生成下载打印,java生成pdf电子账单,java生成pdf合同模板
- java根据模板生成pdf文件并导出
- java根据模板生成pdf文件并导出(转)
- java-pdf-itext7、itextpdf 生成pdf 文档,使用pdf模板生成(支持中文字体)
- java 生成多个excel文件并打成zip包供用户下载
- Java 根据路径生成文件夹
- java 根据模板,导出word并提供下载
- JAVA swing 根据路径查看图片
- 根据路径获得图片并压缩返回bitmap用于显示
- 根据路径获得图片并压缩,返回bitmap用于显示
- java根据模板生成word文件
- linux进程管理
- LeetCode 328. Odd Even Linked List
- Mysql INT类型最大值探讨
- 登陆窗口进阶版
- sqlServer 更新一列为行号问题
- java运用itextpdf实现根据模板生成合同并返回网络路径,供用户查看
- How to install the Guake Terminal
- 关于播放器锁屏图片不显示问题
- 计算1/1-1/2+1/3-1/4+1/5 …… + 1/99
- window环境下安装及使用composer[初体验篇]
- 001-spring boot 之helloworld
- 微信小程序ajax请求绑定数据简单实例
- 用python爬取我的百度经验目录
- Session和cookie