在Java中,将Word文档转换为PDF文件的需求越来越普遍,尤其在企业和办公自动化系统中。本文将总结几种常用的方法来实现这一功能,并附上代码示例。
方法一:使用Apache POI和Apache PDFBox
Apache POI是一个流行的Java库,用于处理Microsoft Office格式的文件,而Apache PDFBox则是用于创建和操作PDF文档的库。虽然这两个库本身不直接支持Word转PDF,但可以通过先读取Word内容再生成PDF来实现。
示例代码:
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
public class WordToPDFConverter {
public static void convert(String srcPath, String destPath) {
try (FileInputStream fis = new FileInputStream(srcPath);
XWPFDocument document = new XWPFDocument(fis);
PDDocument pdfDocument = new PDDocument()) {
PDPage page = new PDPage();
pdfDocument.addPage(page);
PDPageContentStream contentStream = new PDPageContentStream(pdfDocument, page);
List<XWPFParagraph> paragraphs = document.getParagraphs();
for (XWPFParagraph paragraph : paragraphs) {
String text = paragraph.getText();
contentStream.beginText();
contentStream.setFont(PDType1Font.HELVETICA, 12);
contentStream.newLineAtOffset(25, 700 - (paragraphs.indexOf(paragraph) * 15));
contentStream.showText(text);
contentStream.endText();
}
contentStream.close();
pdfDocument.save(destPath);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String wordFilePath = "example.docx";
String pdfFilePath = "example.pdf";
convert(wordFilePath, pdfFilePath);
}
}
方法二:使用Aspose.Words
Aspose.Words是一个功能强大的商业库,支持从多种格式转换文档,包括从Word到PDF。虽然Aspose是收费的,但其功能非常强大,适合企业级应用。
示例代码:
import com.aspose.words.Document;
public class WordToPDFConverter {
public static void convert(String srcPath, String destPath) {
try {
Document doc = new Document(srcPath);
doc.save(destPath);
System.out.println("转换成功!");
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String wordFilePath = "example.docx";
String pdfFilePath = "example.pdf";
convert(wordFilePath, pdfFilePath);
}
}
方法三:使用LibreOffice及其Java接口
LibreOffice是一个开源的办公软件套件,它提供了命令行接口,可以用于批量转换文件。可以通过Java调用系统命令来实现转换。
示例代码:
import java.io.IOException;
public class WordToPDFConverter {
public static void convert(String srcPath, String destPath) {
String command = "libreoffice --headless --convert-to pdf " + srcPath + " --outdir " + new File(destPath).getParent();
try {
Process process = Runtime.getRuntime().exec(command);
process.waitFor();
System.out.println("转换成功!");
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String wordFilePath = "example.docx";
String pdfFilePath = "example.pdf";
convert(wordFilePath, pdfFilePath);
}
}
总结
通过以上几种方法,我们可以在Java中实现Word到PDF的转换。Apache POI和PDFBox适合处理简单的转换需求,而Aspose.Words提供了更为全面的解决方案。但需要注意的是,Aspose是商业软件,适合企业使用。对于需要批量转换的场景,使用LibreOffice的命令行工具可能是一个更加灵活且免费的选择。