springMVC(3)---利用pdf模板下载
springMVC(3)---利用pdf模板下载
在实际开发中,很多时候需要通过把数据库中的数据添加到pdf模板中,然后供客户下载,那我们该如何中呢?
本文主要内容是:用java在pdf模板中加入数据,图片
直接举例:
第一步,对pdf模板添加文本域
使用Adobe Acrobat Pro软件,选择表单,就可以添加文本域很简单。这里也可以设置字体大小,是否换行等

第二步、pom文件导入相关jar包
<!-- 注意:我一开始把这个放到pom.xml文件中,发现报错了,原因是我的本地mevan库中没有5.5.10版的,只有5.1.1和5.1.3于是我在网上下了个,再放到本地库,更新下项目就可以了 -->
<!-- itext 图片转pdf -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.10</version>
</dependency>
第三步,把pdf和照片素材放到项目中
这里我在resources下面新建了pdf文件夹,放到这里面

第四步、PdfController.java
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import com.itextpdf.text.Image;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper; @Controller
@RequestMapping("/jsp/exportpdf")
public class PdfController { @RequestMapping
public String pdfexport(HttpServletResponse response) {
// 指定解析器
System.setProperty("javax.xml.parsers.DocumentBuilderFactory",
"com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl"); String filename = "resume.pdf"; response.setContentType("application/pdf");
try {
//设置文件头:最后一个参数是设置下载文件名(这里我们叫:个人简历.pdf)
response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode("个人简历.pdf", "UTF-8"));
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
OutputStream os = null;
PdfStamper ps = null;
PdfReader reader = null;
try {
os = response.getOutputStream(); // 生成的新文件路径 ,这里指页面
/**
* class.getResource("/") --> 返回class文件所在的顶级目录,一般为包名的顶级目录
* 在这个目录中src/main/java和src/main/resources和src/test/java都是属于顶级目录
* 这里pdf/就属于顶级目录下的子目录了
*
*/
// 2 读入pdf表单
reader = new PdfReader(PdfController.class.getResource("/pdf/") + "resume.pdf"); // 3 根据表单生成一个新的pdf
ps = new PdfStamper(reader, os); // 4 获取pdf表单中所有字段
AcroFields form = ps.getAcroFields(); // 5给表单添加中文字体 这里采用系统字体。不设置的话,中文可能无法显示
BaseFont bf = BaseFont.createFont("C:/WINDOWS/Fonts/SIMSUN.TTC,1", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
form.addSubstitutionFont(bf); // 6查询数据
Map<String, Object> data = new HashMap<String, Object>();
data.put("xh", "1021229");
data.put("xm", "徐小筱"); // 7遍历data 给pdf表单表格赋值
for (String key : data.keySet()) {
form.setFieldProperty(key, "textfont", bf, null);// 设置字体
form.setField(key, data.get(key).toString());
} // 如果为false那么生成的PDF文件还能编辑,一定要设为true
ps.setFormFlattening(true); //添加图片: 通过域名获取所在页和坐标,左下角为起点 int pageNo = form.getFieldPositions("zp").get(0).page;
Rectangle signRect = form.getFieldPositions("zp").get(0).position;
float x = signRect.getLeft();
float y = signRect.getBottom(); // 读图片
String imgpath = PdfController.class.getResource("/pdf/") + "zhaopian.jpg";
Image image = Image.getInstance(imgpath); // 获取操作的页面
PdfContentByte under = ps.getOverContent(pageNo); // 根据域的大小缩放图片
image.scaleToFit(signRect.getWidth(), signRect.getHeight());
// 添加图片
image.setAbsolutePosition(x, y);
under.addImage(image); System.out.println("===============PDF导出成功=============");
} catch (Exception e) {
System.out.println("===============PDF导出失败=============");
e.printStackTrace();
} finally {
try {
ps.close();
reader.close();
os.close();
} catch (Exception e) {
e.printStackTrace();
}
} return null;
} }
第五步、jsp文件映射到Controller层
只要点击下载,文件就自动下载了
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<body>
<form action="exportpdf">
<input type="submit" value="下载">
</form>
</body>
</html>
最终结果:完美!

想的太多,做的太少,中间的落差就是烦恼,要么去做,要么别想 少尉【10】
springMVC(3)---利用pdf模板下载的更多相关文章
- 新知识:Java 利用itext填写pdf模板并导出(昨天奋战到深夜四点,知道今天两点终于弄懂)
废话少说,不懂itext干啥用的直接去百度吧. ***************制作模板******************* 1.先用word做出界面 2.再转换成pdf格式 3.用Adobe Acr ...
- 创建PDF模板,java添加内容、导出下载PDF
本文主要内容是:用java在pdf模板中加入数据,图片. 废话不多说,举个非常简单的例子: 首先创建word文档,导出PDF. 用 软件adobe acrobat打开,操作步骤如图: 在指定位置添加文 ...
- pdf 使用模板下载
//根据模板下载模板 /** * * 政策5-8条的创建的pdf的模板 */public String createPdfCashTemplate(PdfCashParam pdfCashParam) ...
- 《编程语言实现模式》【PDF】下载
<编程语言实现模式> 编程语言实现模式旨在传授构建语言应用(工具)的经验和理念,教读者构建自己的语言应用.这里的语言应用并非特指用编译器或解释器实现编程语言,而是泛指任何处理.分析.翻译输 ...
- 《About Face 3:交互设计精髓》【PDF】下载
<About Face 3:交互设计精髓>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230384328 内容简介 全书分成3篇:第1 ...
- FluentData-新型轻量级ORM 利用T4模板 批量生成多文件 实体和业务逻辑 代码
FluentData,它是一个轻量级框架,关注性能和易用性. 下载地址:FlunenData.Model 利用T4模板,[MultipleOutputHelper.ttinclude]批量生成多文件 ...
- 使用iTextSharp来填充PDF模板文件
需求简介: 遇到了这样一个需求:某公司需要为所有用户的培训生成一个培训记录,过程如下: (1)用户在培训完之后会进入到一个填写信息的界面. (2)用户填写信息. (3) ...
- 利用html模板生成Word文件(服务器端不需要安装Word)
利用html模板生成Word文件(服务器端不需要安装Word) 由于管理的原因,不能在服务器上安装Office相关组件,所以只能采用客户端读取Html模板,后台对模板中标记的字段数据替换并返回给客户端 ...
- PDF模板报表导出(Java+Acrobat+itext)
1. 首先要安装Adobe Acrobat,装好之后用Acrobat从一个word,excel或者pdf中转换一个pdf模板,我做的模板很简单,直接写一个简单的word再生成一个pdf表单,之后编辑文 ...
随机推荐
- 很考验人的java内存加载面试题
源代码如下,求结果 public class MemoryAnalyse { public static int k = 0; public static MemoryAnalyse t1 = new ...
- HTML基础--position 绝对定位 相对定位 锚点链接
position 定位属性,检索对象的定位方式 一.语法:position:static /absolute/relative/fixed 取值: 1.static:默认值,无特殊定位,对象遵循HTM ...
- MD5 SHA1 HMAC HMAC_SHA1区别
MD5.SHA1.HMAC.HMAC_SHA1区别 引言 什么是MD5,什么是SHA1,如何校验这些Hash.还有拿单个apk文件的MD5,SHA1讯问是不是原版的问题,在这里,让我们先来了解 ...
- ligerUI---ListBox(列表框可移动)
写在前面: 对于可移动的列表框,ligerui中也对其进行了封装,可以直接照着demo拿来用,不过那都是直接在页面上静态初始化的数据,那么如何从后台获取? 前面有了对ligerui的一些组件的使用经验 ...
- c++头文件重复引用问题
引子----之前写C++ 时遇到的坑 之前由于Java实在太好用了,C++的工程代码几乎没怎么碰,真的写起来的时候总会有些小bug,这里就对其中的一个进行个总结 a.h #include " ...
- 报Cannot change version of project facet Dynamic web module to 2.5 错误
maven项目老是报这个错误,上网找了很多方法,把Dynamic Web Module的Version改成了2.5,结果还是报错. 后来找到一个方法说在web.xml中,将version改为3.0,就 ...
- C#爬虫系列(二)——食品安全国家标准数据检索平台
上篇对“国家标准全文公开系统”的国标进行抓取,本篇对食品领域的标准公开系统“食品安全国家标准数据检索平台”进行抓取. 平台地址:http://bz.cfsa.net.cn/db 一.标准列表 第一步还 ...
- QTP日期格式化
'以下函数将日期参数进行格式转化,例如:2017-01-02 Function ShortDateToLongDate(strChangeDate) b=split(strChangeDate, ...
- 学问Chat UI(4)
前言 写这个组件是在几个月前,那时候是因为老大讲RN项目APP的通讯聊天部分后面有可能自己实现,让我那时候尝试着搞下Android通讯聊天UI实现的部分,在这期间,找了不少的Android原生项目:蘑 ...
- CSS书写规范与理论
前端体系的变化可谓是日新月异,短短一年时间,从理论.框架.构建工具.甚至开发语言都发生非常大的变化. 随着新项目就即将启动,我抽时间回顾了一下以往项目的前端架构,零零散散产生了许多想法,尽量一一记录下 ...