第一篇技术文~
题图 - Pixabay@eignatik17
这是我的第一篇技术文。
当我规划这篇文章的时候,我发现 Office 和 WPS 都可以另存为PDF 格式了。
我之前都是用https://app.xunjiepdf.com/word2pdf/ 这个网站去转 PDF,然后去打印,这个网站还限制 2M 以内的文档。
之所以要转 PDF 格式,是因为 word 文档在不同的 Office 版本显示不同,在 Office 和 WPS 显示也不同,在手机上显示也不同,就是排版会变形,你在你这边看到的是这样,发给老师或者老板,万一对方打开的方式不同,看到的可能又是另一样。
但是 PDF 格式的文件就不会变形。
正好目前工作需要在线转为 PDF 格式的需求,于是就调研了这个方法。
下面就是单独写一个项目实现 Word 转 PDF。
实践
IDE :IntelliJ IDEA
第一步,创建一个 Spring 的 Maven 类型项目。
语言:Java
框架:Spring Boot
下一步,选择 Spring Web 依赖关系。
先在 pom.xml 添加一下需要的依赖。
<!--word to pdf-->
<dependency>
<groupId>com.documents4j</groupId>
<artifactId>documents4j-api</artifactId>
<version>1.1.7</version>
</dependency>
<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>
然后新建一个 controller 的包,在下面新建一个 WordToPdfController
类,代码如下:
package com.example.wordtopdf.controller;
import com.documents4j.api.DocumentType;
import com.documents4j.api.IConverter;
import com.documents4j.job.LocalConverter;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.*;
/**
* @auther java
* @date 2022/2/26
*/
@RestController
public class WordToPdfController {
@RequestMapping("/toPdf")
private String wordToPdf() {
File inputWord = new File("测试文档.doc");
File outputFile = new File("测试文档.pdf");
try {
InputStream docxInputStream = new FileInputStream(inputWord);
OutputStream outputStream = new FileOutputStream(outputFile);
IConverter converter = LocalConverter.builder().build();
converter.convert(docxInputStream).as(DocumentType.DOC).to(outputStream).as(DocumentType.PDF).execute();
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
return "转换成功~";
}
}
项目架构如下:
启动项目,打开浏览器在地址栏输入localhost:8080/toPdf ,出现下面页面就表示转换成功了。
然后看到项目的根目录就生成了一个 PDF 文件。
打开 PDF 文件,和 Word 文件一模一样,success。
不知道这个方法限制多大的文件,但是我这个 word 文档是 10M 的。
这个方法的可用性还是很高的,有的网站导出报告就是 PDF 类型的,不知道背后是 word 转 PDF,还是直接生成的 PDF。
如果要是有服务器,直接部署在服务器上了,之前的服务器啥也没搞,浪费了,现在服务器太贵了,买不起。
过程
在调研这个功能的时候,还是很「辛苦」的,好像尝试了两三个方法之后才找到这个功能。
为了跑起来,又找了好多架包。
源码带的版本架包跑不通,就去 Maven 仓库用最新版本的架包,狂神说要用就用最新的,不行再降。
结果还是不行,一直降版本还是不行,又去调研,最后在一篇博客中看到用的是两个 1.0.3 版本的架包,试试,就不报错了。
但是,在 Linux 服务器部署后,竟然不行,PDF 文件是生成了,但是 0KB。就是这样的,在 Windows 上是可以的,在 Linux 上就是不行,需要一些操作,还没找到解决的方法,难搞啊。
今天继续解决这个问题,最后找到一个说可以在 Linux 上可以转 PDF 的方法aspose-words-15.8.0 完美解决word转pdf,我在本地操作了一下,本地成功转成 PDF 文件,代码已经提交,等合并部署之后看效果,再不行,我就 emo 了。
最后
我还是比较有点抗拒写技术博客的,毕竟代码不像文字。
这篇写起来还是比较轻松的,代码就十几行,逻辑也很简单,「有机会」再写一写技术文。
文档信息
- 本文作者:猿恋
- 本文链接:https://blog.apelove.top/2022/03/01/word-to-pdf/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)