项目中遇到了导出pdf的问题,一开始采用ireport的形式,但是这东西他不兼容jdk1.8所以就放弃了,有没有什么好的方法直接将excel转成pdf输出呢?我也是在网上白嫖了一顿。

Aspose-Cells.jar他就来了。

只需要将jar包和去水印的license文件导入到项目中,再写几行代码就可以了。

相关jar包已经放到了网盘中,移步下载。

链接:下载jar包
提取码:dpak

import com.aspose.cells.*;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;/*** excel转pdf* @description:xlsx转pdf*/
public class ExcelToPdf {/*** 获取license 去除水印* @return*/public static boolean getLicense() {boolean result = false;try {InputStream is = XLSXConvertToPDF.class.getClassLoader().getResourceAsStream("\\license.xml");License aposeLic = new License();aposeLic.setLicense(is);result = true;} catch (Exception e) {e.printStackTrace();}return result;}/*** excel 转为pdf 输出。** @param sourceFilePath  excel文件* @param desFilePathd  pad 输出文件目录*/public static void excel2pdf(String sourceFilePath, String desFilePathd){if (!getLicense()) { // 验证License 若不验证则转化出的pdf文档会有水印产生return;}try {Workbook wb = new Workbook(sourceFilePath);// 原始excel路径FileOutputStream fileOS = new FileOutputStream(desFilePathd);PdfSaveOptions pdfSaveOptions = new PdfSaveOptions();pdfSaveOptions.setOnePagePerSheet(true);int[] autoDrawSheets={3};//当excel中对应的sheet页宽度太大时,在PDF中会拆断并分页。此处等比缩放。autoDraw(wb,autoDrawSheets);int[] showSheets={0};//隐藏workbook中不需要的sheet页。printSheetPage(wb,showSheets);wb.save(fileOS, pdfSaveOptions);fileOS.flush();fileOS.close();//System.out.println("转换PDF完毕!");} catch (Exception e) {e.printStackTrace();}}/*** 设置打印的sheet 自动拉伸比例* @param wb* @param page 自动拉伸的页的sheet数组*/public static void autoDraw(Workbook wb,int[] page){if(null!=page&&page.length>0){for (int i = 0; i < page.length; i++) {wb.getWorksheets().get(i).getHorizontalPageBreaks().clear();wb.getWorksheets().get(i).getVerticalPageBreaks().clear();}}}/*** 隐藏workbook中不需要的sheet页。* @param wb* @param page 显示页的sheet数组*/public static void printSheetPage(Workbook wb,int[] page){for (int i= 1; i < wb.getWorksheets().getCount(); i++)  {wb.getWorksheets().get(i).setVisible(false);}if(null==page||page.length==0){wb.getWorksheets().get(0).setVisible(true);}else{for (int i = 0; i < page.length; i++) {wb.getWorksheets().get(i).setVisible(true);}}}
}

下面测试:

@Test
void toPdf() {String path1 = "D:/pdfLoc/test.xlsx"; //现存的excel文件全路径 + 文件名 + 后缀String path2 = "D:/pdfLoc/test.pdf"; //要生成的pdf文件全路径 + 文件名 + 后缀ExcelToPdf.excel2pdf(path1,path2);
}

效果图,随便写的,没搞样式,大家根据自己需求来。

那么如何输出到浏览器下载呢?

此时已经知道了生成的pdf地址。

后端:

 response.setHeader("Content-Type", "application/json;charset=UTF-8");response.setCharacterEncoding("UTF-8");response.setHeader("Content-disposition", "attachment;filename*="+ URLEncoder.encode(fileName,"UTF-8"));//默认Excel名称response.setHeader("Access-Control-Expose-Headers", "Content-disposition");OutputStream os = response.getOutputStream();FileInputStream stream = new FileInputStream("D:/pdfLoc/test.pdf");//读取生成好的pdfbyte[] buffer = new byte[4096];int n = 0;while (-1 != (n = stream.read(buffer))) {os.write(buffer, 0, n);}stream.close();os.flush();os.close();//只是列了这几行关键代码,具体业务具体分析

 前端处理:

axios({ // 用axios发送post请求method: 'post',url: _api, // 请求地址data: _param, // data参数responseType: 'arraybuffer', // 表明返回服务器返回的数据类型headers: { //'Content-Type': 'application/json;charset=utf-8'},// 表明返回服务器返回的数据类型}).then((res) => {//console.log('headers', res.headers)let fileName = decodeURI(res.headers['content-disposition'].split('=')[1]);let url = window.URL.createObjectURL(new Blob([res.data], { type: 'application/pdf' }))const a = document.createElement('a')a.style.display = 'none'a.download = fileNamea.href = urla.click()if (document.body.contains(a)) {document.body.removeChild(a)}}).catch(function(error) {console.log("下载失败!");});

这样一套组合拳下来,基本就出来了。

java Excel转Pdf相关推荐

  1. Java Excel转换PDF

    转载请表明出处 https://blog.csdn.net/Amor_Leo/article/details/125015082 谢谢 Java Excel转换PDF 准备 使用 准备 官方文档 这个 ...

  2. java excel转pdf linux,从JAVA直接读取EXCEL、WORD并生成PDF文件

    从JAVA直接读取EXCEL.WORD并生成PDF文件 1.操作EXCEL和WORD文件 使用JAVA从EXCEL.WORD文件中读写数据,可以使用http://jexcelapi.sourcefor ...

  3. java excel转pdf linux_linux php 环境word转pdf、excel转pdf、office转pdf

    最近项目中遇到一个需求,将word.excel文件转换成pdf,并且打上水印,我利用的是libreoffice,这个需要Java 的jdk环境.废话不多说,开撸 1.在linux上搭建jdk环境 2. ...

  4. java excel 转pdf

    https://www.e-iceblue.cn/spirexlsjavaconversion/convert-excel-to-pdf-using-java.html#

  5. 利用java实现excel转pdf文件

    在有些需求当中我们需要抓取字段并且填充到excel表格里面,最后将excel表格转换成pdf格式进行输出,我第一次接触这个需求时,碰到几个比较棘手的问题,现在一一列出并且提供解决方案. 1:excel ...

  6. java操作Excel、PDF文件

    java操作Excel.PDF文件 下面这些是在开发中用到的一些东西,有的代码贴的不是完整的,只是贴出了关于操作EXCEL的代码: jxl是一个*国人写的java操作excel的工具, 在开源世界中, ...

  7. java使用aspose实现Excel转PDF加入密码保护并解密

    添加依赖 <dependency><groupId>com.luhuiguo</groupId><artifactId>aspose-cells< ...

  8. java给图片、word、ppt、excel、pdf添加水印

    java给图片.word.ppt.excel.pdf添加水印 使用poi.itextpdf.imageio等技术 只支持高版本的office,即支持docx.pptx.xlsx 给word添加水印遇到 ...

  9. java操作office和pdf文件java读取word,excel和pdf文档内容

    在平常应用程序中,对office和pdf文档进行读取数据是比较常见的功能,尤其在很多web应用程序中.所以今天我们就简单来看一下Java对word.excel.pdf文件的读取.本篇博客只是讲解简单应 ...

最新文章

  1. poj1511(SPFA算法)
  2. 第2关:CLA182四位先行进位电路设计
  3. Boost:path的测试程序
  4. CentOS重新加载网卡报错 Active connection path: /org/freedesktop/NetworkManager/ActiveConnection/23
  5. POJ 1222 EXTENDED LIGHTS OUT(高斯消元)
  6. 串口转换器的工作方式及通讯模式介绍
  7. 2014计算机二级c语言试题及答案,2014计算机二级C语言测试题及答案解析六之二...
  8. 如何将shapefile进行拆分
  9. python 近期用到的基础知识汇总(五)
  10. 【司法比赛】第三届“中国法研杯”司法人工智能挑赛(CAIL2020)即将启动
  11. 【转载】卸载Sql Server 2014数据库
  12. android 开启离屏缓存,Android性能优化笔记(持续更新帖)
  13. 论PMP和PRINCE2的价值?
  14. 淘宝CRM是如何通过数据分析进行解决问题的
  15. Pr:子剪辑子序列嵌套编组
  16. monkey命令——压力测试——转载参考01
  17. [GUI] 图片背景是黑色的,在unity中怎么变成透明
  18. 【自适应波束形成】MVDR(Minimum Variance Distortionless Response )笔记
  19. redis命令行清缓存
  20. 爬虫网易云音乐,热评,词云,prettytable。

热门文章

  1. 单词拼写校正原理及实现(贝叶斯推断)
  2. Visio无法复制文本框,内部错误1021
  3. 中国高速铁路发展对交通方式转变的影响与二氧化碳减排潜力研究
  4. 邬贺铨院士:网络安全不分国界,网络安全是人才的竞争
  5. Improved Techniques for Grid Mapping With Rao-Blackwellized Particle Filters-翻译
  6. 计算机辅助翻译课怎么学的,《计算机辅助翻译》本科课程学大纲翻译本科.doc...
  7. ​从双非到985:少年何妨梦摘星?敢挽桑弓射玉衡。
  8. 计算机考研视频哪个机构的好,考研计算机专业视频课哪个好
  9. js 遍历数组获取某些属性
  10. 微信支付 - APP支付申请