java 模板生成pdf文件

  • 1.准备工作
    • 1.1 安装Adobe Acrobat pro软件:用来制作导出模板
    • 1.2 用word 制作自己需要的模板,转成pdf格式
    • 1.3 使用Adobe Acrobat pro打开PDF
    • 1.4 复选框勾选
  • 2.java代码
    • 2.1 pom文件
    • 2.2生成代码
    • 2.3 输出到本地
    • 2.4 浏览器下载 (ajax请求无法下载)

1.准备工作

1.1 安装Adobe Acrobat pro软件:用来制作导出模板

1.2 用word 制作自己需要的模板,转成pdf格式



1.3 使用Adobe Acrobat pro打开PDF


1.4 复选框勾选

链接: 复选框勾选.

2.java代码

2.1 pom文件

 <!-- pdf样式 --><dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version></dependency><!--pdf相关操作--><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.10</version></dependency>

2.2生成代码

/*** 生成pdf文件** @param map          模板中数据的键值对   map 中存入两个键值对  文字填充("data",Map)图片填充("image",Map)* @param templatePath 模板路径* @return*/public static ByteArrayOutputStream generatePdf(Map<String, Map> map, String templatePath) {//生产pdfreaderPdfReader reader = null;try {reader = new PdfReader(templatePath);ByteArrayOutputStream bos = new ByteArrayOutputStream();/* 读取*/PdfStamper pdfStamper = new PdfStamper(reader, bos);/*设置字体格式*/BaseFont baseFont = BaseFont.createFont("C:/WINDOWS/Fonts/SIMSUN.TTC,1", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);ArrayList<BaseFont> fontList = new ArrayList<>();fontList.add(baseFont);AcroFields s = pdfStamper.getAcroFields();s.setSubstitutionFonts(fontList);/*Field , 这个是自己在pdf上定义的变量名称*/// 处理数据Map data = map.get("data");for (Map.Entry<String, AcroFields.Item> entry : s.getFields().entrySet()) {if (!CollectionUtils.isEmpty(data) && data.get(entry.getKey()) != null) {s.setField(entry.getKey(), data.get(entry.getKey()).toString(), true);}}// 处理图片Map imageMap = map.get("image");for (Map.Entry<String, AcroFields.Item> entry : s.getFields().entrySet()) {if (!CollectionUtils.isEmpty(imageMap) && imageMap.get(entry.getKey()) != null) {String key = entry.getKey();String value = imageMap.get(entry.getKey()).toString();int pageNo = s.getFieldPositions(key).get(0).page;Rectangle signRect = s.getFieldPositions(key).get(0).position;float x = signRect.getLeft();float y = signRect.getBottom();//根据路径读取图片Image image = Image.getInstance(value);//获取图片页面PdfContentByte under = pdfStamper.getOverContent(pageNo);//图片大小自适应image.scaleToFit(signRect.getWidth(), signRect.getHeight());//添加图片image.setAbsolutePosition(x, y);under.addImage(image);}}pdfStamper.setFormFlattening(true);pdfStamper.close();return bos;} catch (Exception e) {log.info("pdf文件生成失败");e.printStackTrace();}return null;}

2.3 输出到本地

/*** 输出本地** @param bos pdf字节流* @throws DocumentException* @throws IOException*/private void extracted(ByteArrayOutputStream bos) {Document doc = new Document();// 输出流FileOutputStream out = null;try {// 本地输出路径(可根据自己需要自定义)out = new FileOutputStream("F:\\" + System.currentTimeMillis() + ".pdf");PdfCopy copy = new PdfCopy(doc, out);doc.open();PdfImportedPage importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), 1);copy.addPage(importPage);doc.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (DocumentException e) {e.printStackTrace();}catch (IOException e){e.printStackTrace();}}

2.4 浏览器下载 (ajax请求无法下载)

/*** 浏览器下载** @param response* @param request* @param fileName 下载的文件名* @param bos      paf字节流* @return*/public static void getResponse(HttpServletResponse response, HttpServletRequest request, String fileName, ByteArrayOutputStream bos) {try {//将文件读入文件流InputStream inStream = new ByteArrayInputStream(bos.toByteArray());//获得浏览器代理信息final String userAgent = request.getHeader("USER-AGENT");//判断浏览器代理并分别设置响应给浏览器的编码格式String finalFileName = null;if (StringUtils.contains(userAgent, "MSIE") || StringUtils.contains(userAgent, "Trident")) {//IE浏览器finalFileName = URLEncoder.encode(fileName, "UTF8");} else if (StringUtils.contains(userAgent, "Mozilla")) {//google,火狐浏览器finalFileName = new String(fileName.getBytes(), "ISO8859-1");} else {//其他浏览器finalFileName = URLEncoder.encode(fileName, "UTF8");}//设置HTTP响应头//告知浏览器下载文件,而不是直接打开,浏览器默认为打开response.setContentType("application/x-download");//下载文件的名称response.addHeader("Content-Disposition", "attachment;filename=\"" + finalFileName + "\"");// 循环取出流中的数据byte[] b = new byte[1024];int len;while ((len = inStream.read(b)) > 0) {ServletOutputStream outputStream = response.getOutputStream();outputStream.write(b, 0, len);outputStream.flush();}inStream.close();response.getOutputStream().close();} catch (Exception e) {throw new CustomException("浏览器下载失败");}}

java 模板生成pdf文件相关推荐

  1. java 模板生成PDF文件 复选框勾选

    java 模板生成PDF文件 复选框勾选 // pdf填充时要有第三个参数s.setField("A", On, true);

  2. java 制作pdf模板,Java-pdf模板制作流程-使用pdf 模板生成pdf文件

    Java 使用pdf 模板生成pdf文件 --制作流程 1.      使用工具 adobe acrobat dc.word 2015 2.      使用 word 繪制一個 3*5 的表格並保存, ...

  3. Java根据模板生成pdf文件并导出

    原文地址:http://blog.csdn.net/TOP__ONE/article/details/65442390 首先你的制作一个pdf模板: 1.先用word做出模板界面 2.文件另存为pdf ...

  4. java 字符串转pdf文件_java中根据模板生成pdf文件

    原标题:java中根据模板生成pdf文件 阅读目录 简介 业务需求 引入jar包 pdf模板文件与方法参数 代码部分 总结归纳 回到顶部 简介 本文使用java引入apach提供的pdf操作工具生成p ...

  5. java根据模板生成pdf文件并导出(iText)

    java根据模板生成pdf文件并导出 首先你的制作一个pdf模板: 1.先用word做出模板界面 2.文件另存为pdf格式文件 3.通过Adobe Acrobat pro软件打开刚刚用word转换成的 ...

  6. java按模板生成pdf_java中根据模板生成pdf文件

    简介 本文使用java引入apache提供的pdf操作工具生成pdf文件,主要是根据需求开发了一个util类,记录一下学习和开发过程. 业务需求 因为业务需要,对于不同的用户要生成一个不同的pdf文件 ...

  7. java动态生成pdf文件的方法

    java动态生成pdf文件 文章目录 java动态生成pdf文件 前言 一.生成pdf模板 二.使用步骤 1.使用jar包 2.pdf实现方法 总结 前言 java开发过程中难免会遇到生成文件的需求, ...

  8. freemarker 模板生成pdf文件并下载

    利用freemarker 模板生成pdf文件,通过浏览器直接下载或生成文件到指定目录 1.pom.xml文件 <!--引入Freemarker的依赖--> <dependency&g ...

  9. itextpdf通过pdf模板生成pdf文件

    itextpdf通过pdf模板生成pdf文件,设置粗体字体 1.创建pdf模板 2.使用模板生成pdf 3.itext自带的字体列表 4.遇到的坑 1.创建pdf模板 可以使用PDFFescape网站 ...

  10. java导出pdf文件并下载_java根据模板生成pdf文件并导出

    1.首先需要依赖包:itext的jar包,我是maven项目,所以附上maven依赖 [html] view plain copy com.itextpdf itextpdf 5.5.10 [html ...

最新文章

  1. Fabric--启动网络手动
  2. java循环基础知识_java基础知识—循环结构
  3. PHP新闻APP,【优速软件】APP/小程序接口:全部新闻列表,POSCMS,CodeIgniter技术文档,PHP开发文档,迅睿CMS框架官方教程...
  4. AD RMS高可用(二)为rms群集服务器申请证书
  5. 父元素浮动子元素会浮动吗_为什么quot;overflow:hiddenquot;能清除浮动的影响
  6. Perl爬虫的简单实现
  7. 2021-09-02Hive 未被external修饰的是内部表,被external修饰的是外部表
  8. 怎么通过当地时区计算格林尼治_时间规划局:时间能看到,标注在你的手臂上,那时的你会怎么样...
  9. 期刊目录 核心期刊 计算机学术期刊等
  10. 【IDEA】解决: alt+/快捷键 冲突的问题
  11. As of Dart Sass 2.0.0 弃用 除法符号“/” element-ui自定义皮肤样式报错,但能运行
  12. THE、QS等四大世界大学排名对比 计算机专业究竟哪家强?
  13. jmeter基础(二)-JMeter证书
  14. CreateCompatibleDC 解释
  15. 一分钟读懂广告投放各计费CPM、CPC等(公式推导干货)
  16. wmf文件与emf文件
  17. Java实现 蓝桥杯VIP 基础练习 分解质因数
  18. js学到什么程度学框架_如何学到什么
  19. ANOMALY: use of REX.w is meaningless (default operand size is 64)问题处理
  20. 测试u盘内存的软件,memtest86+-2.11内存测试、测速软件

热门文章

  1. UE mac版16.10.0.22破解
  2. Windows 下缺少依赖库问题解决
  3. Panda-DEA,一款新的DEA模型软件
  4. Da黄蜂vep云课堂6.05录屏截屏提取为mp4教程
  5. 黑马程序员最新版JavaWeb综合案例(前后端完整版)
  6. H265视频转码H264视频
  7. oracle 高级dba,DAVE老师Oracle DBA高级运维深入解析实战班 高级DBA运维视频 Oracle视频教程...
  8. Java课程设计—— 图书管理系统
  9. 如何使用计算机中的导出,解决方案:如何使用Canon 2525i复印机将文档扫描到计算机中并生成PDF格式?...
  10. Android版本更新知识(检测、升级)总结