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

相关文章

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd

Python操作PDF文档的主流库使用指南

《Python操作PDF文档的主流库使用指南》PDF因其跨平台、格式固定的特性成为文档交换的标准,然而,由于其复杂的内部结构,程序化操作PDF一直是个挑战,本文主要为大家整理了Python操作PD... 目录一、 基础操作1.PyPDF2 (及其继任者 pypdf)2.PyMuPDF / fitz3.Fre

Python实现PDF按页分割的技术指南

《Python实现PDF按页分割的技术指南》PDF文件处理是日常工作中的常见需求,特别是当我们需要将大型PDF文档拆分为多个部分时,下面我们就来看看如何使用Python创建一个灵活的PDF分割工具吧... 目录需求分析技术方案工具选择安装依赖完整代码实现使用说明基本用法示例命令输出示例技术亮点实际应用场景扩

SpringBoot集成EasyPoi实现Excel模板导出成PDF文件

《SpringBoot集成EasyPoi实现Excel模板导出成PDF文件》在日常工作中,我们经常需要将数据导出成Excel表格或PDF文件,本文将介绍如何在SpringBoot项目中集成EasyPo... 目录前言摘要简介源代码解析应用场景案例优缺点分析类代码方法介绍测试用例小结前言在日常工作中,我们经

SpringBoot+EasyPOI轻松实现Excel和Word导出PDF

《SpringBoot+EasyPOI轻松实现Excel和Word导出PDF》在企业级开发中,将Excel和Word文档导出为PDF是常见需求,本文将结合​​EasyPOI和​​Aspose系列工具实... 目录一、环境准备与依赖配置1.1 方案选型1.2 依赖配置(商业库方案)二、Excel 导出 PDF

python生成随机唯一id的几种实现方法

《python生成随机唯一id的几种实现方法》在Python中生成随机唯一ID有多种方法,根据不同的需求场景可以选择最适合的方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习... 目录方法 1:使用 UUID 模块(推荐)方法 2:使用 Secrets 模块(安全敏感场景)方法

一文详解如何使用Java获取PDF页面信息

《一文详解如何使用Java获取PDF页面信息》了解PDF页面属性是我们在处理文档、内容提取、打印设置或页面重组等任务时不可或缺的一环,下面我们就来看看如何使用Java语言获取这些信息吧... 目录引言一、安装和引入PDF处理库引入依赖二、获取 PDF 页数三、获取页面尺寸(宽高)四、获取页面旋转角度五、判断

SQL server数据库如何下载和安装

《SQLserver数据库如何下载和安装》本文指导如何下载安装SQLServer2022评估版及SSMS工具,涵盖安装配置、连接字符串设置、C#连接数据库方法和安全注意事项,如混合验证、参数化查... 目录第一步:打开官网下载对应文件第二步:程序安装配置第三部:安装工具SQL Server Manageme

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

基于 HTML5 Canvas 实现图片旋转与下载功能(完整代码展示)

《基于HTML5Canvas实现图片旋转与下载功能(完整代码展示)》本文将深入剖析一段基于HTML5Canvas的代码,该代码实现了图片的旋转(90度和180度)以及旋转后图片的下载... 目录一、引言二、html 结构分析三、css 样式分析四、JavaScript 功能实现一、引言在 Web 开发中,