在开发中,经常会碰到需要把 word 文档转换成 pdf 格式的需求,像生成报告、合同啥的。java 有不少好用的库能实现这个功能,下面就给大家介绍两种常见的方法,分别使用 apache poi 和 docx4j 结合 itext 库来实现 word 转 pdf。
方法一:使用 apache poi 和 itext
1. 引入依赖
如果你用 maven 管理项目,在 pom.xml 里添加以下依赖:
<dependencies>
<!-- apache poi 处理 word 文档 -->
<dependency>
<groupid>org.apache.poi</groupid>
<artifactid>poi-ooxml</artifactid>
<version>5.2.3</version>
</dependency>
<!-- itext 生成 pdf 文档 -->
<dependency>
<groupid>com.itextpdf</groupid>
<artifactid>itextpdf</artifactid>
<version>5.5.13.3</version>
</dependency>
</dependencies>
2. 代码示例
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.pdfwriter;
import org.apache.poi.xwpf.usermodel.xwpfdocument;
import org.apache.poi.xwpf.usermodel.xwpfparagraph;
import org.apache.poi.xwpf.usermodel.xwpfrun;
import java.io.*;
public class wordtopdfwithpoi {
public static void main(string[] args) {
try {
// 读取 word 文档
fileinputstream fis = new fileinputstream("input.docx");
xwpfdocument document = new xwpfdocument(fis);
// 创建 pdf 文档
document pdfdoc = new document();
pdfwriter.getinstance(pdfdoc, new fileoutputstream("output.pdf"));
pdfdoc.open();
// 遍历 word 文档的段落
for (xwpfparagraph paragraph : document.getparagraphs()) {
stringbuilder text = new stringbuilder();
// 遍历段落中的文本运行对象
for (xwpfrun run : paragraph.getruns()) {
text.append(run.gettext(0));
}
// 将段落文本添加到 pdf 文档中
paragraph pdfparagraph = new paragraph(text.tostring());
pdfdoc.add(pdfparagraph);
}
// 关闭文档和流
pdfdoc.close();
document.close();
fis.close();
system.out.println("word 转 pdf 成功!");
} catch (exception e) {
e.printstacktrace();
system.out.println("word 转 pdf 失败:" + e.getmessage());
}
}
}
3. 代码解释
读取 word 文档:用 fileinputstream 读取 input.docx 文件,再用 xwpfdocument 类把它加载到内存。
创建 pdf 文档:创建 document 对象表示 pdf 文档,用 pdfwriter 关联输出流,然后打开文档准备写入内容。
遍历 word 文档段落:遍历 word 文档的每个段落,把段落里的文本提取出来,添加到 stringbuilder 里,再创建 paragraph 对象添加到 pdf 文档中。
关闭文档和流:操作完成后,关闭 pdf 文档、word 文档和输入流。
方法二:使用 docx4j
1. 引入依赖
在 pom.xml 里添加以下依赖:
<dependencies>
<dependency>
<groupid>org.docx4j</groupid>
<artifactid>docx4j-jaxb-internal</artifactid>
<version>11.4.9</version>
</dependency>
<dependency>
<groupid>org.docx4j</groupid>
<artifactid>docx4j-jaxb-referenceimpl</artifactid>
<version>11.4.9</version>
</dependency>
<dependency>
<groupid>org.docx4j</groupid>
<artifactid>docx4j</artifactid>
<version>11.4.9</version>
</dependency>
<dependency>
<groupid>org.docx4j</groupid>
<artifactid>docx4j-export-fo</artifactid>
<version>11.4.9</version>
</dependency>
</dependencies>2. 代码示例
import org.docx4j.docx4j;
import org.docx4j.convert.out.fosettings;
import org.docx4j.openpackaging.packages.wordprocessingmlpackage;
import java.io.file;
import java.io.fileoutputstream;
import java.io.outputstream;
public class wordtopdfwithdocx4j {
public static void main(string[] args) {
try {
// 加载 word 文档
wordprocessingmlpackage wordmlpackage = wordprocessingmlpackage.load(new file("input.docx"));
// 创建 fosettings 对象
fosettings fosettings = docx4j.createfosettings();
fosettings.setwmlpackage(wordmlpackage);
// 创建输出流
outputstream os = new fileoutputstream(new file("output.pdf"));
// 转换并保存为 pdf
docx4j.topdf(fosettings, os, docx4j.flag_export_prefer_xsl);
// 关闭输出流
os.close();
system.out.println("word 转 pdf 成功!");
} catch (exception e) {
e.printstacktrace();
system.out.println("word 转 pdf 失败:" + e.getmessage());
}
}
}3. 代码解释
加载 word 文档:用 wordprocessingmlpackage.load 方法加载 input.docx 文件。
创建 fosettings 对象:fosettings 用于配置转换设置,把加载的 word 文档设置进去。
创建输出流:创建 fileoutputstream 用于输出 pdf 文件。
转换并保存为 pdf:调用 docx4j.topdf 方法进行转换,并将结果保存到输出流。
关闭输出流:操作完成后,关闭输出流。
嘿,朋友们!这两种方法都能帮你用 java 把 word 文档转换成 pdf。你可以根据自己的需求和喜好选择合适的方法。
到此这篇关于java实现一键将word文档转为pdf的文章就介绍到这了,更多相关java word转pdf内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论