java生成pdf并导出_Java利用模板生成pdf并导出

1.准备工作

2.开始制作pdf模板

(1)先用word做出模板界面

java生成pdf并导出_Java利用模板生成pdf并导出_第1张图片

(2)文件另存为pdf格式文件

java生成pdf并导出_Java利用模板生成pdf并导出_第2张图片

(3)通过Adobe Acrobat pro软件打开刚刚用word转换成的pdf文件

java生成pdf并导出_Java利用模板生成pdf并导出_第3张图片

(4)点击右边的"准备表单"按钮,选择"测试.pdf"选择开始(选择工具栏里面添加文本域,可以选择在任意位置添加你想要的文本域。在文本域属性框可以设置文本的属性,例如文本的名称、字体大小、位置等)

java生成pdf并导出_Java利用模板生成pdf并导出_第4张图片

java生成pdf并导出_Java利用模板生成pdf并导出_第5张图片

java生成pdf并导出_Java利用模板生成pdf并导出_第6张图片

(5)做完上面的工作后,直接"另存为"将pdf存储就可以

java生成pdf并导出_Java利用模板生成pdf并导出_第7张图片

到此模板就制作完成啦!接下来就开始写代码啦

3.开始导出pdf

(1)pdf工具类PdfUtil.java

import java.io.ByteArrayOutputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.Map;

import javax.servlet.ServletOutputStream;

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 PdfUtil {

/**

*

* @param o 写入的数据

* @param out 自定义保存pdf的文件流

* @param templatePath pdf模板路径

*/

// 利用模板生成pdf

public void fillTemplate(Map o,ServletOutputStream out,String templatePath) {

PdfReader reader;

ByteArrayOutputStream bos;

PdfStamper stamper;

try {

reader = new PdfReader(templatePath);// 读取pdf模板

bos = new ByteArrayOutputStream();

stamper = new PdfStamper(reader, bos);

AcroFields form = stamper.getAcroFields();

java.util.Iterator it = form.getFields().keySet().iterator();

while (it.hasNext()) {

String name = it.next().toString();

System.out.println(name);

String value = o.get(name)!=null?o.get(name).toString():null;

form.setField(name,value);

}

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) {

System.out.println(e);

} catch (DocumentException e) {

System.out.println(e);

}

}

}

(2)action文件里的方法调用PdfUtil生成pdf并导出

public String downloadFile(){

String json = ServletActionContext.getRequest().getParameter("json");

try {

json = java.net.URLDecoder.decode(json,"UTF-8"); //解码

} catch (UnsupportedEncodingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

JSONObject jsonObject = JSONObject.fromObject(json);

Map mapJson = JSONObject.fromObject(jsonObject);

HttpServletResponse response = ServletActionContext.getResponse();

// 设置response参数,可以打开下载页面

response.reset();

response.setCharacterEncoding("UTF-8");

// 定义输出类型

response.setContentType("application/PDF;charset=utf-8");

response.setHeader("Content-Disposition", "attachment; filename=" + "assessment.pdf");

try {

ServletOutputStream out = response.getOutputStream();

PdfUtil pdf = new PdfUtil();

pdf.fillTemplate(mapJson ,out,"模板pdf存放的路径");

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return null;

}

(3)js发起调用(如果用Ajax发起的调用就无法打开下载页面)

var json = {};

json.studyNum = "123456789";

json.name = "TOP__ONE";

json.sex = "男";

json.birthday = "1991-01-01";

json.id = "130222111133338888";

json.addr = "河北省保定市";

var strJson = encodeURIComponent(encodeURIComponent(JSON.stringify(json))); //编码

window.open( "../test/downloadFile.action?json="+strJson);

(4)运行结果如下

java生成pdf并导出_Java利用模板生成pdf并导出_第8张图片

你可能感兴趣的:(java生成pdf并导出)