【word2pdf】Springboot word转pdf(自学使用)

文章目录

概要

Springboot word 转 pdf

整体介绍

搜了一下,发现了能实现功能的方法有四种

  1. Using itext and opensagres and apache poi
  2. Using Documents4j
  3. Using openoffice nuoil
  4. Using Aspose Word(not free)

具体实现

这里只提供Aspose的实现,因为这个不区分windows还是Linux操作系统。因为试过了,Doc4j需要依赖是Windows的,所以暂时不去研究了

官网

aspose官网

由于是收费的,所以这里的就按照官网的来,百度一搜随便都是jar包。我这里不贴了,毕竟不是免费的,可以自行搜索破解版。

不废话了,上代码

代码很简单的,这里写一个直接写文件的例子

创建一个springboot项目,然后把下载下来的jar包放到resource的lib下

然后右键这个jar包,然后点击Add as library,点击完了才是截图这样的,否则就只是一个jar包,点击了Add as library目的是为了让项目引入这个jar包。

pom文件增加依赖
xml 复制代码
<dependency>
    <groupId>com.aspose.words</groupId>
    <artifactId>aspose-words</artifactId>
    <version>19.3</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/src/main/resources/lib/aspose-words-19.3.jar</systemPath>
</dependency>
java 复制代码
package com.word2pdf.springbootword2pdf.controller;

import com.aspose.words.Document;
import com.aspose.words.ParagraphFormat;
import com.aspose.words.SaveFormat;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;

/**
 * word2pdf
 *
 * @author Rex
 * @since 2024/4/12 11:34
 */
@RestController
@RequestMapping("/pangolin/test")
public class TestController {
    @GetMapping("/word2pdf")
    public String test() throws Exception {
        InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("word/response.docx");
        Document doc = new Document(inputStream);
        ParagraphFormat pf=doc.getStyles().getDefaultParagraphFormat();
        pf.clearFormatting();
        File tempPdfFile = new File("./temp.pdf");
        FileOutputStream os = new FileOutputStream(tempPdfFile);
        doc.save(os, SaveFormat.PDF);
        return "1";
    }

}

遇到的问题

本地运行OK,发布到Linux报错

第一个坎儿,报错没有找到类

java 复制代码
java.lang.ClassNotFoundException: com.aspose.words.Document

这个是因为不是走的maven,自己放在项目的resources的lib下,本地运行可以的,但是打包需要在pom里增加配置

xml 复制代码
<build>
	<plugins>
		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
			<configuration>
				<!--打包的时候包含资源文件夹下自己的jar包-->
                   <includeSystemScope>true</includeSystemScope>
				<excludes>
					<exclude>
						<groupId>org.projectlombok</groupId>
						<artifactId>lombok</artifactId>
					</exclude>
				</excludes>
			</configuration>
		</plugin>
	</plugins>
</build>

这个为了打包的时候能给这个jar包包含进来。

还是本地OK,但是Linux能运行的,但是中文乱码

好一个中文乱码,这个问题是因为毕竟doc是基于windows的,所以这里是少字体包。

解决方式是,简单来说就是把windows的字体包拷贝到Linux中,然后安装即可

sh 复制代码
# 首先windows 字体库的路径 : C:\Windows\Fonts
# 在/usr/share/fonts/下新建文件夹 winFonts
cd /usr/share/fonts/winFonts
sudo mkfontscale
sudo mkfontdir //这两条命令是生成字体的索引信息
sudo fc-cache -fv //更新字体缓存

到此问题解决,还是需要有耐心,分析问题,解决问题,当然了也离不开运维同事的配合。

小结

遇到问题了先不要慌,冷静分析,相信自己能行。

附例子代码

相关推荐
reasonsummer4 小时前
【办公类-53-12】20261016(预测)Python模仿制作2026学年第二学期校历(excel+pdf,上下学期都包含)
pdf·excel
我是人✓5 小时前
SpringBoot项目的五种创建方式
java·spring boot·后端
古法老登瞎折腾8 小时前
大数据智能运维实战(一):机器和任务数据都有了,如何用 MCP 搭建运维助手?
大数据·运维·spring boot·spring ai·mcp
开开心心就好8 小时前
多份文档怎么批量打印?支持多种格式
java·服务器·开发语言·pdf·ocr·散列表·启发式算法
企业数字化笔记8 小时前
多租户配额怎么控制?用量口径、并发预留与超额处理的实现方法
java·数据库·spring boot
开开心心就好10 小时前
文件被占用删不掉?解锁工具强制删除
java·运维·服务器·开发语言·前端·pdf·ocr
WeiXin_DZbishe10 小时前
基于springboot装修风格选择系统的设计与开发-计算机毕设【课程设计】77964
java·vue.js·spring boot·后端·python·php·课程设计
十年Java程序媛12 小时前
Java 多线程基础与锁机制详解|进程线程、锁升级、synchronized 与 Lock 对比
java·开发语言·spring boot
BD_Marathon13 小时前
PyPDFLoader和MinerU加载pdf文件
pdf
Q264336502314 小时前
【有源码】基于SpringBoot+Vue的居民健康体检与慢病干预管理系统-面向智慧医疗的体检预约与健康知识服务平台
java·vue.js·spring boot·mysql·毕业设计·javaweb·课程设计