Spire.xls 将 Excel 转 PDF
pom.xml 加入如下内容:
<!-- https://www.e-iceblue.cn/spirexlsjavaconversion/convert-excel-to-pdf-using-java.html--> <repository> <id>com.e-iceblue</id> <name>e-iceblue</name> <url>https://repo.e-iceblue.cn/repository/maven-public/</url> </repository> <dependency> <groupId>e-iceblue</groupId> <artifactId>spire.xls</artifactId> <version>13.3.6</version> </dependency>
导出 PDF:
InputStream inputStream = this.getClass().getResourceAsStream("/audit/auditLogItem-template.xlsx"); 使用 EasyExcel 将生成的 Excel 写到 FileOutputStream 指定目录 String exceName = "useforpdf.xlsx"; OutputStream excelOutputStream = new FileOutputStream(exceName); ExcelWriter excelWriter = EasyExcel.write(excelOutputStream).withTemplate(inputStream).autoCloseStream(false).build(); WriteSheet writeSheet = EasyExcel.writerSheet(0).build(); excelWriter.fill(excelMaps, writeSheet); excelWriter.finish(); //创建一个Workbook实例并加载Excel文件 com.spire.xls.Workbook workbook = new com.spire.xls.Workbook(); workbook.loadFromFile(exceName); //设置转换后的PDF页面高宽适应工作表的内容大小 workbook.getConverterSetting().setSheetFitToPage(true); //将生成的文档保存到指定路径 String pdfName = "output-pdf/pdf" + ObjectUtil.getUUID(); workbook.saveToFile(pdfName, FileFormat.PDF); // 将 Excel 转换成的 PDF 文件写入 ServletOutputStream) FileUtils.copyFile(new File(pdfName), servletOutputStream);
中文乱码处理
复制 Windows 上的字体
查看导出的 excel 所用的中文字体,目前是宋体,到 C:\windows\fonts
复制对应字体库 宋体,文件后缀可能不一样,有的为ttf,有的为ttc,不影响使用。
创建/usr/share/fonts/chinese
目录,上传刚才复制的字体库到此目录,命令:
# 创建文件夹 mkdir /usr/share/fonts/chinese # 修改字体权限,使root以外的用户可以使用这些字体:使用777 赋予全部权限 chmod -R 777 /usr/share/fonts/chinese
建立字体缓存
# 字体扩展 mkfontscale # 新增字体目录 mkfontdir # 刷新缓存 fc-cache -fv
若是 docker 容器,可使用命令:
policyContainerId=docker container ls | grep 'policy_policy' | awk '{print $1}' docker exec -it ${policyContainerId} bash -c "mkfontscale&&mkfontdir&&fc-cache -fv"
以上执行后,测试OK,无需重启 policy 服务。