spring boot 转pdf (html转pdf)
1.引入maven
<!--pdf-->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>html2pdf</artifactId>
<version>4.0.3</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>font-asian</artifactId>
<version>7.2.3</version>
</dependency>
2.工具类
public class PdfUtil {
static {
// Velocity初始化
Velocity.setProperty(RuntimeConstants.OUTPUT_ENCODING, StandardCharsets.UTF_8);
Velocity.setProperty(RuntimeConstants.INPUT_ENCODING, StandardCharsets.UTF_8);
Velocity.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath");
Velocity.setProperty("classpath.resource.loader.class", ClasspathResourceLoader.class.getName());
Velocity.init();
}
/**
* 据模板生成pfd格式文件
* @param context 上下文对象
* @param template pdf模板
* @param outputStream 生成ofd文件输出流
*/
public static void pdfFile(Context context, String template, OutputStream outputStream) {
try (PdfWriter pdfWriter = new PdfWriter(outputStream)) {
PdfDocument pdfDocument = new PdfDocument(pdfWriter);
pdfDocument.setDefaultPageSize(PageSize.A4);
ConverterProperties properties = new ConverterProperties();
FontProvider fontProvider = new FontProvider();
// 字体设置,解决中文不显示问题
PdfFont sysFont = PdfFontFactory.createFont("STSongStd-Light", "UniGB-UCS2-H");
fontProvider.addFont(sysFont.getFontProgram(), "UniGB-UCS2-H");
properties.setFontProvider(fontProvider);
Template pfdTemplate = Velocity.getTemplate(template, "UTF-8");
StringWriter writer = new StringWriter();
pfdTemplate.merge(context, writer);
HtmlConverter.convertToPdf(writer.toString(), pdfDocument, properties);
pdfDocument.close();
} catch (Exception e) {
throw new RuntimeException("PFD文件生成失败", e);
}
}
}
3.工具类调用
@GetMapping("/downDetailPdf") @ApiOperation(value = "导出对账单详情pdf", notes = "导出对账单详情pdf)") public void downDetailPdf(StatementLinePageRequest request, HttpServletResponse response) {String statementCode = request.getStatementCode();String companyId = request.getCompanyId();if (StringUtils.isEmpty(statementCode) && StringUtils.isEmpty(statementCode)) {throw new RuntimeException(EnterpriseExcelptionEnum.PARAM_NULL.getMsg());}try {XLBaseResponse<StatementHeaderResponse> statementResponse = statementService.getStatementResponse(statementCode, companyId);if(!statementResponse.isOk() || null == statementResponse.getBody()){throw new RuntimeException("对账单不存在");}XLBaseResponse<StatementDetailPageResponse> detailPage = statementService.getDetailPage(statementCode, companyId, request);if(detailPage.isOk()){StatementDetailPageResponse body = detailPage.getBody();VelocityContext context = new VelocityContext();StatementHeaderResponse top = statementResponse.getBody();context.put("top", top);context.put("lines", 集合);String fileName = new String("对账单详情-".getBytes(), "ISO-8859-1") + DateUtil.format(new Date(), DatePattern.NORM_DATETIME_PATTERN) + ".pdf";response.setContentType("application/vnd.ms-excel");response.setCharacterEncoding("utf8");response.setHeader("Content-Disposition", "attachment; filename=" + fileName);response.setHeader("Cache-Control", "no-store");response.addHeader("Cache-Control", "max-age=0");PdfUtil.pdfFile(context,"templates/statementDetailsPdf.html", response.getOutputStream());}} catch (Exception e) {log.info("导出对账单详情pdf-异常:",e);throw new RuntimeException(EnterpriseExcelptionEnum.EXECUTE_FAILED.getMsg());} }
4.html模板
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head><body><div class="ant-spin-container"><table><tr><td class="code">对账单编号:</td><td class="code">$!{top.statementCode}</td><td style="width: 176px;"><div class="status">$!{top.statementStatus}</div></td></tr></table></div>#if( !$orderChange)<div class="a1"><span class="src-display-modules-ReconciliationCollaboration-components-Modification-index__title--2ferw">本单有变更:</span><div class="src-display-modules-ReconciliationCollaboration-components-Modification-index__modificationData--2ViAS"><div class="src-display-modules-ReconciliationCollaboration-components-Modification-index__modificationItem--1nVb4">#foreach($order in $orderChange)<img src="templates/img/xxx.png" class="src-display-modules-ReconciliationCollaboration-components-Modification-index__linkIcon--G_CVd"><span>$order.statementCode</span><span class="src-display-modules-ReconciliationCollaboration-components-Modification-index__status--3LcrS">#if(!$line.statementStatus == 'DRAFT')草稿#elseif(!$line.statementStatus == 'SENT')已发送#elseif(!$line.statementStatus == 'RECEIVED')已接收#elseif(!$line.statementStatus == 'PART_ACCEPTED')部分确认#elseif(!$line.statementStatus == 'ACCEPTED')全部确认#elseif(!$line.statementStatus == 'SENT_FAIL')发送失败#else拒绝#end</span>#end</div></div></div>#end<div class="src-display-modules-ReconciliationCollaboration-Payables-Detail-index__statistic--uYrBi"><div class="src-display-modules-ReconciliationCollaboration-Payables-Detail-index__title--YJ_hx">统计</div><div class="src-display-modules-ReconciliationCollaboration-Payables-Detail-index__statisticData--Zxjwg"><div class="src-display-modules-ReconciliationCollaboration-Payables-Detail-index__statisticLabel--278xi"><div>总条目</div><div>总税额</div><div>总金额(不含税)</div><div>价税合计</div></div><div class="src-display-modules-ReconciliationCollaboration-Payables-Detail-index__statisticValue--agxcR"><div>$!{top.totalEntries}</div><div>$!{top.taxAmount}</div><div>$!{top.detailAmount}</div><div>$!{top.totalAmount}</div></div></div></div><div class="src-display-modules-ReconciliationCollaboration-Payables-Detail-index__dataList--3C17F"><div class="ant-spin-nested-loading"><table class="ant-table-fixed" style="width: max-content; "><tbody class="ant-table-tbody">#foreach($line in $lines)<tr class="ant-table-row ant-table-row-level-0" data-row-key="886490"><td class="" style="text-align: center;"><span class="ant-table-row-indent indent-level-0" style="padding-left: 0px;"></span><span>$line.lineNum</span></td><td class="" style="text-align: center;"><div style="color: rgb(153, 153, 153);">$line.changeFlag</div></td><td class="" style="text-align: center;"><div class="ellipsisText" style="width: 136px;"><span>#if(!$line.isConfirm == 1)待确认#elseif(!$line.isConfirm == 2)已确认#else拒绝#end</span></div></td><td class=""><div class="ellipsisText" style="width: 200px;"><span>$line.goodsCode</span></div></td></tr>#end</tbody></table></div></div></body> </html>
注意
spring boot 转pdf (html转pdf)相关推荐
- 精通spring——深入java ee开发核心技术 pdf_2019精通Spring Boot 42讲 高清pdf完整版
<精通springboot42讲价值99元入门到实教程>2019年最新spring boot教程,共计42讲从入门到精通,真正的实战教程. 课程内容和技术栈都会使⽤最新稳定版本,课程数量也 ...
- 玩转 Jasper Report(3)Spring Boot 2.4 集成 Jasper Report 导出 PDF
文章目录 1 摘要 2 核心 Maven 依赖 3 核心代码 3.1 PDF 导出工具类 3.2 Jasper 导出模板 jrxml 文件 3.3 自定义字体配置 3.4 二维码设置 3.5 PDF导 ...
- Spring Boot:自定义starter
来源:阿杜的世界 号外:最近整理了一下以前编写的一系列Spring Boot内容,整了个<Spring Boot基础教程>的PDF,关注我,回复:001,快来领取吧-!更多内容持续整理中, ...
- Spring Boot(2)---Spring Boot文档及其导航说明
Spring Boot文档及其导航说明 TagsSpring Boot, Spring Boot中文官方文档 本节简要介绍Spring Boot参考文档.它作为文档其余部分的导航. 1.关于文档 Sp ...
- 超详细的Spring Boot教程,搞定面试官!
前言 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置 ...
- springboot实战pdf_腾讯架构师Spring Boot实战篇(PDF文档)
前言: 什么是Spring Boot?? Spring Boot应用本质上就是一个基于Spring框架的应用 Spring Boot的核心是什么? 自动配置 起步依赖 Actuator 命令行界面(C ...
- springboot实战pdf_Java程序员中秋节福利发送:Spring boot+Redis实战文档「PDF」
中秋节越来越近了,平日里,各大公司拼员工拼技术拼实力:到了节日,则要拼奖金.拼福利.拼假期,还要拼创意.今天,小编为大家也准备了一份中秋节礼物,让我们一起来看看礼物是啥吧! Spring boot文档 ...
- 深入实践 Spring Boot PDF 百度云盘下载
1.深入实践 Spring Boot PDF,百度云链接~~ 免费下载! 之前为了学习Spring boot,在网上找的资源 (如有侵权,请联系博主,立马删除),电子文档还是比较清晰.这里记录一下,方 ...
- Spring boot基于itext实现定制化模板pdf生成功能
最近被安排公司项目的一个活:根据给定的模板生成pdf,很多公司的项目涉及这种xxx单的生成,我这里是个检查单的生成,具体内容下面给出,和各位csdner一起分享学习一下,如有不对多多指教. 首先先看下 ...
- Spring Boot 提取pdf中的文字
Spring Boot 提取pdf中的文字 提取pdf中的文字,由于字体不同,可能会提取出来乱码.(友情提示:建议先pdf文件转成图片,然后调用百度api提取文字,准确率高.跳转链接:https:// ...
最新文章
- java 读出数字声音_【求助】已经计算出的数字结果,想用声音播放出来。怎么弄!!!...
- 热门 | Google Brain前员工深度盘点2017人工智能和深度学习各大动态
- Dev-DXperience12.2版的新产品介绍:DXTREME
- arm-none-eabi-gcc 嵌入式交叉编译器安装 极简教程
- openssh升级后root_又一root神器停止营业!时至今日你还需要root吗
- jspstudy启动mysql失败_解决Mysql5.7.17在windows下安装启动时提示不成功问题
- android 开发日积月累,移动端h5开发常用ui框架
- WordPress收费下载插件Erphpdown v11.0
- Oracle dbv 坏块信息,【dbv】使用dbv工具检验数据文件是否有坏块
- IOS开发—系统定位
- [NOI2008]糖果雨
- 如何写出好文案,不妨看看这篇(上)
- Excel里如何设置保留几位小数
- Python数据分析 2.Matplotlib绘图—常用统计图
- 绿联外围设备_什么是外围设备(外围设备的类型和列表)?
- CHIL-SQL-UNIQUE 约束
- 魅力月全食,怎么看才过瘾?
- python:私有变量和私有方法
- 电工学复习【9】-- 触发器和时序逻辑电路
- js 转 ts 文件