java将word转pdf

poi工具转换

        <!-- 处理PDF --><dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>fr.opensagres.poi.xwpf.converter.pdf-gae</artifactId><version>2.0.3</version></dependency>

这个工具使用了poi,最新的2.0.3对应poi的5.2.0,2.0.1对应poi的3.15

使用

//拿到word流
InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("word/muban3.docx");if (inputStream == null) {throw new MsgException("读取模板失败");}
XWPFDocument document = new XWPFDocument(inputStream);
//.....word处理
PdfOptions pdfOptions = PdfOptions.create();//.fontEncoding( BaseFont.CP1250 );
//转pdf操作 (直接写入响应)
PdfConverter.getInstance().convert(document, response.getOutputStream(), pdfOptions);
response.setContentType("application/pdf");

或者写入输出流

    /*** 将word转为pdf并返回一个输出流** @param document 输出文件名(pdf格式)*/public static ByteArrayOutputStream wordToPdfOutputStream(XWPFDocument document) throws IOException {//word转pdfByteArrayOutputStream outputStream = new ByteArrayOutputStream();PdfOptions pdfOptions = PdfOptions.create();//.fontEncoding( BaseFont.CP1250 );//转pdf操作PdfConverter.getInstance().convert(document, outputStream, pdfOptions);return outputStream;}
问题

poi改了word之后,生成没问题,word中创建的表格,转pdf的时候经常出问题(直接报错或者合并无效)
在这里插入图片描述

研究了2天,pdf转一直各种问题,一起之下换技术

aspose-words

https://blog.csdn.net/Wang_Pink/article/details/141898210

        <dependency><groupId>com.luhuiguo</groupId><artifactId>aspose-words</artifactId><version>23.1</version></dependency>

poi处理word一堆的依赖,这个一个就好,而且本身就支持转pdf!!!

使用

  1. 在resources创建word-license.xml
    在这里插入图片描述
<License><Data><Products><Product>Aspose.Total for Java</Product><Product>Aspose.Words for Java</Product></Products><EditionType>Enterprise</EditionType><SubscriptionExpiry>20991231</SubscriptionExpiry><LicenseExpiry>20991231</LicenseExpiry><SerialNumber>8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7</SerialNumber></Data><Signature>sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=</Signature>
</License>
  1. 工具类
import com.aspose.words.Document;
import com.aspose.words.License;
import com.aspose.words.SaveFormat;
import lombok.extern.slf4j.Slf4j;import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Objects;@Slf4j
public class Doc2PdfUtil {/*** 获取 license 去除水印* 若不验证则转化出的pdf文档会有水印产生*/private static void getLicense() {String licenseFilePath = "word-license.xml";try {InputStream is = Doc2PdfUtil.class.getClassLoader().getResourceAsStream(licenseFilePath);License license = new License();license.setLicense(Objects.requireNonNull(is));} catch (Exception e) {log.error("license verify failed");e.printStackTrace();}}/*** word 转 pdf** @param wordFile word 文件路径* @param pdfFile  生成的 pdf 文件路径*/public static void word2Pdf(String wordFile, String pdfFile) {File file = new File(pdfFile);if (!file.getParentFile().exists()) {file.getParentFile().mkdir();}getLicense();try (FileOutputStream os = new FileOutputStream(new File(pdfFile))) {Document doc = new Document(wordFile);doc.save(os, SaveFormat.PDF);} catch (Exception e) {log.error("word转pdf失败", e);}}/*** word 转 pdf** @param wordFile word 文件流* @param pdfFile  生成的 pdf 文件流*/public static void word2Pdf(InputStream wordFile, OutputStream pdfFile) {getLicense();try {Document doc = new Document(wordFile);doc.save(pdfFile, SaveFormat.PDF);} catch (Exception e) {log.error("word转pdf失败", e);}}
}

使用

Doc2PdfUtil.word2Pdf("aa.docx","bb.pdf");

我是依旧使用poi处理word,用这个转pdf

//拿到word流
InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("word/muban3.docx");if (inputStream == null) {throw new MsgException("读取模板失败");}
XWPFDocument document = new XWPFDocument(inputStream);
//.....word处理ByteArrayInputStream in = null;try {//由于使用的poi的document,需要现将poi的document转为普通的输入流in = WordUtil.getInputStream(document);Doc2PdfUtil.word2Pdf(in,response.getOutputStream());response.setContentType("application/pdf");} catch (Exception e) {log.error("报告下载失败", e);} finally {try {document.close();} catch (Exception e1) {log.error("document 流关闭失败", e1);}if (in != null) {try {in.close();} catch (Exception e1) {log.error("in 流关闭失败", e1);}}}
    public static ByteArrayInputStream getInputStream(XWPFDocument document) {ByteArrayOutputStream outputStream = new ByteArrayOutputStream();try {document.write(outputStream);return outputStreamToPdfInputStream(outputStream);} catch (IOException e) {throw new RuntimeException(e);} finally {if (outputStream != null) {try {outputStream.close();} catch (IOException e) {throw new RuntimeException(e);}}}}/*** 将word转为pdf并返回一个输入流** @param outputStream 输出文件名(pdf格式)*/public static ByteArrayInputStream outputStreamToPdfInputStream(ByteArrayOutputStream outputStream) throws IOException {//输出的pdf输出流转输入流try {//临时byte[] bookByteAry = outputStream.toByteArray();return new ByteArrayInputStream(bookByteAry);} catch (Exception e) {e.printStackTrace();return null;}}

完美转换
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1551242.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Thinkphp/Laravel小型超市进销存管理系统的设计与实现

目录 技术栈和环境说明具体实现截图设计思路关键技术课题的重点和难点&#xff1a;框架介绍数据访问方式PHP核心代码部分展示代码目录结构解析系统测试详细视频演示源码获取 技术栈和环境说明 采用PHP语言开发&#xff0c;开发环境为phpstudy 开发工具notepad并使用MYSQL数据库…

即插即用篇 | DenseNet卷土重来! YOLOv10 引入全新密集连接卷积网络 | ECCV 2024

本改进已同步到YOLO-Magic框架! 本文重新审视了密集连接卷积网络(DenseNets),并揭示了其在主流的ResNet风格架构中被低估的有效性。我们认为,由于未触及的训练方法和传统设计元素没有完全展现其能力,DenseNets的潜力被忽视了。我们的初步研究表明,通过连接实现的密集连接…

墙绘艺术在线交易:SpringBoot技术解析

2 相关技术 2.1 SSM框架介绍 本课题程序开发使用到的框架技术&#xff0c;英文名称缩写是SSM&#xff0c;在JavaWeb开发中使用的流行框架有SSH、SSM、SpringMVC等&#xff0c;作为一个课题程序采用SSH框架也可以&#xff0c;SSM框架也可以&#xff0c;SpringMVC也可以。SSH框架…

使用激光定高需要注意的问题以及效果测试与读取

使用激光定高需要注意的问题 飞控参数要修改EKF2_HGT_REF 需要改成 range sensor 此时&#xff0c;PX4会选择融合来自激光定高模块传输的高度数据&#xff0c;而不再使用其他数据来源如动捕的z数据 (如果用vision的话手动向vision_pose里面发数据也不是不行【狗头】) 效果测…

PCL 均匀下采样

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 均匀下采样 2.1.2 可视化原始点云和下采样后的点云 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接&#xff1a; PCL点云算法与项目实战案例汇总&#xff0…

SSL VPN | Easyconnect下载安装使用 (详尽)

EasyConnect是一款远程连接工具&#xff0c;为用户提供简便、快捷的远程访问和控制解决方案。 目录 下载 安装 使用 卸载 下载 通过链接进入官网技术支持板块 深信服技术支持-简单、高效、自助化服务 (sangfor.com.cn)https://support.sangfor.com.cn/ 选择软件下载 在安…

知识产权为什么是企业申报“专精特新”的核心驱动力?

企业要想在激烈的市场竞争中脱颖而出&#xff0c;必须拥有独特的核心竞争力和持续的创新能力。而“专精特新”作为国家重点扶持的企业发展方向&#xff0c;更是对企业在专业化、精细化、特色化、新颖化方面提出了更高要求。在这一背景下&#xff0c;知识产权无疑成为了企业申报…

MIC麦克风工作原理:【图片+公式计算讲解】

Mic一个声电传换装置&#xff0c;广泛应用于电子产品中&#xff0c;最常见的就是手机。我们通常也叫它送话器&#xff0c;今天我们就来好好学习一下Mic的电路和它的工作原理。 1&#xff1a;电路结构图 1&#xff1a;C&#xff1a;Mic的核心部件&#xff0c;是一个可以膜片震动…

数据增强之imgaug的使用

包的导入 path = r"D:\\" # sometimes = lambda aug: iaa.Sometimes(0.5, aug) img = cv2.imread("D:\\photo\\test.jpg") img = cv2.resize(img,(128,128)) # img = cv2.cvtColor(img,cv2.COLOR_RGBA2GRAY) cv2.imwrite(path+"img.jpg",img)随…

上海我店:创新模式引领本地生活新风尚

近年来&#xff0c;一个名为“上海我店”的新兴平台在网络空间中迅速崛起&#xff0c;其公布的业绩令人瞩目——在短短三年内&#xff0c;交易流水已跨越百亿大关&#xff0c;并在最近一个月内迎来了近百万的新增注册用户。这一强劲的增长势头&#xff0c;无疑吸引了众多商家和…

双十一了还在纠结买啥的你,五款好物分享!

​双十一马上要到了&#xff0c;大家也看了各个平台双十一优惠政策了吧&#xff0c;想必还有些朋友没有想要要入手哪些好东西。莫慌&#xff01;作为智能科技博主的我最了解你们了&#xff0c;这就带着双十一必买的好物清单来跟大家见面&#xff01;如果你还不确定双十一到底买…

手机三网状态实时查询分享

我们演示如何使用Python对接手机号在网状态API接口。 以下是详细的接口文档&#xff1a;https://www.tanshuapi.com/market/detail-123 首先&#xff0c;您需要注册并获取API密钥。假设您已经拥有API密钥&#xff0c;接下来是具体的实现步骤。 编写Python代码 以下是一个Py…

地图资源下载工具(geodatatool)下载 亚洲 8 米 DEM数据

本数据集提供的 DEM 镶嵌图是由 DigitalGlobe 卫星的超高分辨率 (VHR) 沿轨和跨轨立体图像生成的。为了生成 DEM 镶嵌图块&#xff0c;超过 4000 个 DEM 条带与加权平均 镶嵌程序合并&#xff0c;以减少错误并消除接缝。镶嵌图块为 100 公里 x 100 公里&#xff0c;8 米处为 …

grafana全家桶-loki promtail收集k8s容器日志

loki是grafana旗下轻量级日志收集工具&#xff0c;为了减少loki对集群的影响&#xff0c;把loki的agent日志收集端promtail部署在k8s集群中&#xff0c;loki server部署在集群外面。这样简单做一个解耦&#xff0c;避免大量读写的应用影响到集群内业务服务。 一、promtail部署…

Web3D技术应用的场景有哪些?有何优势?

Web3D技术&#xff0c;即将三维图形技术与Web技术结合&#xff0c;使用户无需额外软件即可通过浏览器体验三维场景。其应用场景广泛&#xff0c;且具备诸多优势&#xff0c;以下是对Web3D技术应用场景及其优势的详细阐述&#xff1a; 一、应用场景 电商领域&#xff1a; Web…

前端问答:JavaScript 中的??和|| 有啥不同

在 JavaScript 开发中&#xff0c;很多小伙伴都会遇到一个场景&#xff0c;就是要给变量设置一个默认值&#xff0c;比如当变量没有有效值时&#xff0c;使用一个备用值。这个时候&#xff0c;可能有两个操作符会让你感到困惑&#xff1a;??&#xff08;空值合并运算符&#…

STM32 OLED

文章目录 前言一、OLED是什么&#xff1f;二、使用步骤1.复制 OLED.C .H文件1.1 遇到问题 2.统一风格3.主函数引用头文件3.1 oled.h 提供了什么函数 4.介绍显示一个字符的函数5. 显示十进制函数的讲解 三、使用注意事项3.1 配置符合自己的引脚3.2 花屏总结 前言 提示&#xff…

基于CNN+Transformer混合模型实现交通流量时序预测(PyTorch版)

前言 系列专栏:【深度学习&#xff1a;算法项目实战】✨︎ 涉及医疗健康、财经金融、商业零售、食品饮料、运动健身、交通运输、环境科学、社交媒体以及文本和图像处理等诸多领域&#xff0c;讨论了各种复杂的深度神经网络思想&#xff0c;如卷积神经网络、循环神经网络、生成对…

铰链+屏幕齐发力,告诉你 Mate XT 是如何让折痕变得“无存在感”

“折痕”是折叠手机永恒的话题&#xff0c;每一款折叠屏手机产品的问世&#xff0c;都逃不过对折痕的关注和讨论。 为什么会存在折痕&#xff1f; 材料在弯折的状态下会受到力的作用&#xff0c;在内部产生“压缩”的应力和“拉伸”的应力&#xff0c;这些应力集中在弯折的区…

Gromacs pdbtogro and grotopdb问题

这里&#xff0c;input.pdb 是您的输入 PDB 文件的名称&#xff0c;output.gro 是生成的 GRO 文件的名称。这个命令会将 PDB 文件转换为 GRO 格式&#xff0c;并生成一个包含模拟系统结构信息的 GRO 文件。 在执行此命令之前&#xff0c;确保您已经安装了 GROMACS 并设置了相应…