一、前言
word文档转化可以使用Apache POI处理;
POI本身可能对PPT转PDF支持不够好,特别是复杂的格式。
word文件与ppt文件名格式:.doc、.docx、.ppt、.pptx结尾
Aspose.Slides(用于处理PPT文档),但请注意,Aspose.Slides是商业软件,需要购买许可证。对于PDF生成,iText是一个常用的库。
使用Apache POI处理Word文档,并使用一个能够直接转换Office文档到PDF的工具,比如JODConverter(基于LibreOffice/OpenOffice的转换服务)。
二、例子
1、安装LibreOffice或者OpenOffice :
(1、Windows/Mac:从官网下载安装(不管怎么选路径,需要的安装目录都在"C:/Program Files (x86)/OpenOffice 4/")
(2、Linux:sudo apt-get install libreoffice/
sudo apt-get install openoffice.org
2、引入依赖:
<dependency>
<groupId>org.jodconverter</groupId>
<artifactId>jodconverter-local</artifactId>
<version>4.4.4</version>
</dependency>
3、代码
public class LvCs {
// 定义支持的文档扩展名
private static final String[] SUPPORTED_EXTENSIONS = {
".doc", ".docx", ".ppt", ".pptx"
};
public static void main(String[] args) {
File inputFile = new File("D:\\cs\\upload\\2024\\pdfzh\\tm.pptx");
File outputFile = new File("D:\\cs\\upload\\2024\\pdfzh\\output.pdf");
if (isSupportedFormat(inputFile)) {
try {
convertToPdf(inputFile, outputFile);
System.out.println("转换成功!");
} catch (Exception e) {
System.err.println("转换失败: " + e.getMessage());
}
} else {
System.err.println("不支持的文件格式");
}
}
/**
* 检查文件是否为支持的格式
*/
private static boolean isSupportedFormat(File file) {
String fileName = file.getName().toLowerCase();
for (String ext : SUPPORTED_EXTENSIONS) {
if (fileName.endsWith(ext)) {
return true;
}
}
return false;
}
/**
* 使用 LibreOffice/OpenOffice 进行文档转换
*/
@SneakyThrows
private static void convertToPdf(File inputFile, File outputFile) throws IOException {
// 配置 LibreOffice 路径(根据实际安装路径修改)
LocalOfficeManager officeManager = LocalOfficeManager.builder()
.officeHome("C:\\Program Files (x86)\\OpenOffice 4") // Windows 示例
//.officeHome("/usr/lib/libreoffice") // Linux 示例
//.officeHome("/Applications/LibreOffice.app/Contents") // Mac 示例
.install()
.build();
try {
officeManager.start();
LocalConverter.make(officeManager)
.convert(inputFile)
.to(outputFile)
.execute();
} catch (Exception e) {
throw new IOException("文档转换失败", e);
} finally {
officeManager.stop();
}
}
4、成功转化
over~over~over~over~over~over~over~over~over~over~over~over~over~over~over~