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表单,之后编辑文 ...
随机推荐
- 如何在 Centos7 中安装 nginx
1. 添加 nginx 的 yum 源(官网安装说明) vi /etc/yum.repos.d/nginx.repo 在该文件中添加如下内容: [nginx]name=nginx repobaseur ...
- python 批量修改数字类的文件名
今天碰到一个小问题,下载音频的时候,文件名的名字变成了数字,排序呢,是按照数字的大小往下排的. 想自己给它们重新起名字,但是又不打乱音频的顺序.好吧,那就自己写写代码吧. 思路就是遍历音频文件的数字文 ...
- SSH远程连接时间设置
SSH远程连接时间设置步骤: 1.回到根目录:cd // 2.进入ssh目录:cd etc/ssh 3.编辑sshd_config文件:vi sshd_config 4.按 i 进入编辑状态 5.找到 ...
- 学习MySQL(下)
具体实例 22.MySQL ALTER命令 当我们需要修改数据表名或者修改数据表字段时,就需要使用到MySQL ALTER命令. 1.如果需要修改数据表的名称,可以在 ALTER TABLE 语句中使 ...
- 三、Hadoop学习笔记————从MapReduce到Yarn
Yarn减轻了JobTracker的负担,对其进行了解耦
- react入门到进阶(一)
一.何为react Facebook在F8会议上首次提出这个概念,一套全新的框架就此诞生. React 不是一个完整的 MVC.MVVM 框架,其只负责 View 层 React 跟 Web Comp ...
- 简单说下 Winform 的分页快速开发框架必须要实现的几个功能之一
简单说下 Winform 的分页快速开发框架必须要实现的几个功能之一 分页非为前端分页 和 后端分页,前端分页只有适用于B/S,B/S的呈现速度远远不如C/S,而C/S则没有这个问题,所以分页必然是 ...
- 配置KindEditor富文本编辑器
第一步:首先我们要到KindEditor官网下载资源包-点击进入官网下载KindEditor资源包 第二部:在下载完了KindEditor的资源包后解压结构如下图所示: 里面包括集中语言的文件上传后台 ...
- openstack Keystone验证服务集群
#Keystone验证服务群集 openstack pike 部署 目录汇总 http://www.cnblogs.com/elvi/p/7613861.html ##.Keystone验证服务集群 ...
- webpack构建项目
webpack构建项目 案例代码戳这里 ps:每个案例对应相应的demo,例如"案例1"对应"demo1" 一.webpack基本功能及简单案例 安装webpa ...