最近有一个需求,需要根据excel模板PDF报表;需要先根据excel模板生成excel文件,再由excel生成pdf文件,最后下载功;

生成excel报表

使用easypoi组件,详细可参考文档中excel模板部分;

使用方法概述

该方式的优势为样式与模板样式完全一致,可以实现单值属性与列表遍历;

  • 在excel模板中修改单元格内容为相应的easypoi支持的表达式;
  • 定义TemplateParam(模板属性)和数据属性;
  • 调用静态方法:ExcelExportUtil.exportExcel

excel生成PDF报表

实现方式种类

IText

纯JAVA实现的PDF生成方法,跨平台,缺点也很明显:API比较难用,同时很难处理Excel的样式;

OpenOffice
  • 导入jar包: com.artofsolving-jodconverter

  • openOffice监听端口:soffice.exe -headless -accept="socket,host=%s,port=%s;urp;" -nofirststartwizard

  • 使用openOffice转换为PDF
            //连接var conn = new SocketOpenOfficeConnection(hostname,port);conn.connect();//转换converter = new OpenOfficeDocumentConverter(conn);converter.convert(docFile,pdfFile);//关闭连接conn.disconnect();

优势: 跨平台;
缺点: openOffice转换成的PDF在一定程度失真,比如excel边框自动加粗等,某一些样式不支持等,但是linux服务器上的唯一选择.

windowOffice 或 wps

  • 导入jar包: jacob-1.19.zip

  • 安装windowOffice或wps;

  • 转换:
            //office命令ActiveXComponent app = new ActiveXComponent("Excel.Application");//Wps方式app = new ActiveXComponent("KET.Application");app.setProperty("Visible", false);Dispatch excels = app.getProperty("Workbooks").toDispatch();excel = Dispatch.call(excels, "Open", path, false, true).toDispatch();Dispatch.call(excel, "ExportAsFixedFormat", 0, pdfAbsPath);

优点: 完美的样式;
缺点: 仅支持window服务器;

文件下载

后端下载基础代码

response.setCharacterEncoding(CharsetUtil.UTF_8);response.setContentType("application/pdf");response.setHeader("Content-Disposition","attachment; filename=" + fileName);response.setContentLengthLong(pdfFile.length());

注意事项

  • 不同浏览器支持的文件名编码格式不同,大部分使用UrlEnocde编码即可,safari浏览器需要ISO8859-1的字符串编码

前端处理

前端使用js下载blob,并创建blob的下载地址
config.responseType = "blob";
let blob = new Blob([response.data],{type: 'application/pdf'}); //创建一个blob对象
let downloadName = response.headers["content-disposition"].split(";")[1].split("filename=")[1];
let a = document.createElement('a');
let url = URL.createObjectURL(blob)
a.href = url; // response is a blob
a.download = downloadName;  //文件名称
a.style.display = 'none';
document.body.appendChild(a);
a.click();
a.remove();

缺点: 在safari中出现下载文件名为:known的异常;

使用第三方组件

该方法是上一种方法的扩展,不自己创建a标签,使用file-sever组件,只需要传入blob对象即可;

 FileSaver.saveAs(blob, downloadName);

缺点: 在safari中出现下载文件名为:known的异常;

前端创建真实的后端下载地址

let a = document.createElement('a');
a.href = url; // 直接为后端的url;
a.style.display = 'none';
document.body.appendChild(a);
a.click();
a.remove();

优点:理论上所有浏览器均可正确识别文件名信息;
缺点: 因为不是通过ajax请求的后端接口,在前后端分离系统中要单独处理权限验证的东西(如token等);

转载于:https://www.cnblogs.com/417xiaoliu/p/11039102.html

excel模板报表转PDF下载相关推荐

  1. EasyPoi的excel模板预览与下载、导出简单/复杂数据

    官方文档地址:easypoi官网,官方仅供参考,部分描述有问题 excel模板预览 准备工作 事先将整理好的excel模板存在项目中,如图 excel模板预览代码 @GetMapping(" ...

  2. java 通过模板替换pdf_word模板替换方案 PDF 下载

    利用poi-tl实现word模板替换功能 Poi-tl是基于Apache POI的Word模板引擎,纯JAVA组件. API地址:http://deepoove.com/poi-tl/ 实现过程:  ...

  3. springboot系列(三十一):如何实现excel模板导出成pdf文件?这你得会 | 超级详细,建议收藏

  4. 【粉丝福利】根据日期自动生成甘特图的Excel模板

    今天和大家免费分享产品经理必备文档模板--根据日期自动生成甘特图的Excel模板 [文档下载] 这个模板可以在下方小程序里免费下载哦 [文档介绍] [Excel模板]根据日期自动生成甘特图

  5. php excel模板导出、openoffice excel转pdf、多文件压缩下载

    最近两周都在弄关于excel模板导出.excel转pdf.多文件压缩下载.弄得头都大了,接下来说说实现的方法吧. 我用的是laravel5.1的框架,读取模板生成excel,并且插入图片,直接上代码 ...

  6. EBS 报表开发:XML Publisher Excel模板

    除了用BI Publisher建立RTF文件排版,R12还可以使用Excel文件排版 如果想要使用xml publisher desktop for excel,BI publisher插件版本要高于 ...

  7. 报表中的Excel操作之Aspose.Cells(Excel模板)

    本篇中将简单记录下Aspose.Cells这个强大的Excel操作组件.这个组件的强大之处,就不多说,对于我们的报表总是会有导出Excel的处理,如果你使用微软Excel的com组件,那么对于简单的操 ...

  8. 报表模板哪里有?在线报表系统可以下载

    ​在技术飞速发展的过程中,人们越来越怀疑传统的数据分析方法.对新技术和新流程的大肆宣传常常给人留下这样的印象:"过时的"现在是多余的.因此,商业智能在很大程度上已经从关于趋势和重要 ...

  9. 简单好用,在线PDF、抠图、OCR识字、ppt模板、Excel模板

    1.ilovepdf 推荐理由:解决关于PDF的所有问题 网站地址:www.ilovepdf.com ❶ PDF 转 Word ❷ PDF 转 Excel ❸ PDF 转图片 ❹ 合并 PDF ❺ 解 ...

  10. Java 根据Excel模板 导出Excel报表

    工作中肯定会有的报表导出的功能,咱先来理下思路 先定义好模板文件,存放到一个有权限访问的目录内 根据模板路径,获取模板文件 /*** 根据模板的路径获取模板文件对象* classpath根目录下:/t ...

最新文章

  1. 206. Reverse Linked List
  2. 仿真器(emulator)和模拟器(simulator)的区别
  3. python入门之函数调用第二关_猪行天下之Python基础——5.1 函数(上)
  4. C#泛谈 —— 变体(协变/逆变)
  5. maven中snapshot快照库与maven-metadata.xml
  6. Windows 11 dapr 环境安装
  7. Wannafly挑战赛18
  8. 消息提示框-事件冒泡
  9. Java 200+ 面试题补充② Netty 模块
  10. 关于playframework1.2.4 static 关键字使用的一些思考
  11. C#中创建线程的四种方式
  12. spss——主成分分析详解
  13. 应用公园制作app靠谱吗_简单靠谱的app制作工具平台,简直是不可多得啊
  14. (2021.10.25-10.31)小结
  15. GOM登录器技术研究,闪退、掉线的原因分析和解决
  16. linux 查看kernel log,Linux Kernel Log
  17. webgl中顶点着色器的varying变量,使用方法。
  18. Fatal error: Uncaught ArgumentCountError: Too few arguments to function 解决方法
  19. Qt——用在ARM板上的Mplayer(1.3.0,1.0rc4)安装编译步骤!还有,Mplayer背景抖动闪烁问题解答,终于来了!
  20. 【IEEE754制32位浮点数】与十进制相互转换

热门文章

  1. 一个人分享的经历的故事和感悟
  2. Windows rundll32的用法-脚本命令管理打印机
  3. javase2021最强学习线路没有之一
  4. FLV无损转换MP4
  5. linux服务器系统时间和bios时间,Linux系统时间, 硬件BIOS时间的校准与同步
  6. 阅兵方阵 蓝桥杯 第九届JavaA
  7. 关于显存位宽、显存带宽和显存容量的理解
  8. LiveZilla 详细 配置 设置 (一) 安装 wamp
  9. matlab给定振形用图表示,基于 MATLAB 的简谐振动合成图形的动态演示
  10. 基于wincap写抓包程序