因为项目中需要将用户上传的doc文档转成pdf格式,网上找了很多方案,最终选择使用

documents4j的方式。

首先需要添加相关依赖,因为我项目中使用guava的,因此在这里需要将此依赖中的guava依赖排除,避免出现依赖冲突。

        <dependency>
           <groupId>com.documents4j</groupId>
            <artifactId>documents4j-local</artifactId>
            <version>1.0.3</version>
            <exclusions>
                <exclusion>
                    <groupId>com.google.guava</groupId>
                    <artifactId>guava</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.documents4j</groupId>
            <artifactId>documents4j-transformer-msoffice-word</artifactId>
            <version>1.0.3</version>
        </dependency>

然后创建一个PDFUtil工具类

package com.donlim.fms.common.helper.pdf;

import com.documents4j.api.DocumentType;
import com.documents4j.api.IConverter;
import com.documents4j.job.LocalConverter;
import com.itextpdf.text.Image;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.*;
import com.itextpdf.text.pdf.parser.PdfReaderContentParser;

import javax.swing.*;
import java.awt.*;
import java.io.*;
import java.util.ArrayList;
import java.util.List;

/**
 * @author 李安山
 * @date 2023/9/6
 * @version 1.0
 */


public class PDFUtils {
   

    /**
     * word文档转pdf
     * @param fileName  文件地址 (绝对地址)
     * @return
     * @throws IOException
     */
    public static  String  wordToPdf(String fileName) throws IOException {
        String newFileName = null;
        File inputWord = new File(fileName);
        if (fileName.contains("docx")){
            newFileName = fileName.replace("docx","pdf");
        } else {
            newFileName = fileName.replace("doc","pdf");
        }
        File outputFile = new File(newFileName);
        InputStream docxInputStream = new FileInputStream(inputWord);
        OutputStream outputStream = new FileOutputStream(outputFile);
        IConverter converter = LocalConverter.builder().build();
        converter.convert(docxInputStream).as(DocumentType.DOCX).to(outputStream).as(DocumentType.PDF).execute();
        converter.shutDown();
        inputWord.delete();
        docxInputStream.close();
        outputStream.close();
        inputWord.exists();
        outputFile.exists();
        return newFileName;
    }

  


}

最好我们调用工具类中的wordToPdf方法将文件地址传入即可,生成的文件地址可以自行更改

此方法缺点是需要在服务器上安装office或者wps。否则转换会失败

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐