java数据导出PDF文件
导入pom文件
第一步: 导出pdf是需要的jar包
<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13.2</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version></dependency>
第二步:创建导出的实体类:
@Data
public class ProcessTaskVo {private String taskName="审核人";private String startUserName="审核发起人";private String startTime="2022-03-04";/*** 查询对象集合 processVoList*/private List<ProcessVo> processVoList;
}
对象实体类Vo:
@Data
public class ProcessVo {/*** 序号*/private String index;/*** 审核人*/private String assignee;/*** 审核人名称*/private String assigneeName;/*** 审核时间*/private String verifyTime;/*** 审核结果*/private String verifyResult;/*** 审核意见*/private String verifyMessage;
}
@RestController
@Log4j2
public class HelloController {@RequestMapping("/pdf")public void processPdfSample(ProcessTaskVo processTaskVo, HttpServletRequest request, HttpServletResponse response){// 扩大指针作用域Document document = null;ByteArrayOutputStream fileOut = new ByteArrayOutputStream();OutputStream responseOutputStream = null;try {// 文件名称final String pdfDocName = processTaskVo.getTaskName()+".pdf";// 系统路径File file = new File(pdfDocName);file.createNewFile();//1:建立Document对象实例document = new Document();// 2:建立一个PDF 写入器与document对象关联通过书写器(Writer)可以将文档写入到磁盘中StringBuilder filename = new StringBuilder();filename.append("审批流程单").append(new SimpleDateFormat("yyyyMMddHHmm").format(new Date())).append(".pdf");document.addAuthor("Author@SALES");document.addCreationDate();document.addCreator("Creator@SALES");document.setMargins(10, 10, 10, 10);PdfWriter pdfWriter = PdfWriter.getInstance(document, fileOut);pdfWriter.setPdfVersion(PdfWriter.VERSION_1_4);// 3:打开文档document.open();//解决中文不显示问题BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);Font fontChina14 = new Font(bfChinese, 14);Font fontChina12 = new Font(bfChinese, 12);// 4:向文档添加内容// 标题Paragraph titleParagraph = new Paragraph("审批流程单", fontChina14);titleParagraph.setAlignment(Element.ALIGN_CENTER);// 居中document.add(titleParagraph);// 空格Paragraph blank1 = new Paragraph(" ");document.add(blank1);// 代开税务机关Chunk c3 = new Chunk("流程名称:" + processTaskVo.getTaskName(), fontChina12);Paragraph dkswjgParagraph = new Paragraph();dkswjgParagraph.add(c3);dkswjgParagraph.setAlignment(Element.ALIGN_LEFT);document.add(dkswjgParagraph);// 发起人Chunk c4 = new Chunk("流程发起人:" + processTaskVo.getStartUserName(), fontChina12);Paragraph faqirenParagraph = new Paragraph();faqirenParagraph.add(c4);faqirenParagraph.setAlignment(Element.ALIGN_RIGHT);document.add(faqirenParagraph);// 填开日期Chunk c5 = new Chunk("流程发起时间:" + processTaskVo.getStartTime(), fontChina12);Paragraph tkrqParagraph = new Paragraph();tkrqParagraph.add(c5);tkrqParagraph.setAlignment(Element.ALIGN_RIGHT);document.add(tkrqParagraph);// 空格document.add(blank1);// 表格处理及查询数据ProcessVo processVo1 = new ProcessVo();processVo1.setIndex("1");processVo1.setAssignee("李四");processVo1.setAssigneeName("张三");processVo1.setVerifyTime("2022-03-04");processVo1.setVerifyResult("通过");List<ProcessVo> processVoLists = new ArrayList<>();processVoLists.add(processVo1);processTaskVo.setProcessVoList(processVoLists);PdfPTable table = packageTable(processTaskVo, fontChina12);if (null != table) {document.add(table);}//底部额外信息StringBuilder sb1 = new StringBuilder();sb1.append("确认人(公章)_________");document.add(blank1);Paragraph pE = new Paragraph(sb1.toString(), fontChina12);pE.setAlignment(Element.ALIGN_MIDDLE);document.add(pE);document.add(blank1);// 5:关闭文档document.close();witerFile(request,response,file,false); //注释可在线预览responseOutputStream = response.getOutputStream();fileOut.writeTo(responseOutputStream);responseOutputStream.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (DocumentException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally {try{fileOut.close();responseOutputStream.close();}catch (IOException exception){log.error("下载异常");}}
}/*** 写出文件* @param request* @param response* @param file* @param deleteOnExit*/
private void witerFile(HttpServletRequest request, HttpServletResponse response, File file, boolean deleteOnExit) {response.setCharacterEncoding(request.getCharacterEncoding());response.setContentType("application/pdf");FileInputStream fis = null;try {fis = new FileInputStream(file);response.setHeader("Content-Disposition", "attachment; filename=" + file.getName());IOUtils.copy(fis, response.getOutputStream());response.flushBuffer();} catch (Exception e) {log.error(e.getMessage(), e);} finally {if (fis != null) {try {fis.close();if (deleteOnExit) {file.deleteOnExit();}} catch (IOException e) {log.error(e.getMessage(), e);}}}
}
}
Server层:
package com.laowang.sptest;import cn.hutool.core.bean.BeanUtil;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.laowang.sptest.entity.ProcessTaskVo;
import com.laowang.sptest.entity.ProcessVo;
import org.springframework.stereotype.Service;import java.util.ArrayList;
import java.util.List;
@Service
public class servicepdf {/*** 组装Table* @param processTaskVo* @param fontZH* @return*/public static PdfPTable packageTable(ProcessTaskVo processTaskVo, Font fontZH) {try {// 创建table下面通过table.addCell添加的时候必须添加整行内容的所有列PdfPTable table = new PdfPTable(6);table.setWidthPercentage(100.0F);//第一行是列表名table.setHeaderRows(1);table.getDefaultCell().setHorizontalAlignment(1);java.util.List<ProcessVo> processVoList = processTaskVo.getProcessVoList();if (null != processVoList && processVoList.size() > 0) {List<ProcessVo> newProcessVoList = new ArrayList<>();ProcessVo processVo = new ProcessVo();processVo.setIndex("序号");processVo.setAssignee("审批人");processVo.setAssigneeName("审批人姓名");processVo.setVerifyTime("审批时间");processVo.setVerifyResult("审批结果");processVo.setVerifyMessage("审批意见");newProcessVoList.add(processVo);for (ProcessVo tableProcessVo : processVoList) {ProcessVo newProcessVo = new ProcessVo();BeanUtil.copyProperties(tableProcessVo, newProcessVo);newProcessVoList.add(newProcessVo);}//遍历List 获取每一列的数据,填充到pdfTable中newProcessVoList.forEach(vo -> {table.addCell(createCell(vo.getIndex(), fontZH));table.addCell(createCell(vo.getAssignee(), fontZH));table.addCell(createCell(vo.getAssigneeName(), fontZH));table.addCell(createCell(vo.getVerifyTime(), fontZH));table.addCell(createCell(vo.getVerifyResult(), fontZH));table.addCell(createCell(vo.getVerifyMessage(), fontZH));});}//cell跨页table.setKeepTogether(true);table.setSplitLate(false);table.setSplitRows(true);return table;} catch (Exception e) {return null;}}private static PdfPCell createCell(String value, Font fontZH) {PdfPCell cell = new PdfPCell();cell.setPhrase(new Phrase(value, fontZH));cell.setColspan(1);cell.setUseAscender(true);cell.setUseDescender(true);cell.setHorizontalAlignment(Element.ALIGN_CENTER); //水平居中cell.setVerticalAlignment(Element.ALIGN_MIDDLE); //垂直居中return cell;}
}
在这里插入代码片
欢迎使用Markdown编辑器
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
新的改变
我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
- 全新的界面设计 ,将会带来全新的写作体验;
- 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
- 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
- 全新的 KaTeX数学公式 语法;
- 增加了支持甘特图的mermaid语法1 功能;
- 增加了 多屏幕编辑 Markdown文章功能;
- 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
- 增加了 检查列表 功能。
功能快捷键
撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
查找:Ctrl/Command + F
替换:Ctrl/Command + G
合理的创建标题,有助于目录的生成
直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC
语法后生成一个完美的目录。
如何改变文本的样式
强调文本 强调文本
加粗文本 加粗文本
标记文本
删除文本
引用文本
H2O is是液体。
210 运算结果是 1024.
插入链接与图片
链接: link.
图片:
带尺寸的图片:
居中的图片:
居中并且带尺寸的图片:
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
如何插入一段漂亮的代码片
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
// An highlighted block
var foo = 'bar';
生成一个适合你的列表
- 项目
- 项目
- 项目
- 项目
- 项目1
- 项目2
- 项目3
- 计划任务
- 完成任务
创建一个表格
一个简单的表格是这么创建的:
项目 | Value |
---|---|
电脑 | $1600 |
手机 | $12 |
导管 | $1 |
设定内容居中、居左、居右
使用:---------:
居中
使用:----------
居左
使用----------:
居右
第一列 | 第二列 | 第三列 |
---|---|---|
第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
SmartyPants
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:
TYPE | ASCII | HTML |
---|---|---|
Single backticks |
'Isn't this fun?'
|
‘Isn’t this fun?’ |
Quotes |
"Isn't this fun?"
|
“Isn’t this fun?” |
Dashes |
-- is en-dash, --- is em-dash
|
– is en-dash, — is em-dash |
创建一个自定义列表
- Markdown
- Text-to-HTML conversion tool
- Authors
- John
- Luke
如何创建一个注脚
一个具有注脚的文本。2
注释也是必不可少的
Markdown将文本转换为 HTML。
KaTeX数学公式
您可以使用渲染LaTeX数学表达式 KaTeX:
Gamma公式展示 Γ(n)=(n−1)!∀n∈N\Gamma(n) = (n-1)!\quad\forall n\in\mathbb NΓ(n)=(n−1)!∀n∈N 是通过欧拉积分
Γ(z)=∫0∞tz−1e−tdt.\Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞tz−1e−tdt.
你可以找到更多关于的信息 LaTeX 数学表达式here.
新的甘特图功能,丰富你的文章
- 关于 甘特图 语法,参考 这儿,
UML 图表
可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:
这将产生一个流程图。:
- 关于 Mermaid 语法,参考 这儿,
FLowchart流程图
我们依旧会支持flowchart的流程图:
- 关于 Flowchart流程图 语法,参考 这儿.
导出与导入
导出
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。
导入
如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。
mermaid语法说明 ↩︎
注脚的解释 ↩︎
java数据导出PDF文件相关推荐
- Java中导出pdf文件,pdf工具类demo
最近在做导出pdf文件的功能,参考了很多资料和demo,完成了转出pdf的功能,并适合项目的pdf工具类,现贴出具体的工具类和demo,如有不对的地方欢迎指正 1.pdf工具类PdfUtil.java ...
- java批量导出pdf文件_java导出pdf文件
项目中导出pdf文件,需要3个jar包iText-2.1.7.jar,iTextAsian.jar,ReportExprotPlug0.1.jar. ReportInfo info = new Rep ...
- java itext 导出pdf文件_【Java,PDF】使用Itext实现PDF文件生成
重要声明:本文章仅仅代表了作者个人对此观点的理解和表述.读者请查阅时持自己的意见进行讨论. 前言 有时候,业务系统要求提供一个PDF文件导出的功能,这时候我们就需要将数据库的对应数据查询出来,然后生成 ...
- java jsp导出pdf文件_JSP页面导出PDF格式文件
JSP页面导出PDF格式文件基本在前端页面可以全部完成 添加下载链接的点击事件 var downPdf = document.getElementById("downLoad"); ...
- Java项目如何导出数据为 PDF 文件?
文章目录 Java项目如何导出数据为 PDF 文件? 一.代码结构如下 二.代码说明 1.添加依赖 pom.xml 3.添加字体 4.PDF 导出工具类 三.效果图 结语 Java项目如何导出数据为 ...
- java 使用itext导出PDF文件,中文不显示问题解决
之前写的java 使用itext 导出pdf 发现有个问题,在今天使用的时候,发现一个问题,就是当单元格中写中文的时候,导出来的pdf中文不显示. java 使用itext导出PDF文件,图片文字左右 ...
- 使用java导出pdf文件
使用java导出pdf文件 itext itext的使用 JasperReports JasperReports与itext的区别 Jaspersoft Studio 工具简介 Jaspersoft ...
- Java使用Freemarker通过模板文件导出PDF文件、横向显示
前言: 尝试了不少通过模板文件导出pdf文件的方法,要么实现起来复杂,要么实现效果不理想,经过反复查找资料和尝试发现此方法是最理想的. 本博客又经大量网友实践及建议,经过几次完善修改,又日趋完善,在此 ...
- 从前台获取数据,并导出PDF文件
从前台获取数据,并导出PDF文件 Jsp页面: <div style="width:30%;height:100%;float:left;" id="gzbddiv ...
最新文章
- wireshark从入门到精通(协议排错安全篇)4
- 总结一哈JDK和Tomcat的环境变量配置
- java日历类add方法_Java日历computeTime()方法及示例
- matlab中mod(10 3),matlab的rem()和mod()函数
- OSChina 周一乱弹 ——东京12G
- 2019年美国大联盟美国总决赛小学组获奖牌名单
- ce变速注入dll失败_调用CE变速DLL注入的软件含HOOK模块
- 关于反转的总结(C/C++)
- AMiner论文推荐:
- Python中用Matplotlib做多个纵轴(多y轴)
- 安装mavros时,运行 wstool update -t src -j8 时出错解决
- 2023年软件设计师中级(考点分析+复习笔记+历年真题+电子版课本)
- 苹果Ipad锁屏密码忘记之后,如何不会变成砖
- Windows 查看电脑型号
- 高仿【华为消费者业务官网】和精彩动画剖析:练习在低代码平台中嵌入JS代码
- linux 调度类,了解RT调度类linux的dequeue_rt_stack()
- at91sam7x256编程c语言代码,at91sam7x256的程序串口0问题
- 配置Docker以使用Kata Containers
- 《足迹相册》隐私政策
- 写给我教过的清华IT和北大青鸟的学生
热门文章
- win10正版系统镜像
- 怎么用photoshop改变图片背景天空
- 保护linux 文件系统,使用 Tripwire 保护 Linux 文件系统 | Linux 中国
- rust倒地了怎么起来_绝地求生:如果红血时移速变慢,倒地时挪动加快掉血,将会如何?...
- 老赵谈IL(4):什么时候应该学IL,该怎么学IL
- Web工作流(流程图)设计器的方案研究及功能实现之bpmn-js简易教程
- 小蓝在一张无限大的特殊画布上作画。 这张画布可以看成一个方格图,每个格子可以用一个二维的整数坐标表示。 小蓝在画布上首先点了一下几个点:(0, 0), (2020, 11), (
- html网页布局白边问题
- 【spring】@Configuration的使用与原理
- OneDark-Pro-darker.json