springboot itextpdf 形式导出pdf

  1. 先看效果(这里只设置了软件版本和 完成情况的勾选框)
    在这里插入图片描述
  2. 导入pom依赖
<dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version>
</dependency>
<!--itextpdf-->
<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.10</version>
</dependency>
  1. 功能实现
package com.example.demotest.controller;import com.itextpdf.text.*;
import com.itextpdf.text.pdf.*;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.Map;@RestController
public class PdfController {/*** 导出pdf** @param response* @return* @author shaolin*/@PostMapping(value = {"/exportpdf"})public String exportPdf(HttpServletResponse response) throws IOException {// 指定解析器System.setProperty("javax.xml.parsers.DocumentBuilderFactory","com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");String filename = "pdf/计算机编号.pdf";response.setContentType("application/pdf");response.setHeader("Content-Disposition", "attachment;fileName="+ URLEncoder.encode(filename, StandardCharsets.UTF_8));OutputStream os = null;PdfStamper ps = null;PdfReader reader = null;try {os = response.getOutputStream();// 2 读入pdf表单Path path = Paths.get("pdf", "计算机编号.pdf");String pathing = path.toAbsolutePath().toString();// 输出文件路径reader = new PdfReader(pathing);// 3 根据表单生成一个新的pdfps = 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);
//            BaseFont bf = BaseFont.createFont("SimSun.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);form.addSubstitutionFont(bf);// 6查询数据================================================Map<String, Object> data = new HashMap<String, Object>();data.put("deptName", "测试部门");data.put("version", "1");// 7遍历data 给pdf表单表格赋值for (String key : data.keySet()) {form.setField(key, data.get(key).toString());}// 多选框设置,  name是名称, value 是导出值ps.setFormFlattening(true);form.setField("test", "On", true);//            -----------------------------pdf 添加图片----------------------------------
//            通过域名获取所在页和坐标,左下角为起点System.out.println("pdf 添加图片");
//            String imgpath = "e:/美女.png";
//            int pageNo = form.getFieldPositions("img").get(0).page;
//            Rectangle signRect = form.getFieldPositions("img").get(0).position;
//            float x = signRect.getLeft();
//            float y = signRect.getBottom();
//            // 读图片
//            Image image = Image.getInstance(imgpath);
//            // 获取操作的页面
//            PdfContentByte under = ps.getOverContent(pageNo);
//            // 根据域的大小缩放图片
//            image.scaleToFit(signRect.getWidth(), signRect.getHeight());
//            // 添加图片
//            image.setAbsolutePosition(x, y);
//            under.addImage(image);} catch (DocumentException e) {throw new RuntimeException(e);} finally {try {ps.close();reader.close();os.close();} catch (Exception e) {e.printStackTrace();}}return null;}}
  1. 对应项目路径截图
    在这里插入图片描述

  2. 模板设置,这里使用的是adobe2024版

在这里插入图片描述

4.1 对于数字和文字的设置为文本域
在这里插入图片描述
4.2 双击截图里的文本域,出现下图所示,名称,这个名称就是你的字段名称
在这里插入图片描述
如果要显示中文,在外观这里设置宋体, 不然导出pdf 文字不显示
在这里插入图片描述

  1. 单选框功能实现
    5.1 选择复选框
    在这里插入图片描述
    5.2 设置字段名,以及字段值和展示的形式(例如框内是对勾,还是个黑点,等等)

在这里插入图片描述
在这里插入图片描述
对应代码里的(这里要设为true才行,不然框里也不显示对勾)
form.setField(“test”, “On”, true);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1543737.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

C++之初识STL(概念)

STL&#xff08;标准模板库&#xff09; STL广义分类为&#xff1a;容器&#xff0c;算法&#xff0c;迭代器 * **容器**和**算法**之间通过**迭代器**进行无缝连接 意义&#xff1a;C的**面向对象**和**泛型编程**思想&#xff0c;目的就是**复用性的提升** STL六大组件 1. 容…

Flink 本地启动的多种方式

Flink 本地启动的多种方式 Application模式通过代码提交到Yarn上启动 //设置Yarn客户端 YarnClient yarnClient ; Configuration configuration new Configuration(); if (customConfiguration ! null) {configuration.addAll(customConfiguration); } configuration.set(Jo…

PostgreSQL的学习心得和知识总结(一百五十一)|[performance] PostgreSQL列对齐

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《PostgreSQL数据库内核分析》 2、参考书籍&#xff1a;《数据库事务处理的艺术&#xff1a;事务管理与并发控制》 3、PostgreSQL数据库仓库…

九泰智库 | 医械周刊- Vol.59

⚖️ 法规动态 国家药监局&#xff1a;截至目前已批准296个创新医疗器械上市 近日&#xff0c;国家药监局在“推动高质量发展”系列主题新闻发布会介绍。截至目前&#xff0c;国家药监局已批准296个创新医疗器械上市&#xff0c;这些创新医疗器械主要集中在植介入类设备、高端…

孤独伤感视频素材哪里找?分享热门伤感短视频素材资源网站

你是不是也经常在抖音上刷到很火的伤感视频&#xff0c;那么伤感视频素材都在哪里可以下载呢&#xff1f;作为一名从业多年的视频剪辑师&#xff0c;今天就跟大家聊聊那些可以下载伤感素材高清无水印的网站&#xff0c;如果你也在苦苦找寻伤感素材&#xff0c;快来看看吧&#…

基于Es和智普AI实现的语义检索

1、什么是语义检索 语义检索是一种利用自然语言处理&#xff08;NLP&#xff09;和人工智能&#xff08;AI&#xff09;技术来理解搜索查询的语义&#xff0c;以提供更准确和相关搜索结果的搜索技术&#xff0c;语义检索是一项突破性的技术&#xff0c;旨在通过深入理解单词和…

yolov5训练后自动保存打印到屏幕的性能信息

Windows环境&#xff1a; 执行train程序结束之后&#xff0c;会在屏幕打印下列信息&#xff1a; 我们在进行多轮训练时&#xff0c;性能信息不能及时保存&#xff0c;键入以下代码&#xff0c;可自动保存 #放在引入模块后面 sys.stdout open(train_output.txt, w) #这两行代…

音视频入门基础:FLV专题(2)——使用FFmpeg命令生成flv文件

通过FFmpeg命令可以合并视频和音频。比如合并mp4文件中的视频和AAC裸流&#xff08;关于AAC裸流具体可以参考&#xff1a; 《音视频入门基础&#xff1a;AAC专题&#xff08;2&#xff09;——使用FFmpeg命令生成AAC裸流文件》&#xff09;中的音频&#xff0c;生成FLV文件&…

string map练习

to_string 在<string>头文件的std命名空间中 要格式化写浮点型入字符串用 2.map 直接尾插 set,map同方法&#xff0c;map只是把键变为pair键值对 4. string的花括号隐式类型转换不能字母个数字母&#xff0c;会被认为是初始化列表&#xff0c;而不是个数加字母的隐式类…

SpringBoot 整合 apache fileupload 轻松实现文件上传与下载(通用版)

我们以Thymeleaf页面模板引擎为例&#xff0c;简单介绍利用 apache fileupload 工具实现文件上传的功能。 2.1、添加相关依赖包 首先创建一个基础的 Spring Boot 项目&#xff0c;并引入相关的依赖包。 2.2、添加相关配置参数 2.3、文件上传示例 对应文件上传的Controller类&…

QT设计中文输入法软键盘DLL给到C#开发步骤

开发目的&#xff1a;本文提供解决触摸屏C#程序中无法输入中文问题&#xff0c;中文拼音采用开源的谷歌输入法程序、使用QT编译中文输入法界面和中文输入法接口给到C#使用。 开发步骤&#xff1a; 1、QT中设计字母和字符输入界面 2、QT中设计数字输入界面 3、QT中封装调用谷歌…

深度学习:卷积神经网络CNN

目录 一、什么是卷积&#xff1f; 二、卷积神经网络的组成 1. 卷积层 2. 池化层 3. 激活函数 4. 全连接层 三、卷积神经网络的构造 四、代码实现 1.数据预处理 2.创建卷积神经网络 3.创建训练集和测试集函数 4.创建损失函数和优化器并进行训练 一、什么是卷积&…

LPDDR4芯片学习(一)——基础知识与引脚定义

一、基础知识 01 dram基本存储单元 当需要将一位数据存储到DRAM中时&#xff0c;晶体管会充电或放电电容。充电的电容表示逻辑高&#xff08;1&#xff09;&#xff0c;放电的电容表示逻辑低&#xff08;0&#xff09;。由于电容会随着时间泄漏电荷&#xff0c;因此需要定期刷…

学习记录:js算法(四十三):翻转二叉树

文章目录 翻转二叉树我的思路网上思路递归栈 总结 翻转二叉树 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点 图一&#xff1a; 图二&#xff1a; 示例 1&#xff1a;&#xff08;如图一&#xff09; 输入&#xff1a;root [4,2,7,1…

Python记录

1.冒泡排序 时间复杂度O&#xff08;n^2) 选择、插入都是 def bubble(data, reverse):for i in range(len(data)-1):for j in range(len(data)-i-1):if data[j] > data[j1]:data[j], data[j1] data[j1], data[j]if reverse:data.reverse()return data 2.快速排序 时间…

护理陪护小程序|陪护系统||陪护系统开发

在当今社会&#xff0c;随着人口老龄化的加剧和家庭结构的变化&#xff0c;护理与陪护服务的需求日益增长。为了更好地满足这一市场需求&#xff0c;并提升服务效率与质量&#xff0c;护理陪护小程序应运而生。这类小程序不仅为用户提供了便捷、高效的服务预约与管理平台&#…

828华为云征文 | 云服务器Flexus X实例,Docker集成搭建Redis集群

828华为云征文 | 云服务器Flexus X实例&#xff0c;Docker集成搭建Redis集群 Redis 集群是一种分布式的 Redis 解决方案&#xff0c;能够在多个节点之间分片存储数据&#xff0c;实现水平扩展和高可用性。与传统的主从架构不同&#xff0c;Redis 集群支持数据自动分片、主节点故…

J Transl Med结肠癌分子分型+简单实验

目录 技术路线 实验设计&#xff08;药物敏感性&#xff09; 亮点 方法 从 TCGA 和 GEO 数据库下载大量和单细胞 RNA 测序以及 CRC 的临床数据。HRGs 和 LMRGs 来自分子特征数据库。使用 R 软件包 DESeq2 进行差异表达分析。使用无监督聚类进行分子亚型。使用单变量 Cox 回…

嘉宾云集旌城 只为大赛而来 2024ISGC国际烈酒(中国)大奖赛在德阳落下帷幕

秋高气爽、古蜀之源&#xff0c;迎来第六届国际烈酒&#xff08;中国&#xff09;大奖赛&#xff1b;五谷丰登、重装之都&#xff0c;齐聚百名国际烈酒大奖赛评委。 9月18日&#xff0c;由德阳市人民政府、国家葡萄酒及白酒露酒产品质量检验检测中心、上海合作组织多功能经贸平…

图片压缩怎么弄?教你5种图片压缩小技巧

现如今&#xff0c;图片已成为我们日常生活和工作不可或缺的一部分。然而&#xff0c;高清图片往往伴随着庞大的文件体积&#xff0c;给存储和传输带来诸多不便。这时候我们就需要对图片进行适当的压缩处理&#xff0c;那么该怎么做呢&#xff1f;下面教大家5种图片压缩小技巧&…