Java使用Documents4j实现Word转PDF(知识点+案例)

文章目录

  • 前言
  • 源码获取
  • 一、认识Documents4j
  • 二、快速集成
    • 2.1、pom.xml依赖
    • 2.2、word转PDF实现
      • 项目目录
      • WordUtils.java
      • Demo6.java
      • 测试效果
  • 参考文章
  • 资料获取

前言

博主介绍:✌目前全网粉丝2W+,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域。

涵盖技术内容:Java后端、算法、分布式微服务、中间件、前端、运维、ROS等。

博主所有博客文件目录索引:博客目录索引(持续更新)

视频平台:b站-Coder长路


源码获取

项目源码:Gitee、Github

本篇文档的视频系列讲解:Java实现自动化pdf打水印工具 开源PDF工具PDFBoxWord、Word转PDF开源工具Documents4j


一、认识Documents4j

​ Documents4j 是一个开源的 Java 库,用于在 Java 应用程序中进行 Microsoft Office 文档(如 Word、Excel、PowerPoint 等)的转换。它利用 Microsoft Office 的本机 API,通过启动 Microsoft Office 进程来执行文档转换。Documents4j 提供了一种简单的方式来将 Office 文档转换为其他格式,例如将 Word 文档转换为 PDF、将 Excel 表格转换为 CSV 等。

​ Documents4j 的工作原理是通过将 Microsoft Office 作为外部进程启动,并与其进行通信来执行文档转换任务。这种方法使得可以利用 Microsoft Office 的强大功能来执行文档转换,同时又能够在 Java 环境中方便地进行集成和控制。

​ Documents4j 提供了一个简单的 API,使得在 Java 应用程序中执行文档转换变得简单。它支持多线程操作,并且具有一定的性能优化,使得可以高效地处理大量文档转换任务。


二、快速集成

2.1、pom.xml依赖

<!--word 2 pdf start-->
<dependency><groupId>com.documents4j</groupId><artifactId>documents4j-local</artifactId><version>1.0.3</version>
</dependency><dependency><groupId>com.documents4j</groupId><artifactId>documents4j-transformer-msoffice-word</artifactId><version>1.0.3</version>
</dependency>
<!--word 2 pdf end -->

2.2、word转PDF实现

项目目录

image-20240215142419473

WordUtils.java

package com.changlu.utils;import com.documents4j.api.DocumentType;
import com.documents4j.api.IConverter;
import com.documents4j.job.LocalConverter;
import java.io.*;public class WordUtils {/*** Word转PDF* @param filePath 源docx文件目录及名称  示例:C:\Users\93997\Desktop\watermark tools\watermarkTools\src\main\resources\2024-2-8计算机.docx* @param outFilePath 输出文件目录及名称 示例:C:\Users\93997\Desktop\watermark tools\watermarkTools\src\main\resources\2024-2-8.pdf*/public static void wordToPdf(String filePath, String outFilePath) {//源文件地址File inputWord = new File(filePath);//导出文件地址File outputFile = new File(outFilePath);InputStream doc = null;OutputStream outputStream = null;try {doc = new FileInputStream(inputWord);outputStream = new FileOutputStream(outputFile);IConverter converter = LocalConverter.builder().build();//转换docx=>pdfboolean flag = converter.convert(doc).as(DocumentType.DOC).to(outputStream).as(DocumentType.PDF).execute();if (flag) {converter.shutDown();}doc.close();outputStream.close();System.out.println("文件名:" + outFilePath + " 转换成功!");} catch (Exception e) {e.printStackTrace();}}public static void main(String[] args) {String filePath = "C:\\Users\\93997\\Desktop\\watermark tools\\watermarkTools\\src\\main\\resources\\2024-2-8计算机.docx";String outFilePath = "C:\\Users\\93997\\Desktop\\watermark tools\\watermarkTools\\src\\main\\resources\\2024-2-8.pdf";//word转pdfWordUtils.wordToPdf(filePath, outFilePath);}}

Demo6.java

package com.changlu.demos;import com.changlu.utils.WordUtils;
import java.io.UnsupportedEncodingException;/*** @Description: Documents4j案例:word转PDF实现* @Author: changlu* @Date: 2:18 PM*/
public class Demo6 {public static void main(String[] args) throws UnsupportedEncodingException {
//        String originPath = URLDecoder.decode(Main.class.getClassLoader().getResource("input.docx").getFile(), "UTF-8"); //获取到的是target下的类目录String originPath = "F:\\00核心知识、成果、视频产出区\\技术视频\\2024.2.15 自制默默学打水印工具 watermark tools\\watermarkTools\\src\\main\\resources\\input.docx";String targetPath = originPath.replace("input.docx", "output.pdf");//docx转为pdf文件WordUtils.wordToPdf(originPath, targetPath);}
}

测试效果

image-20240215142714648

image-20240215142729247


参考文章

[1]. 不要在去充VIP啦 ,Java 实现 PDF、Word 互转


资料获取

大家点赞、收藏、关注、评论啦~

精彩专栏推荐订阅:在下方专栏👇🏻

  • 长路-文章目录汇总(算法、后端Java、前端、运维技术导航):博主所有博客导航索引汇总
  • 开源项目Studio-Vue—校园工作室管理系统(含前后台,SpringBoot+Vue):博主个人独立项目,包含详细部署上线视频,已开源
  • 学习与生活-专栏:可以了解博主的学习历程
  • 算法专栏:算法收录

更多博客与资料可查看👇🏻获取联系方式👇🏻,🍅文末获取开发资源及更多资源博客获取🍅


整理者:长路 时间:2024.2.15

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

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

相关文章

CSS的伪类选择器:nth-child()的用法示例

CSS的伪类选择器:nth-child()的用法示例 n可以- , 右边数字只能 第一到第六的td : td:nth-child(n1):nth-child(-n6) td:nth-child(n1):nth-child(-n6)第二到第八的a : a:nth-child(n2):nth-child(-n8) a:nth-child(n2):nth-child(-n8)1等效0n1 , 7等效0n7 , 没有负数,不能…

使用 C++23 从零实现 RISC-V 模拟器(6):权限支持

本节内容增加了权限表示&#xff0c;设置了三种权限。当 cpu 初始化时默认的权限为 Machine 模式。接下来实现这三种特权模式&#xff0c;随后实现 sret 和 mret 指令。 RISC-V定义了三种特权等级&#xff0c;分别是用户态&#xff08;User Mode&#xff09;、监管态&#xff…

Linux-系统资源管理的命令

目录 查看CPU&#xff1a;more /proc/meminfo 查看内存数据&#xff1a;free -m / free -h 查看系统版本&#xff1a;more /etc/issue 查看操作系统的类型&#xff1a;uname -a 查看主机名称&#xff1a;hostname 查看磁盘空间&#xff1a;df -h 查看某个目录空间…

【解决(几乎)任何机器学习问题】:处理分类变量篇(上篇)

这篇文章相当长&#xff0c;您可以添加至收藏夹&#xff0c;以便在后续有空时候悠闲地阅读。 本章因太长所以分为上下篇来上传&#xff0c;请敬请期待 很多⼈在处理分类变量时都会遇到很多困难&#xff0c;因此这值得⽤整整⼀章的篇幅来讨论。在本章中&#xff0c;我将 讲述不同…

快速搞懂时间序列数据平稳检验

在对时间序列数据进行分析预测时&#xff0c;平稳时间序列数据预测效果更好。所以首先要检测数据是否平稳&#xff0c;没有趋势的时间序列数据&#xff0c;我们称为平稳的&#xff0c;即随着时间的推移&#xff0c;表现出恒定的方差&#xff0c;具有恒定的自相关结构。本文介绍…

Linux 虚拟机在线热扩容分区

介绍 本教程是用于Linux虚拟机在调整虚拟硬盘大小后&#xff0c;进行在线不重启热扩容分区大小。 适用于RHEL 7以上的版本及衍生发行版。&#xff08;如Centos、Rocky Linux、Alma Linux等&#xff09; 硬盘分区在线热扩容 刷新硬盘容量 echo 1 > /sys/block/sda/device…

GIS利用不舒适指数绘制地区的生物气候舒适度图

生物气候舒适度定义了最适宜的气候条件,在这种条件下,人们感到健康和充满活力。生物气候舒适度地图对城市规划研究特别有用。温度、相对湿度和风速等要素对评估生物气候舒适度非常重要。[1] 人们已经得出了许多不同的指数来确定生物气候舒适度。在本博文中,我们将使用广泛使…

C++基于多态的职工管理系统完整代码

1.头文件.h 部分&#xff1a; 1.1 Worker.h /*这是一个抽象的职工父类&#xff0c;以下类都继承自该类&#xff1a;1.Employee类 2.Manager类 3.Boss类 */#pragma once #include<iostream> #include<string> using namespace std; //使用标准命名空间 class W…

Elcomsoft 取证工具包系列:Advanced Office Password Recovery

天津鸿萌科贸发展有限公司是 Elcomsoft 系列软件授权代理商。 Advanced Office Password Recovery 是 Elcomsoft 取证工具包中的密码破解软件之一。它可以恢复、删除或规避使用各种 Office 套件创建的文档的密码。可以对 WordPerfect&#xff0c;Lotus&#xff0c;OpenOffice&…

[晓理紫]每日论文分享(有中文摘要,源码或项目地址)--大模型、扩散模型等

专属领域论文订阅 VX关注{晓理紫}&#xff0c;每日更新论文&#xff0c;如感兴趣&#xff0c;请转发给有需要的同学&#xff0c;谢谢支持 如果你感觉对你有所帮助&#xff0c;请关注我&#xff0c;每日准时为你推送最新论文。 为了答谢各位网友的支持&#xff0c;从今日起免费为…

深入浅出 Python 函数:编写、使用与高级特性详解

引言 在 Python 编程的世界中,函数堪称构建复杂逻辑和模块化程序的基础砖石。它能够帮助程序员组织代码、避免重复,并通过封装逻辑提高代码的可读性和可维护性。本文旨在全方位解析 Python 函数的核心概念,包括基础定义、文档化、默认参数、可选参数、解包参数、关键字仅参…

普中51单片机学习(七)

LED闪烁 delay函数 延时函数 void delay(unsigned int i)//大约延时10us {while(i--); }实验代码 #include "reg52.h" typedef unsigned char u8; typedef unsigned int u16;void delay(u16 i) {while(i--); } sbit ledP2^0;void main(){while(1){led0;delay(10…

深入解析域名短链接生成原理及其在Python/Flask中的实现策略:一篇全面的指南与代码示例

为了构建一个高效且用户友好的域名短链服务&#xff0c;我们可以将项目精简为以下核心功能板块&#xff1a; 1. 用户管理 注册与登录&#xff1a;允许用户创建账户并登录系统。 这部分内容可以参考另一片文章实现&#xff1a; 快速实现用户认证&#xff1a;使用Python和Flask…

【c++设计模式03】创建型1:简单工厂模式(Simple Factory Pattern)

【c设计模式03】创建型1&#xff1a;简单工厂模式&#xff08;Simple Factory Pattern&#xff09; 一、工厂模式二、简单工厂模式三、UML类图四、demo五、使用多态的简单工厂模式1、UML类图——使用多态2、demo——使用多态 原创作者&#xff1a;郑同学的笔记 原创地址&#x…

GAN:“左右互搏”的卷积网络,不断优化性能中

hello宝子们...我们是艾斯视觉擅长ui设计和前端开发10年经验&#xff01;希望我的分享能帮助到您&#xff01;如需帮助可以评论关注私信我们一起探讨&#xff01;致敬感谢感恩&#xff01; 在一个名为“卷王”的世界里&#xff0c;有一个传奇般的存在——生成对抗网络&#xff…

解释器设计模式

解释器设计模式&#xff08;Interpreter Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了一种语言的文法&#xff0c;并建立一个解释器来解释该语言中的句子。这种模式通常用于需要解释或执行一种特定类型的语言的场景&#xff0c;例如编程语言的编译器或解释器、…

17. 【Linux教程】查看文件内容

前面小节介绍了文件和目录相关的操作&#xff0c;本小节介绍如何使用 file、cat、more、tail 命令在不同场景下去查看文件相关信息和内容。 1. file 查看文件类型 file 命令可以用来查看文件类型&#xff0c;还能查看文件的编码格式&#xff0c;下面列举一些 file 命令的参数&…

文件上传漏洞--Upload-labs--Pass04--.htaccess绕过

一、什么是 .htaccess 文件 1、官方解释&#xff1a; .htaccess文件主要用于控制Web服务器&#xff08;如Apache&#xff09;的配置&#xff0c;使得无需修改主服务器配置文件即可对特定目录进行访问控制和功能设置。 2、通俗解释&#xff1a; 现有一份 写有恶意代码的 .ph…

[力扣 Hot100]Day28 两数相加

题目描述 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数都…

计算机网络-数据通信基础

目录 前言 一、数据通信基本概念 二、数据通信相关知识1 总结 前言 正在学习计算机网络体系&#xff0c;把每日所学的知识梳理出来&#xff0c;既能够当作读书笔记&#xff0c;又能分享出来和大家一同学习讨论。 一、数据通信基本概念 基本概念&#xff1a;信源、信道、信宿&…