java生成pdf通过接口下载

pom

<!--生成pdf-->
<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.11</version>
</dependency>

demo

package com.example.controller;import com.itextpdf.text.*;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfGState;
import com.itextpdf.text.pdf.PdfWriter;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.itextpdf.text.pdf.BaseFont;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;@RestController
@RequestMapping("pdf")
public class PdfController {@GetMapping("/createPdfDownload")public String createPdfToDownload(HttpServletResponse response) throws Exception {// 生成 pdf 名称Date date = new Date();SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String str = simpleDateFormat.format(date);String datetime = str.replace("-", "").replace(" ", "").replace(":","");String filename = "pdf_"+datetime+"_content.pdf";// 创建PDFDocument document = new Document(PageSize.A4,60,60,15,40);try {// 设置响应头,控制浏览器下载该文件response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));//常用的有paragraph段落、phrase语句块、chunk最小单位块OutputStream out = response.getOutputStream();PdfWriter writer = PdfWriter.getInstance(document, out);// 打开文档document.open();BaseFont bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);for(int n = 0; n<2; n++){// 添加文字水印PdfContentByte cb = writer.getDirectContent();cb.beginText(); // 开始// 设置透明度PdfGState gs = new PdfGState();gs.setFillOpacity(0.2f);cb.setGState(gs);cb.setFontAndSize(bfChinese,100);cb.showTextAligned(Element.ALIGN_CENTER, "北京交通大学", 340, 410 , 60);cb.endText(); // 结束// 添加标题//通过Font去设置字体的基本属性:大小,加粗等等Font font  = new Font(bfChinese, 15, Font.NORMAL, BaseColor.BLACK);// 创建段落Paragraph title = new Paragraph("我是 title ", font);title.setAlignment(Element.ALIGN_CENTER);title.setSpacingBefore(40f);document.add(title);// 制作大文本数据StringBuilder stringBuilder = new StringBuilder();for (int i = 0; i <= 10; i++){stringBuilder.append("如果说荷兰是橙色的,那阿姆斯特丹就是缤纷的彩色。");}Font font1  = new Font(bfChinese, 10, Font.NORMAL, BaseColor.BLACK);Paragraph context = new Paragraph(stringBuilder.toString(), font1);context.setFirstLineIndent(20);context.setLeading(12);context.setSpacingBefore(10f);document.add(context);// 开启新的一页document.newPage();//显示空内容的页writer.setPageEmpty(false);}// 关闭流document.close();writer.close();} catch (IOException e) {throw new RuntimeException(e);} catch (DocumentException e) {throw new RuntimeException(e);}return "ok";}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【iOS】JSONModel源码阅读笔记

文章目录 前言一、JSONModel使用二、JSONModel其他方法转换属性名称 三、源码分析- (instancetype)initWithDictionary:(NSDictionary*)dict error:(NSError **)err[self init]__setup____inspectProperties - (BOOL)__doesDictionary:(NSDictionary*)dict matchModelWithKeyMa…

android集成百度文心一言实现对话功能,实战项目讲解,人人都能拥有一款ai应用

大家好&#xff0c;今天给大家讲解下如何实现一个基于百度文心一言的app功能&#xff0c;app内部同时集成了讯飞的语音识别。本文适用于有android基础的小伙伴阅读&#xff0c;文章末尾放上本项目用到的全部实例代码&#xff0c;在使用前请务必看完本文章。 先来给大家看看效果…

微信小程序毕业设计-医院挂号系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

Linux 36.3 + JetPack v6.0@jetson-inference之图像分类

Linux 36.3 JetPack v6.0jetson-inference之图像分类 1. 源由2. imagenet2.1 命令选项2.2 下载模型2.3 操作示例2.3.1 单张照片2.3.2 视频 3. 代码3.1 Python3.2 C 4. 参考资料5. 补充5.1 第一次运行模型本地适应初始化5.2 samba软连接 1. 源由 从应用角度来说&#xff0c;图…

python-NLP常用数据集0.1.022

python-NLP常用数据集0.1.022 MRPC数据集XNLI数据集SQuAD数据集 MRPC数据集 Microsoft Research Paraphrase Corpus 3600个数据 下载地址&#xff1a;https://gist.github.com/W4ngatang/60c2bdb54d156a41194446737ce03e2e格式 Quality #1 ID #2 ID #1 String #2 String 1 1…

【java】JVM前端编译器的局限性

目录 1. 不涉及编译优化2.功能限制3. 静态编译特性4. 与AOT编译器的对比 1. 不涉及编译优化 1.前端编译器的主要任务是将符合Java语法规范的Java代码转换为符合JVM规范的字节码文件2.并不会直接涉及编译优化等方面的技术。3.具体的优化细节通常是由HotSpot的JIT(Just In Time)…

IO数据流

数据流将“基本数据类型与字符串类型”作为数据源&#xff0c;从而允许程序以与机器无关的方式从底层输入输出流中操作Java基本数据类型与字符串类型。 DataInputStream和OutputStream提供了可以存取与机器无关的所有Java基础类型数据&#xff08;如&#xff1a;int、double、…

【Python入门与进阶】Pycharm配置与优化

1. 简介 PyCharm 是一款功能强大的 Python 集成开发环境(IDE),由 JetBrains 公司开发。它提供了丰富的代码编写、调试、测试等功能,广泛应用于Python 项目开发中。 - 智能代码提示和自动补全 - 支持多种Python框架和库 - 强大的调试和测试功能 - 集成版本控…

软件测试--第十一章 设计和维护测试用例

1.单选题 (2分) 下面有关测试设计的叙述,说法不正确的是( )。 A 测试用例的设计是一项技术性强.智力密集型的活动 B 在开展测试用例设计前,必须将测试需求进行详细展开 C 在一般的测试组织内,测试用例的评审可能不是正式的评审会 D 在测试用例设计时,只设计覆盖正常流程和操…

CAN协议简介

协议简介 can协议是一种用于控制网络的通信协议。它是一种基于广播的多主机总线网络协议&#xff0c;常用于工业自动化和控制领域。can协议具有高可靠性、实时性强和抗干扰能力强的特点&#xff0c;被广泛应用于汽车、机械、航空等领域。 can协议采用了先进的冲突检测和错误检测…

Application Load Balancer-ALB

Application Load Balancer-ALB 什么是ALB开通ALB服务实现IPv4服务的负载均衡创建ALB实例创建服务器组添加后端服务器配置监听设置域名解析&#xff08;可选&#xff09;释放ALB实例 什么是ALB 在介绍ALB之前首先介绍一下负载均衡SLB&#xff0c;可以说SLB是负载均衡家族之首 …

ubuntu20.04 安装OpenSSL 1.0.2o (借助腾讯AI完全OK)

文章目录 ubuntu20.04安装openssl-1.0.2o安装后看不到版本信息如何解决 腾讯云 AI 代码助手: 要确认 Linux 开发板的 CPU 是多少位的&#xff0c;可以使用以下方法&#xff1a; 打开终端。输入以下命令&#xff0c;然后按回车键&#xff1a; cat /proc/cpuinfo这将显示关于 CP…

Elastic Search(ES)Java 入门实操(3)数据同步

基本概念和数据查询代码&#xff1a; Elastic Search &#xff08;ES&#xff09;Java 入门实操&#xff08;1&#xff09;下载安装、概念-CSDN博客 Elastic Search&#xff08;ES&#xff09;Java 入门实操&#xff08;2&#xff09;搜索代码-CSDN博客 想要使用 ES 来查询数…

【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第37课-自动切换纹理

【WEB前端2024】3D智体编程&#xff1a;乔布斯3D纪念馆-第37课-自动切换纹理 使用dtns.network德塔世界&#xff08;开源的智体世界引擎&#xff09;&#xff0c;策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界引擎&…

jupyter notebook使用conda环境

pycharm中安装过可以使用的库在jupyter notebook中导入不进来 1 检查pycharm中安装的库的位置 2 检查jupyter notebook中安装的库的位置 3 查看jupyter notebook内核名字 可以看到jupyter notebook中内核名字叫ipykernel 4 安装ipykernel 在pycharm的terminal中 pip instal…

Web前端的宋体:深入剖析与未来展望

Web前端的宋体&#xff1a;深入剖析与未来展望 在数字时代的浪潮中&#xff0c;Web前端技术如一股清新的宋体之风&#xff0c;为互联网世界带来了独特的美学体验与交互魅力。然而&#xff0c;这看似简单的“宋体”二字&#xff0c;却蕴含着丰富的内涵与无尽的可能。那么&#…

【C语言】动态内存经典笔试题(下卷)

前言 如果说动态内存是C语言给我们的一个工具&#xff0c;那么只有掌握了工具的特点我们才能更好地使用。 紧随上卷&#xff0c;我们再来看看动态内存另外两道经典的笔试题。 &#xff08;建议没看过上卷的朋友可以先看完上卷再回来&#xff1a;【C语言】动态内存经典笔试题…

项目总结报告(Word模板)

2 项目工作成果 2.1 交付给用户的产品 2.2 交付给研发中心的产品 2.2.1 代码部分 2.2.2 文档部分 2.3 需求完成情况与功能及性能符合性统计 2.3.1 需求完成情况统计 2.3.2 功能符合性分析 2.3.3 性能符合性分析 3 项目工作分析 3.1 项目计划与进度实施分析 3.1.1 开发进度 3.1.…

Web前端答辩PPT模板:全面解析与高效呈现

Web前端答辩PPT模板&#xff1a;全面解析与高效呈现 在Web前端领域&#xff0c;一个优秀的答辩PPT模板不仅能够充分展示项目成果&#xff0c;还能有效传达技术实力和创新思维。本文将从四个方面、五个方面、六个方面和七个方面&#xff0c;详细解析如何打造一个高质量的Web前端…

2024年6月8日 (周六) 叶子游戏新闻

万能嗅探: 实测 网页打开 某视频号、某音、某红薯、某站&#xff0c;可以做到无水印的视频和封面下载功能哦&#xff0c;具体玩法大家自行发挥吧。 《丝之歌》粉丝又要失望&#xff1a;大概率不会亮相Xbox发布会即将于后天举行的 Xbox 发布会预计将会有许多令人兴奋的消息。早些…