SpringBoot实现Word转PDF/TXT

     背景

        研发工作中难免会遇到一些奇奇怪怪的需求,就比如最近,客户提了个新需求:上传一个WORD文档,要求通过系统把该文档转换成PDF和TXT。客户的需求是没得商量的,必须实现!承载着客户的期望,我开始在网上找相关的资料。没曾想,还真有开源的依赖专门处理这类问题,咱们一起来看看吧!

     实践

     1、下载和引入Jar包

        要实现WORD到PDF/TXT的转换,需要引入以下几个Jar包:

        <dependency><groupId>com.aspose</groupId><artifactId>aspose-words</artifactId><version>19.1</version><scope>system</scope><systemPath>${pom.basedir}/src/main/resources/lib/aspose-words-19.1.jar</systemPath></dependency><!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox-tools --><dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>3.0.3</version></dependency>

        其中,aspose-words包不太好找,在阿里云镜像库中都没有,需要在网上下载后,上传到本地的私服库,或者用上文中的方式直接在lib中加载。我在网上找了这个地址,可以查看和下载相关包:Aspose.Words 24.4

      2、代码实现

        将依赖包引入之后,编写以下Java代码:

package com.leixi.fileTrans.utils;import com.aspose.words.SaveFormat;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import com.aspose.words.Document;
import org.apache.pdfbox.Loader;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;/**** @author leixiyueqi* @since 2024/08/26 19:39*/
public class FileTransUtils {public static void main(String[] args) throws Exception {File file = new File("D:\\upload\\SAAS.docx");String output =  "D:\\upload\\SAAS.pdf";doc2pdf(file, output);System.out.println("测度结束");}public static void doc2pdf(File file, String outPath) throws Exception{FileInputStream fis = new FileInputStream(file);Document document = new Document(fis);if (!checkDirectory(outPath)) {throw new Exception("创建目录失败");}document.save(outPath, SaveFormat.PDF);System.out.println(String.format("WORD转换Pdf成功: %s", outPath));document.save(outPath.replace(".pdf", ".txt"), SaveFormat.TEXT);System.out.println(String.format("WORD转换Txt成功: %s", outPath.replace(".pdf", ".txt")));document.save(outPath.replace(".pdf", ".html"), SaveFormat.HTML);System.out.println(String.format("WORD转换html成功: %s", outPath.replace(".pdf", ".html")));pdfToTxt(new File(outPath), new File(outPath.replace(".pdf", "ByPdf.txt")));System.out.println(String.format("通过Pdf转换Txt成功: %s", outPath.replace(".pdf", "ByPdf.txt")));}public static boolean checkDirectory(String filePath) {File file = new File(filePath);if (file.isDirectory()) {return true;} else {File dir = file.getParentFile();if (dir != null && !dir.isDirectory() && !dir.mkdirs()) {System.out.println(String.format("创建目录%s失败:", dir.getAbsolutePath()));return false;} else {return true;}}}public static void pdfToTxt(File input, File output) {BufferedWriter wr = null;try {PDDocument pd = Loader.loadPDF(input);pd.save("CopyOf" + input.getName().split("\\.")[0] + ".pdf");PDFTextStripper stripper = new PDFTextStripper();wr = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(output)));stripper.writeText(pd, wr);if (pd != null) {pd.close();}wr.close();} catch (Exception e) {e.printStackTrace();}finally {System.out.println("PDF转换Txt成功");}}
}

      3、测试

        先创建一个WORD文件,放在d:\upload\文件夹下:

        然后执行Java代码中的main方法,结果如下:

        从结果来看,咱们的转换测试是非常成功的。

     后记

        这次的实践的成果还是十分有价值的,它不仅可以用于项目中,还可以应用于工作生活中,比如博主平常习惯看电子书,在网上收集到的很多资料都是PDF格式的,怎么办?用程序一转换就行了。

        但不得不说的是,这只是一个非常初级的,学习性的Demo,实际在项目中,要想实现PDF转换为TXT或其他文件,其实十分麻烦。要针对PDF文件是文字居多,还是图片/表格居多,采用不同的办法;转换的时候,还要计算图片的偏转角度,去除水印,去除格式字符等诸多操作,十分繁琐。博主本来想深入学习一下的,奈何时间有限,只能浅尝辄止。在此留下相关线索,将来有机会了再研究下:

        1、aspose-cells:类似于aspose-word, 可以将表格转换为文本格式。本质上应该可以解决在html页面上对Excel进行操作的需求。

        2、huaweicloud-sdk-ocr:华为云识别,可以实现图片/PDF中的文字识别和文字提取,将其转换为可编辑的文件。相关教程和用例可见:华为云Java SDK_文字识别 OCR

        3、spire.doc.free:这个依赖也可以实现文档与PDF/网页的互转。

        最后,感谢大佬提供的教程:【Java】将PDF输出为Text/Excel,让我获益匪浅,感激不尽。

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

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

相关文章

postgresql底层Driver驱动包数据库是怎么连接,怎么发送数据,怎么设置超时

##一、建立连接 ##connectionFactory.openConnectionImpl ##底层也没什么神秘的&#xff0c;就是使用的socket通讯 ##连接&#xff0c;打开流 ##socket.connect ##获取到读写流 ##二、数据库连接池创建Connection连接 ##三、发送相关sql数据 ##发数据 ##发送查询 ##sendParse(q…

three.js渲染中文的3D字体

下载中文字体 引入下面的代码 点击下载 提取码: lywa <!DOCTYPE html> <html lang"en"><head><title>three.js webgl - modifier - tessellation</title><meta charset"utf-8"><meta name"viewport" c…

第二证券:A股公司中期分红踊跃 红利资产获机构关注

A股公司2024年半年报正在密布宣布&#xff0c;上市公司中期分红计划备受商场重视。据统计&#xff0c;到8月26日&#xff0c;有中期分红计划的A股公司近370家&#xff0c;创下前史新高。业内人士称&#xff0c;得益于政策层面的生动引导&#xff0c;上市公司分红“大军”敏捷扩…

网络基础:理解 IP 地址与网段(网段是什么,网段与IP地址)

前言 在计算机网络中&#xff0c;网段 和 IP地址是网络通信中的两个至关重要的概念&#xff0c;但它们并不相同。这里来介绍一下它们之间的关系&#xff0c;简单记录一下 一. 网段 网段是指一个 IP 地址范围&#xff0c;通常由一个 IP 地址和一个子网掩码共同定义。子网掩码用…

赛博朋克游戏 各种游戏定制开发 软件定制开发 游戏开发 区块链游戏开发

赛博朋克&#xff0c;是“控制论”与“朋克”的合成词。字面意思&#xff0c;就是对“机械文明”的反思。该背景大多描绘在未来&#xff0c;建立于“低端生活与未来科技结合”的基础上&#xff0c;拥有先进科学技术&#xff0c;再以一定程度崩坏的社会结构做对比。之后&#xf…

在Ubuntu系统中安装R语言并使用R Markdown

官方提供的R语言安装教程&#xff1a;全面的 R 存档网络 (tsinghua.edu.cn) 在安装之前先使用命令更新软件列表&#xff0c;命令中的 - qq 参数用于减少命令执行时的输出信息。 # update indices sudo apt update -qq 安装依赖项&#xff1a;dirmngr&#xff08;用于管理密钥…

mysql的聚簇索引、非聚簇索引、回表

1.聚簇索引和非聚簇索引 聚簇索引&#xff08;聚集索引&#xff09;&#xff1a;数据和索引放在一起&#xff0c;B树的叶子节点存放了整行数据&#xff0c;有且只有一个。 【主键索引和唯一索引&#xff0c;主键唯一&#xff0c;存放的是主键对应的整行数据】非聚簇索引&#…

阿里云服务器部署Sonic总结

1.购买阿里云服务器 访问阿里云官网&#xff0c;选择合适的云服务器购买 购买成功后创建ECS云服务器 下载Alibaba Cloud Client 创建AccessKey并保存 打开Alibaba Cloud Client&#xff0c;添加账号 2.安装docker 选择操作—>启动远程连接(SSH) snap install docker doc…

PostgreSQL 与对象存储的结合: 在 MinIO 中访问外部数据

数据领域最激动人心的发展之一是湖仓一体功能在所有主要数据库供应商中的兴起。Snowflake 和 SQL Server 长期以来一直采用这一点&#xff0c;现在 PostgreSQL 正在通过 pg_lakehouse 拥抱这种范式转变&#xff0c;使得利用现代数据湖进行分析、AI 等比以往任何时候都更容易。随…

vscode开发小程序

1 安装 "微信小程序开发工具" 2 安装 "WXML - Language Service" 3 安装 "wxmp-api-plugin" 或 "wechat-snippet" 4 安装"WXSS"

一句话概括TMMi的每个PA

TMMi&#xff08;Test Maturity Model Integration&#xff0c;测试成熟度模型集成&#xff09;是一个由TMMi基金会开发的非商业化的测试成熟度模型&#xff0c;是对CMMI模型的一个补充。它可以帮助组织使测试过程从未管理的状态进化为已管理、已定义、已测量和优化的状态。 T…

BeautifulSoup4通过lxml使用Xpath定位实例

有以下html。<a>中含有图片链接&#xff08;可能有多个<a>&#xff0c;每一个都含有一张图片链接&#xff09;。最后一个<div>中含有文字。 上代码&#xff1a; import requests from bs4 import BeautifulSoup from lxml import etreeurlhttps://www.aaabb…

springboot物流信息管理系统—计算机毕业设计源码23895

摘要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在现实运用中&#xff0c;应用软件的工作规…

智能计算方法与实现1|禁忌搜索算法|Rastrigin函数|压力容器设计问题

智能计算也有人称之为“软计算”&#xff0c;人们受自然&#xff08;生物界&#xff09;规律的启迪&#xff0c;根据其原理&#xff0c;模仿求解问题的算法。从自然界得到启迪&#xff0c;模仿其结构进行发明创造&#xff0c;这就是仿生学。这是我们向自然界学习的一个方面。另…

vue.js3+element-plus+typescript add,edit,del,search

vite.config.ts server: {cors: true, // 默认启用并允许任何源host: 0.0.0.0, // 这个用于启动port: 5110, // 指定启动端口open: true, //启动后是否自动打开浏览器 proxy: {/api: {target: http://localhost:8081/, //实际请求地址&#xff0c;数据库的rest APIschangeOr…

MySQL索引(二)

MySQL索引(二) 文章目录 MySQL索引(二)MySQL有哪些索引&#xff1f;MySQL的主键是聚簇索引吗&#xff1f;聚簇索引和非聚簇索引的区别什么是覆盖索引什么是回表主键问题 外键约束什么是外键什么是外键约束外键带来的问题 联合索引最左匹配原则如何建立联合索引索引下推 学习地址…

Android Auto推出全新Google助手设计

智能手机与汽车的无缝整合已成为现代驾驶的重要组成部分&#xff0c;而 Android Auto 一直在这一领域处于领先地位。谷歌通过不断推出新功能和更新&#xff0c;体现了其致力于提升 Android Auto 体验的决心。最近&#xff0c;Android Auto 引入了 Google助手的全新设计。 当系…

微信小程序代码目录结构介绍

文件描述app.js小程序的入口文件&#xff0c;负责监听和处理小程序的生命周期函数&#xff0c;以及定义一些全局的公共方法和数据。app.json公共全局配置文件。app.wxss公共全局样式文件。project.config.json项目的配置文件&#xff0c;包含一些项目级别的配置&#xff0c;如项…

科研绘图系列:R语言对角线矩阵图(corrplot plot)

介绍 对角线矩阵图(Diagonal Matrix Plot)是一种特殊类型的图表,用于可视化对角线矩阵中的元素。对角线矩阵是一种方阵,其中非对角线上的元素都是零,而对角线上的元素可以是任意值。这种矩阵在数学和计算机科学中非常有用,尤其是在线性代数、特征值问题和对角化等操作中…

使用 OpenCV 组合和缩放多张图像

在图像处理领域&#xff0c;我们经常需要将多张小图像组合成一张大图。例如&#xff0c;将多张图像按一定布局排列在一起&#xff0c;或者创建一个缩略图画廊。在这篇博客中&#xff0c;我将向你展示如何使用 Python 的 OpenCV 库来完成这一任务。 代码 下面是一段完整的 Pyt…