当前位置: 首页 > news >正文

根据PDF模板单个PDF导出到浏览器和多个PDF打包ZIP导出到浏览器

一、单个PDF导出到浏览器
 

    /*** * @param templatePath 模板路径* @param fileName 文件名称* @param data 填充文本* @param images 填充图片* @param response* @throws IOException*/public static void generateTempPDF(String templatePath, String fileName, Map<String, String> data , Map<String, String> images, HttpServletResponse response) throws IOException {fileName = URLEncoder.encode(fileName, "UTF-8");// 设置响应头response.setContentType("application/force-download");response.setHeader("Content-Disposition","attachment;fileName=" + fileName);PdfReader reader = null;PdfStamper ps = null;OutputStream fos = null;ByteArrayOutputStream bos = null;try {//模板路径templatePathreader = new PdfReader(templatePath);bos = new ByteArrayOutputStream();ps = new PdfStamper(reader, bos);// 使用中文字体BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);ArrayList<BaseFont> fontList = new ArrayList<>();fontList.add(bf);AcroFields fields = ps.getAcroFields();fields.setSubstitutionFonts(fontList);fillData(fields, data);//渲染//插入图片if (EmptyUtils.isNotEmpty(images)) {fillImage(fields, ps,images);}//必须要调用这个,否则文档不会生成的ps.setFormFlattening(true);if(ps != null){ps.close();}// 保存到本地// fos = new FileOutputStream(exportPath);// 输出到浏览器端fos = response.getOutputStream();fos.write(bos.toByteArray());}catch (Exception e){e.printStackTrace();}finally {if(fos!=null){fos.flush();fos.close();}if (bos != null){bos.close();}if(reader != null){reader.close();}}}

二、多个PDF文件压缩ZIP输出浏览器

 @Overridepublic void exportZip(List<Long> ids, HttpServletResponse response) throws IOException {response.setContentType("application/zip");response.setHeader("Content-Disposition", "attachment; filename=weighbridge_records.zip");try (ZipOutputStream zos = new ZipOutputStream(response.getOutputStream())) {for (Long id: ids) {// 业务代码String fileName = aaa.pdf;Map<String, String> data = new HashMap<>();// 生成 PDF 文件到 ByteArrayOutputStreamByteArrayOutputStream bos = new ByteArrayOutputStream();//模板路径String templatePath = templateProperties.getPath() + "\\weighbridge_record.pdf";generateTempPDF(templatePath, fileName, data, null, bos);// 将生成的 PDF 文件写入 ZIPZipEntry zipEntry = new ZipEntry(fileName);zos.putNextEntry(zipEntry);zos.write(bos.toByteArray());zos.closeEntry();bos.close();}} catch (IOException e) {e.printStackTrace();} catch (DocumentException e) {throw new RuntimeException(e);}}
public static void generateTempPDF(String templatePath, String fileName, Map<String, String> data, Map<String, String> images, ByteArrayOutputStream bos) throws IOException, DocumentException {PdfReader reader = null;PdfStamper ps = null;try {reader = new PdfReader(templatePath);ps = new PdfStamper(reader, bos);BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);ArrayList<BaseFont> fontList = new ArrayList<>();fontList.add(bf);AcroFields fields = ps.getAcroFields();fields.setSubstitutionFonts(fontList);fillData(fields, data); // 渲染// 插入图片if (EmptyUtils.isNotEmpty(images)) {fillImage(fields, ps, images);}ps.setFormFlattening(true);} catch (Exception e) {e.printStackTrace();} finally {if (ps != null) {ps.close();}if (reader != null) {reader.close();}}}

相关文章:

根据PDF模板单个PDF导出到浏览器和多个PDF打包ZIP导出到浏览器

一、单个PDF导出到浏览器 /*** * param templatePath 模板路径* param fileName 文件名称* param data 填充文本* param images 填充图片* param response* throws IOException*/public static void generateTempPDF(String templatePath, String fileName, Map<String, S…...

如何创建一个基本的Spring Boot应用程序

以下是一个简单的Spring Boot应用开发代码示例&#xff0c;它展示了如何创建一个基本的Spring Boot应用程序&#xff0c;并实现一个简单的RESTful API服务。 步骤1&#xff1a;创建项目 使用Spring Initializr或您喜欢的IDE&#xff08;如IntelliJ IDEA或Eclipse&#xff09;…...

1.2 计算机网络的分类和应用(重要知识点)

1.2.1 计算机网络的分类 计算机网络的定义&#xff1a; 由通信线路互相连接的、能自主工作的计算机构成&#xff0c;强调各计算机&#xff08;工作站&#xff09;拥有独立的计算资源和任务能力。与多终端分时系统不同&#xff0c;后者终端仅作为主机接口&#xff0c;不具备计…...

@JsonSerialize失效解决

当在实体类中加入这个注解时&#xff0c;本意是想如果是空值则返回0给页面&#xff0c;但是发现使用 JsonSerialize(using BigSerializer.class)无效&#xff0c;因为如果是null值会不走序列化的接口实现类&#xff0c;需要使用nullUsing 需要这样使用...

Docker部署WebRTC-Streamer

文章目录 WebRTC-Streamer概述Docker部署WebRTC-StreamerVue使用WebRTC-Streamer一些问题 WebRTC-Streamer概述 WebRTC-Streamer是一个基于WebRTC技术的流媒体传输工具&#xff0c;它可以通过Web浏览器实现实时音视频流的传输和播放。它提供了一种简单而强大的方式&#xff…...

2025年的大模型计划重点在于跨领域智能、工作流自动化、多模态能力强化

明年的计划和大模型发展方向可以围绕以下几个方面展开&#xff0c;结合实际应用场景和技术趋势&#xff0c;明确可执行的目标和期待的成果&#xff1a; 2025 年计划与展望&#xff1a;大模型能做些什么&#xff1f; 1. 更深层次的跨领域能力融合 目标&#xff1a;构建更强的跨…...

day12 接口测试 ——入门→精通→实战(1)

【没有所谓的运气&#x1f36c;&#xff0c;只有绝对的努力✊】 目录 1、接口测试分类 1.1 内部接口&#xff1a; 1.2 外部接口&#xff1a; 2、目前接口架构设计 2.1、基于SOAP架构&#xff0c; 2.2、基于RPC架构&#xff0c; 2.3、基于RestFul架构&#xff0c; 2.3.1…...

伏羲0.07(文生图)

为了使0.06代码能够有效运行并输出项目目录及所有文件&#xff0c;我们在代码中添加一些额外的功能。 项目目录结构 项目目录结构如下&#xff1a; text_to_image_project/ │ ├── config.yaml ├── data/ │ ├── train_data.csv │ └── test_data.txt ├── mod…...

scala的泛型特质的应用场景

//泛型特质的应用场景 //作比较找出最大值 //定义一个函数&#xff0c;用来求List元素中的最大值参考代码&#xff1a;object Test4 {def getMax[T](list:List[T])(implicit ev:T > Ordered[T]): T {list.reduce((a:T,b:T)> if(a>b) a else b)}def main(args: Array…...

Win10环境vscode+latex+中文快速配置

安装vscodelatex workshop 配置&#xff1a; {"liveServer.settings.donotVerifyTags": true,"liveServer.settings.donotShowInfoMsg": true,"explorer.confirmDelete": false,"files.autoSave": "afterDelay","exp…...

【vue2】el-select,虚拟滚动(vue-virtual-scroller)

需求背景​​​​​​ vue2+element-ui项目中,当el-select中数据量较大时(超出5000个dom节点),会导致页面加载和渲染卡顿、el-select下拉列表延迟展开。 在现在的el-select的基础上使用分页或者虚拟列表的形式去处理大量的下拉菜单,可以保证页面的正常渲染及el-select的…...

【ETCD】[源码阅读]深度解析 EtcdServer 的 processInternalRaftRequestOnce 方法

在分布式系统中&#xff0c;etcd 的一致性与高效性得益于其强大的 Raft 协议模块。而 processInternalRaftRequestOnce 是 etcd 服务器处理内部 Raft 请求的核心方法之一。本文将从源码角度解析这个方法的逻辑流程&#xff0c;帮助读者更好地理解 etcd 的内部实现。 方法源码 …...

【RabbitMQ】RabbitMQ中核心概念交换机(Exchange)、队列(Queue)和路由键(Routing Key)等详细介绍

博主介绍&#xff1a;✌全网粉丝21W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

【AI知识】过拟合、欠拟合和正则化

一句话总结&#xff1a; 过拟合和欠拟合是机器学习中的两个相对的概念&#xff0c;正则化是用于解决过拟合的方法。 1. 欠拟合&#xff1a; 指模型在训练数据上表现不佳&#xff0c;不能充分捕捉数据的潜在规律&#xff0c;导致在训练集和测试集上的误差都很高。欠拟合意味着模…...

计算机毕设-基于springboot的航空散货调度系统的设计与实现(附源码+lw+ppt+开题报告)

博主介绍&#xff1a;✌多个项目实战经验、多个大型网购商城开发经验、在某机构指导学员上千名、专注于本行业领域✌ 技术范围&#xff1a;Java实战项目、Python实战项目、微信小程序/安卓实战项目、爬虫大数据实战项目、Nodejs实战项目、PHP实战项目、.NET实战项目、Golang实战…...

视图、转发与重定向、静态资源处理

目录 视图 默认视图 视图机制原理 自定义视图 请求转发与重定向 静态资源处理 视图 每个视图解析器都实现了 Ordered 接口并开放出一个 order 属性 可以通过 order 属性指定解析器的优先顺序&#xff0c;order 越小优先级越高 默认是最低优先级&#xff0c;Integer.MAX_…...

优选算法——分治(快排)

1. 颜色分类 题目链接&#xff1a;75. 颜色分类 - 力扣&#xff08;LeetCode&#xff09; 题目展示&#xff1a; 题目分析&#xff1a;本题其实就要将数组最终分成3块儿&#xff0c;这也是后面快排的优化思路&#xff0c;具体大家来看下图。 这里我们上来先定义了3个指针&…...

【Linux系统】文件系统

Windows 和 Linux 的文件系统&#xff1a; windows:NTFS —> NTFS&#xff1a;磁盘大于目录&#xff1a;目录是磁盘的一部分。ubuntu :EXT4 —> EXT4: 目录大于磁盘&#xff1a;磁盘是目录的一部分。 Windows文件系统的特点 基于分区的文件系统&#xff1a; Windows…...

javaweb的基础

文章的简介&#xff1a; 页面的展示&#xff08;HTML&#xff09;页面的修改、绑定、弹窗(js的dom、bom等)页面的请求(Ajax) 1、在HTML中用标签和css样式实现了浏览器页面。 2、用JS实现页面内容&#xff08;图片&#xff0c;复选框、文本颜色内容&#xff09;的修改和弹框&…...

家里养几条金鱼比较好?

金鱼&#xff0c;作为备受喜爱的家庭水族宠物&#xff0c;其饲养数量一直是众多养鱼爱好者关注的焦点。究竟养几条金鱼最为适宜&#xff0c;实则需要综合考量多方面因素&#xff0c;方能达到美观、健康与和谐的理想养鱼境界。 从风水文化的视角来看&#xff0c;金鱼数量有着诸…...

写作词汇积累:差池、一体两面、切实可行极简理解

差池 【差池】可以是名词&#xff0c;是指意外的事或错误。 【差池】也可以是形容词&#xff0c;是指参差不齐、差劲或不行。 1. 由于操作不当&#xff0c;导致这次实验出现了【差池】&#xff0c;我们需要重新分析原因并调整方案。&#xff08;名词&#xff0c;表示意外的事…...

移远EC200A-CN的OPENCPU使用GO开发嵌入式程序TBOX

演示地址&#xff1a; http://134.175.123.194:8811 admin admin 演示视频&#xff1a; https://www.bilibili.com/video/BV196q2YQEDP 主要功能 WatchDog 1. 守护进程 2. OTA远程升级 TBOX 1. 数据采集、数据可视化、数据上报&#xff08;内置Modbus TCP/RTU/ASCII,GPS协…...

LEED绿色建筑认证最新消息

关于LEED绿色建筑认证的最新消息&#xff0c;可以从以下几个方面进行概述&#xff1a; 一、认证体系更新与发展 LEED认证体系不断更新和完善&#xff0c;以更好地适应全球绿色建筑的发展趋势。例如&#xff0c;LEED v4能源更新已通过投票&#xff0c;并于2024年3月1日全面启用…...

SpringBoot中集成常见邮箱中容易出现的问题

本来也没打算想写得。不过也是遇到一些坑&#xff0c;就记录一下吧&#xff0c;也折腾了小半天 1.maven配置 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency>2…...

webstorm开发uniapp(从安装到项目运行)

1、下载uniapp插件 下载连接&#xff1a;Uniapp Tool - IntelliJ IDEs Plugin | Marketplace &#xff08;结合自己的webstorm版本下载&#xff0c;不然解析不了&#xff09; 将下载到的zip文件防在webstorm安装路径下&#xff0c;本文的地址为&#xff1a; 2、安装uniapp插…...

C# 探险之旅:第七节 - 条件判断(三元判断符):? : 的奇妙冒险

嘿&#xff0c;勇敢的探险家们&#xff01;欢迎来到 C# 编程世界的奇妙之旅的第七节。今天&#xff0c;我们要探索的是一个神秘而强大的宝藏——三元判断符 ? :。别怕&#xff0c;它听起来复杂&#xff0c;但实际上比找宝藏还简单&#xff01; 场景设定&#xff1a;宝藏的选择…...

FlinkCDC实战:将 MySQL 数据同步至 ES

&#x1f4cc; 当前需要处理的业务场景: 将订单表和相关联的表(比如: 商品表、子订单表、物流信息表)组织成宽表, 放入到 ES 中, 加速订单数据的查询. 同步数据到 es. 概述 1. 什么是 CDC 2. 什么是 Flink CDC 3. Flink CDC Connectors 和 Flink 的版本映射 实战 1. 宽表查…...

debug小记

红框&#xff1a; 步过&#xff1a;遇到方法不想进入方法 绿框&#xff1a;代码跑在第几行也可以看见 蓝框&#xff1a;可以显示变量的值&#xff0c;三种方式都可以看变量的值...

Qt C++ 显示多级结构体,包括结构体名、变量名和值

文章目录 mainwindow.hmainwindow.cppstructures.hmain.cpp QTreeView 和 QStandardItemModel 来实现。以下是实现这一功能的步骤和示例代码&#xff1a; 定义多级结构体&#xff1a; 假设你有一个多级结构体&#xff0c;如下所示&#xff1a; struct SubStruct {int subValue…...

【JAVA】旅游行业中大数据的使用

一、应用场景 数据采集与整合&#xff1a;全面收集旅游数据&#xff0c;如客流量、游客满意度等&#xff0c;整合形成统一数据集&#xff0c;为后续分析提供便利。 舆情监测与分析&#xff1a;实时监测旅游目的地的舆情信息&#xff0c;运用NLP算法进行智能处理&#xff0c;及…...

昆明云南微网站搭建/爬虫搜索引擎

首先安装newman和newman-reporter-html winr打开命令窗口 npm install -g newman npm install -g newman-reporter-html 在postman中导出用例集 导出环境变量 生成报告步骤&#xff1a; 1、导出用例&#xff08;建议&#xff0c;创建空目录存储用例集&#xff0c;不建议目录…...

政府网站建设管理办法/上海网络推广

设计师同学们&#xff0c;我想大家都会在被指点江山之后&#xff0c;产生这样一个疑问&#xff1a;该如何让你的非设计师同事更好的了解设计&#xff0c;从而避免因彼此的主观而导致的理解鸿沟呢&#xff1f; 想必下面这篇文章&#xff0c;你真该要推荐他们读一下了。&#xf…...

室内设计联盟模型下载/seo推广优化

近期&#xff0c;JetBrains发布了其旗舰产品IntelliJ IDEA的2018.2版本。新版本支持即将推出的Java 11、断点意图&#xff08;Breakpoints Intentions&#xff09;、MacBook的Touch Bar等特性&#xff0c;并改进了Spring Boot、Scala和Docker插件。\\Java\\IntelliJ IDEA 2018.…...

怎么做二级网站/杭州seo排名优化

文章目录1.读MPS5023芯片&#xff1a;0x03ff即将前6位屏蔽2.读PXE1410CDM电压和电流&#xff1a;一个数&0x7ff&#xff0c;将这个数前5位全变为0&#xff0c;其余位不变2.1 1ine112.2 1ine16&#xff1a;一种方法2.3 1ine16&#xff1a;另一种方法3.读ADS7830的8个channel电…...

网站建设 58同城/如何优化网站推广

1数据库的代码自动生成 2ArcGIS版本的实现原理 A表和D表存储 3断点续传&#xff0c;多线程下载。 4类似Evernote的同步机制。 5点弧拓扑数据编辑 6事务的机制 1.服务器编程——服务器队列和客户端 2.异步编程 3.池化 4.透视和正视 5.Boost库的使用 6.资源的统一管理 7.SharpDev…...

wordpress 客户端使用/百度ai营销中国行

38-博客网站数据库-博文分类信息数据操作(二) 项目描述 当今网上微博、博客发布信息已经成为主要的信息发布、传播的系统&#xff0c;如何对这些数据进行管理&#xff0c;本项目主要是对博客网站中的博文分类信息表、博文信息表进行操作。 博客网站的数据库操作要求如下&…...