springboot word aspose 转换PDF 在线预览

在这里插入图片描述

文章目录

            • 1. 依赖
            • 2. 工具类
            • 3. 实现类
            • 4. controller
            • 5. application.yml
            • 6. license.xml
            • 7. 目录结构
            • 8. 测试验证

1. 依赖
<dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.22</version></dependency><dependency><groupId>com.aspose.cells</groupId><artifactId>aspose-cells</artifactId><version>20.4 - c</version><scope>system</scope><systemPath>${project.basedir}/src/main/resources/lib/aspose-cells-20.4 - c.jar</systemPath></dependency><dependency><groupId>com.aspose.words</groupId><artifactId>aspose-words</artifactId><version>words-18.10-jdk16</version><scope>system</scope><systemPath>${project.basedir}/src/main/resources/lib/aspose-words-18.10-jdk16.jar</systemPath></dependency><!-- web支持 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies>
2. 工具类
package com.gblfy.word.utils;import com.aspose.words.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Component;import java.io.FileOutputStream;
import java.io.InputStream;/*** 使用Aspose将word转成pdf** @author gblfy* @date 2022-11-05*/
@Slf4j
@Component
public class Word2PdfUtil {/*** 破解方法* 需要jar包: aspose-words-15.12.0-jdk16.jar* 同时配置 license.xml** @return*/private static boolean getLicense() {boolean result = false;try {InputStream is = new ClassPathResource("/license.xml").getInputStream();License aposeLic = new License();aposeLic.setLicense(is);result = true;} catch (Exception e) {e.printStackTrace();}return result;}/*** word 转 pdf** @param inputPath word文件path(全路径)* @param outPath   pdf文件path(全路径)* @return*/public Boolean word2pdf(String inputPath, String outPath) {try (FileOutputStream os = new FileOutputStream(outPath)) {if (getLicense()) {Document doc = new Document(inputPath);doc.save(os, SaveFormat.PDF);return true;}log.error("转换失败!", "破解失败");return false;} catch (Exception e) {log.error("转换失败!", e);return false;}}
}
3. 实现类
package com.gblfy.word.impl;import com.gblfy.word.utils.Word2PdfUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;/*** word to pdf 预览** @author gblfy* @date 2022-11-05*/
@Slf4j
@Component
public class PdfServiceImpl {@Autowiredprivate Word2PdfUtil word2PdfUtil;@Value("${word2pdf.wordDir}")private String wordDir;public void word2pdf(String fileName, HttpServletResponse response) {long start = System.currentTimeMillis();try {String wordFileName = wordDir + File.separator + fileName;String pdfFileName = fileNameHandle(wordFileName);log.info("wordFileName-》{}:" + wordFileName);log.info("pdfFileName -》{}:" + pdfFileName);File file = new File(wordFileName);if (!file.exists()) {log.error("在" + wordFileName + "目录下不存在指定文件");}// 生成pdfBoolean flag = word2PdfUtil.word2pdf(wordFileName, pdfFileName);if (flag) {byte[] buf = new byte[8 * 1024];int len = 0;try (InputStream is = new FileInputStream(pdfFileName); OutputStream os = response.getOutputStream();) {while ((len = is.read(buf, 0, buf.length)) != -1) {os.write(buf, 0, len);}os.flush();} finally {try {// 清除文件// deleteFile(wordFileName);// deleteFile(pdfFileName);} catch (Exception e) {e.printStackTrace();}}}} catch (Exception e1) {e1.printStackTrace();}long end = System.currentTimeMillis();double castTime = (end - start) / 1000.0;log.info("pdf转换成功,共耗时:->{}:" + castTime);}public String fileNameHandle(String wordFileName) {if (wordFileName.contains("docx")) {return wordFileName.replace(".docx", "pdf");}if (wordFileName.contains("doc")) {return wordFileName.replace("doc", "pdf");}return "非word格式文件,请核实!";}/*** 删除文件** @param filePath 文件* @return*/public static boolean deleteFile(String filePath) {boolean flag = false;File file = new File(filePath);// 路径为文件且不为空则进行删除if (file.isFile() && file.exists()) {file.delete();flag = true;}return flag;}
}
4. controller
package com.gblfy.word.controller;import com.gblfy.word.impl.PdfServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;/*** word to pdf 预览** @author gblfy* @date 2022-11-05*/
@RestController
public class PdfController {@Autowiredprivate PdfServiceImpl pdfService;@GetMapping("/wordtopdf/{fileName}")public void wordtopdf(@PathVariable String fileName, HttpServletResponse response) {pdfService.word2pdf(fileName, response);}
}
5. application.yml
server:port:  80
word2pdf:wordDir: D:/ht/outfilepdfDir: D:/ht/outfile
6. 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>
7. 目录结构

在这里插入图片描述

8. 测试验证

在application.yml中配置文件存在的目录

http://localhost/wordtopdf/文件名称.docx

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据湖加速篇】 —— 数据湖结构化数据优化与查询加速方案

简介&#xff1a; 近几年&#xff0c;数据湖架构的概念逐渐兴起&#xff0c;很多企业都在尝试构建数据湖。相比较大数据平台&#xff0c;数据湖在数据治理方面提出了更高的要求。对于数据湖场景所提出的新需求&#xff0c;“传统”的大数据工具在很多方面都面临着新的挑战。Jin…

Kubernetes 也有局限性吗?

作者 | Draveness来源 | 真没什么逻辑头图 | 下载于视觉中国2014 年发布的 Kubernetes 在今天俨然已成为容器编排领域的事实标准&#xff0c;相信谈到 Kubernetes 的开发者都会一再复述上述现象。如下图所示&#xff0c;今天的大多数个人或者团队都会选择 Kubernetes 管理容器&…

Kubernetes 新玩法:在 yaml 中编程

简介&#xff1a; 如何做性能测试&#xff1f;要么是通过编码的方式完成&#xff0c;写一堆脚本&#xff0c;用完即弃&#xff1b;要么是基于平台&#xff0c;在平台定义的流程中进行。对于后者&#xff0c;通常由于目标场景的复杂性&#xff0c;如部署特定的 workload、观测特…

对话猿辅导:阿里云远程办公零信任落地创新安全

简介&#xff1a; 大型实战场景验证&#xff0c;灵活应对复杂环境。 2020&#xff0c;一场突如其来的新冠疫情&#xff0c;引发了史上最大规模的远程办公。疫情让安全问题暴露得更加突出&#xff0c;与疫情的对抗也是阿里云安全的战场。 9月18日&#xff0c;2020云栖大会技术…

阿里云发布边缘计算视频上云解决方案 为海量视图处理提供城市级云基础设施

简介&#xff1a; 2020云栖大会在云上成功召开&#xff0c;此次大会汇聚行业领袖&#xff0c;共同见证数智未来的重构进程。在9月18日的产品发布大厅&#xff0c;阿里云正式发布边缘计算视频上云解决方案&#xff0c;旨在依托城市级云计算基础设施&#xff0c;实现海量视图数据…

数据湖元数据服务的实现和挑战

简介&#xff1a; 数据湖元数据服务为大数据而生&#xff0c;为互通生态而生&#xff0c;期望后续继续完善其服务能力和支撑更多的大数据引擎&#xff0c;通过开放的服务能力、存储能力、统一的权限及元数据管理能力&#xff0c;为客户节省管理/人力/存储等各项成本&#xff0c…

美国燃油“动脉”被黑客切断,网络安全走向哪里?专访山石网科|拟合

从无序中寻找踪迹&#xff0c;从眼前事探索未来。 > 2021 年正值黄金十年新开端&#xff0c;CSDN 以中立技术社区专业、客观的角度&#xff0c;深度探讨中国前沿 IT 技术演进&#xff0c;推出年度重磅企划栏目——「拟合」&#xff0c;通过对话企业技术高管大咖&#xff0c;…

云时代的智能运维平台,助力企业创新迭代

简介&#xff1a; 智能的运维平台&#xff0c;帮助企业业务平稳、智能、高效地运行。 每一起严重事故背后&#xff0c;必然有29次轻微事故和300起未遂先兆以及1000起事故隐患。—— 海恩法则(Heinrich‘s Law) 随着云计算时代的到来&#xff0c;大量企业将自己的业务逐步迁移…

数据湖架构,为什么需要“湖加速”?

简介&#xff1a; 湖加速即为数据湖加速&#xff0c;是指在数据湖架构中&#xff0c;为了统一支持各种计算&#xff0c;对数据湖存储提供适配支持&#xff0c;进行优化和缓存加速的中间层技术。那么为什么需要湖加速&#xff1f;数据湖如何实现“加速”&#xff1f;本文将从三个…

“阿里日”102 对新人举办集体婚礼,张勇证婚:“又热,又爱”!

整理 | 王晓曼出品 | 程序人生 &#xff08;ID&#xff1a;coder _life&#xff09;2021年5月10日&#xff0c;是第十七个“阿里日”&#xff0c;同时也是第十六次阿里巴巴举办员工集体婚礼。据悉&#xff0c;今年共有1541对新人报名集体婚礼&#xff0c;其中&#xff0c;双职工…

阿里巴巴电商搜索推荐实时数仓演进之路

简介&#xff1a; 自建实时数仓到底难在哪里&#xff1f;实时数仓应该怎么建&#xff1f;阿里巴巴搜索团队告诉您答案 作者&#xff1a;张照亮&#xff08;士恒&#xff09;阿里巴巴搜索事业部高级技术专家 1. 业务背景 阿里巴巴电商搜索推荐实时数据仓库承载了阿里巴巴集团…

多数据源一站式入湖

简介&#xff1a; 通过一站式入湖&#xff0c;将不同数据源的数据统一归并到以OSS对象存储为基础架构的集中式数据湖存储中&#xff0c;解决了企业面临的数据孤岛问题&#xff0c;为统一的数据分析打好了基础. 背景 数据湖作为一个集中化的数据存储仓库&#xff0c;支持的数据…

一文说透架构设计的本质

作者 | 猿码架构来源 | 云时代架构头图 | 下载于视觉中国前言&#xff1a;在软件研发领域&#xff0c;程序员的终极目标都是想成为一名合格的架构师。然而梦想很美好&#xff0c;但现实却很曲折。在实际工作中&#xff0c;程序员会分很多种&#xff0c;有的擅长编码实现&#x…

“视频云营业厅”发布,蚂蚁 mPaaS 加速金融机构数字化转型

简介&#xff1a; 线下业务线上办&#xff0c;便民服务不间断 在业务和数据争相“上云”的今天&#xff0c;更多金融机构加速数字化转型进程&#xff0c;将原有的人对人、线下、柜面核心业务进一步线上化&#xff0c;扩充全新的业务触点&#xff0c;开启远程业务办理的新模式。…

被Python「苦虐」的日子太惨了!

Python因为其优越的特性广泛应用于数据分析、人工智能、Web开发、后端开发、自动化测试/运维、爬虫等领域&#xff0c;也得到了很多企业的青睐。甚至连BATZJ的技术大牛&#xff0c;都无可否认Python现在对于一个程序员发展的重要性&#xff01;最近一两年&#xff0c;我身边也有…

阿里云肖力:原生安全打造云上绿洲

2020年9月17日-18日&#xff0c;一年一度的云栖大会在云上如约而至。疫情加速数字化转型大背景之下&#xff0c;云原生以一种高能见度为各行业带来了一个更动态多变、更具效率和生命力的架构。云原生安全具有什么优势&#xff0c;能否解决线下业务场景的安全困局&#xff1f;作…

Nacos Go 微服务生态系列(一)| Dubbo-go 云原生核心引擎探索

简介&#xff1a; 作为微服务框架的核心引擎--注册中心&#xff0c;是必不可缺少的组件&#xff0c;市面已经有多款注册中心支持 Go 语言&#xff0c;应该如何选择呢&#xff1f;我们可以对目前主流的支持 Go 语言的注册中心做个对比。 作者 | 李志鹏 近几年&#xff0c;随着 …

微软每年豪砸安全研发 10 亿美元,聊聊背后的技术密码

从无序中寻找踪迹&#xff0c;从眼前事探索未来。正值 IT 黄金十年新开端&#xff0c; CSDN 欲以中立技术社区专业、客观的角度&#xff0c;深度探讨中国前沿 IT 技术演进&#xff0c;现在推出年度重磅企划——「拟合」&#xff0c;通过对话企业高管大咖&#xff0c;跟踪报道企…

Chrome浏览器直接下载pdf文件的设置步骤

使用Google Chrome浏览器&#xff0c;在点击网页中的pdf文件时&#xff0c;浏览器会直接将pdf文件打开并显示&#xff0c;要下载pdf文件的话&#xff0c;还需要进行另存操作。 有的时候我们点击pdf文件就是为了直接下载&#xff0c;而不是为了在浏览器中查看pdf文件。可以按以…

Bilibili资深运维工程师:DCDN在游戏应用加速中的实践

简介&#xff1a; bilibili资深运维工程师李宁分享《DCDN在游戏应用加速中的实践》从bilibili游戏应用的效果和成本入手&#xff0c;深入浅出地分享DCDN全站加速在游戏加速场景中的应用。 日前&#xff0c;云栖大会新一代CDN的技术突破与应用实践专场中&#xff0c;bilibili资…