itextpdf 利用模板生成pdf 下载

2024-01-19 17:50

本文主要是介绍itextpdf 利用模板生成pdf 下载,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、编辑pdf 模板,编辑表单域,用来填充内容,也可填充图片。利用Adobe Acrobat DC 工具制作模板

2、编写代码

生成后效果图如下

在这里插入图片描述

1、制作pdf模板

Adobe Acrobat DC 打开pdf文件,工具-> 准备表单

或者 右键->添加文本域

编辑好后如下图
在这里插入图片描述

2、代码部分

2.1、pom 文件引入依赖
<!-- pdf start -->
<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13</version>
</dependency>
<dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version>
</dependency>
<!-- pdf end -->
2.2、编写controller、页面请求下载
package com.example.pdfdemo.controller;import com.itextpdf.text.Image;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.*;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;@RestController
public class PDFController {/*** 模拟填充pdf的数据* key 对应模板中填充字段名*/public static Map<String,Map> mockData(){Map<String,Map> map = new HashMap<>();// 模板中需要填充的数据Map data = new HashMap<String, String>();data.put("name","Anna");data.put("age","23");data.put("phone","13888888888");data.put("email","123456@qq.com");data.put("address","上海市浦东新区");data.put("work","5年");data.put("projects","Here, fill in part of project experience" +"At least 2-3 years of NGO working experiences in gender program, with the specialty of promoting of women's rights and empowermen" +"at least 3 years working experience in automotive industry, oem project experiences will be a plus");//头像 图片 urlMap image = new HashMap<String, String>();image.put("image","D:\\PDF-TEST\\tx.jpg");map.put("data",data);map.put("image",image);return map;}@GetMapping("/pdf")public void downLoadPdf(HttpServletResponse response){try{//模板文件String sourceFile = "D:\\PDF-TEST\\blog.pdf";//下载后pdf名String fileName = "pdf-test";response.setHeader("content-disposition", "attachment;filename=" + fileName + ".pdf");response.setContentType("application/octet-stream");OutputStream out = response.getOutputStream();//输出到本地
//            FileOutputStream out = new FileOutputStream("D:\\test.pdf");//读取模板PdfReader  reader = new PdfReader(sourceFile);PdfStamper pdfStamper = new PdfStamper(reader, out);//设置字体格式BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);ArrayList<BaseFont> fontList = new ArrayList<>();fontList.add(baseFont);//获取模板文件中的表单域AcroFields afs = pdfStamper.getAcroFields();afs.setSubstitutionFonts(fontList);//填充文本dataMap data = mockData().get("data");for (Map.Entry<String, AcroFields.Item> entry : afs.getFields().entrySet()) {if (!CollectionUtils.isEmpty(data) && data.get(entry.getKey()) != null) {//Field , 这个是自己在pdf上定义的变量名称afs.setField(entry.getKey(), data.get(entry.getKey()).toString(), true);}}// 处理图片Map imageMap = mockData().get("image");for (Map.Entry<String, AcroFields.Item> entry : afs.getFields().entrySet()) {if (!CollectionUtils.isEmpty(imageMap) && imageMap.get(entry.getKey()) != null) {String key = entry.getKey();String value = imageMap.get(entry.getKey()).toString();int pageNo = afs.getFieldPositions(key).get(0).page;Rectangle signRect = afs.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();out.close();}catch (Exception e){e.printStackTrace();}}
}

这篇关于itextpdf 利用模板生成pdf 下载的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/623202

相关文章

使用python生成固定格式序号的方法详解

《使用python生成固定格式序号的方法详解》这篇文章主要为大家详细介绍了如何使用python生成固定格式序号,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... 目录生成结果验证完整生成代码扩展说明1. 保存到文本文件2. 转换为jsON格式3. 处理特殊序号格式(如带圈数字)4

Java使用Swing生成一个最大公约数计算器

《Java使用Swing生成一个最大公约数计算器》这篇文章主要为大家详细介绍了Java使用Swing生成一个最大公约数计算器的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下... 目录第一步:利用欧几里得算法计算最大公约数欧几里得算法的证明情形 1:b=0情形 2:b>0完成相关代码第二步:加

Java高效实现PowerPoint转PDF的示例详解

《Java高效实现PowerPoint转PDF的示例详解》在日常开发或办公场景中,经常需要将PowerPoint演示文稿(PPT/PPTX)转换为PDF,本文将介绍从基础转换到高级设置的多种用法,大家... 目录为什么要将 PowerPoint 转换为 PDF安装 Spire.Presentation fo

使用Java填充Word模板的操作指南

《使用Java填充Word模板的操作指南》本文介绍了Java填充Word模板的实现方法,包括文本、列表和复选框的填充,首先通过Word域功能设置模板变量,然后使用poi-tl、aspose-words... 目录前言一、设置word模板普通字段列表字段复选框二、代码1. 引入POM2. 模板放入项目3.代码

5 种使用Python自动化处理PDF的实用方法介绍

《5种使用Python自动化处理PDF的实用方法介绍》自动化处理PDF文件已成为减少重复工作、提升工作效率的重要手段,本文将介绍五种实用方法,从内置工具到专业库,帮助你在Python中实现PDF任务... 目录使用内置库(os、subprocess)调用外部工具使用 PyPDF2 进行基本 PDF 操作使用

k8s admin用户生成token方式

《k8sadmin用户生成token方式》用户使用Kubernetes1.28创建admin命名空间并部署,通过ClusterRoleBinding为jenkins用户授权集群级权限,生成并获取其t... 目录k8s admin用户生成token创建一个admin的命名空间查看k8s namespace 的

C#自动化实现检测并删除PDF文件中的空白页面

《C#自动化实现检测并删除PDF文件中的空白页面》PDF文档在日常工作和生活中扮演着重要的角色,本文将深入探讨如何使用C#编程语言,结合强大的PDF处理库,自动化地检测并删除PDF文件中的空白页面,感... 目录理解PDF空白页的定义与挑战引入Spire.PDF for .NET库核心实现:检测并删除空白页

Java实现为PDF设置背景色和背景图片

《Java实现为PDF设置背景色和背景图片》在日常的文档处理中,PDF格式因其稳定性和跨平台兼容性而广受欢迎,本文将深入探讨如何利用Spire.PDFforJava库,以简洁高效的方式为你的PDF文档... 目录库介绍与安装步骤Java 给 PDF 设置背景颜色Java 给 PDF 设置背景图片总结在日常的

Java轻松实现PDF转换为PDF/A的示例代码

《Java轻松实现PDF转换为PDF/A的示例代码》本文将深入探讨Java环境下,如何利用专业工具将PDF转换为PDF/A格式,为数字文档的永续保存提供可靠方案,文中的示例代码讲解详细,感兴趣的小伙伴... 目录为什么需要将PDF转换为PDF/A使用Spire.PDF for Java进行转换前的准备通过

C#使用iText获取PDF的trailer数据的代码示例

《C#使用iText获取PDF的trailer数据的代码示例》开发程序debug的时候,看到了PDF有个trailer数据,挺有意思,于是考虑用代码把它读出来,那么就用到我们常用的iText框架了,所... 目录引言iText 核心概念C# 代码示例步骤 1: 确保已安装 iText步骤 2: C# 代码程