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

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";}
}

相关文章:

  • 【lesson8】云备份服务端完整版代码
  • 【设计模式】观察者模式(行为型)⭐⭐⭐
  • 阿里云一键登录号码认证服务
  • 嵌入式C语言编码规范要点
  • QT中为程序加入超级管理员权限
  • C++习题精选(4)—— 栈
  • Mybatis05-一对多和多对一处理
  • 最大二叉树-力扣
  • 从零实现ChatGPT:第四章在无标签数据上预训练
  • 手写节流防抖函数
  • 多个线程多个锁:如何确保线程安全和避免竞争条件
  • Python pandas openpyxl excel合并单元格,设置边框,背景色
  • 在 Linux 系统上安装 Android NDK
  • 呼叫中心系统的国产化替代方案
  • 【Flutter】 TextField限制长度时, 第三方手写输入法、ios原始拼音输入法输入被吞问题
  • 分享的文章《人生如棋》
  • 【node学习】协程
  • C# 免费离线人脸识别 2.0 Demo
  • CSS 专业技巧
  • Django 博客开发教程 8 - 博客文章详情页
  • EOS是什么
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • iOS 颜色设置看我就够了
  • JS笔记四:作用域、变量(函数)提升
  • LeetCode29.两数相除 JavaScript
  • Linux下的乱码问题
  • mysql 5.6 原生Online DDL解析
  • mysql_config not found
  • MySQL几个简单SQL的优化
  • Netty 4.1 源代码学习:线程模型
  • NSTimer学习笔记
  • Octave 入门
  • rc-form之最单纯情况
  • Vue 2.3、2.4 知识点小结
  • vuex 笔记整理
  • 排序算法之--选择排序
  • 巧用 TypeScript (一)
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 用Canvas画一棵二叉树
  • 中文输入法与React文本输入框的问题与解决方案
  • python最赚钱的4个方向,你最心动的是哪个?
  • ​secrets --- 生成管理密码的安全随机数​
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (LeetCode 49)Anagrams
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (三)uboot源码分析
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • (转)Mysql的优化设置
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转载)从 Java 代码到 Java 堆
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】