office文件转换成pdf文件以及对PDF转缩略图。

1.将office文件转换成pdf文件

所需依赖:

       <!-- office转pdf2 -->
        <dependency>
            <groupId>com.documents4j</groupId>
            <artifactId>documents4j-local</artifactId>
            <version>1.1.7</version>
        </dependency>
        <dependency>
            <groupId>com.documents4j</groupId>
            <artifactId>documents4j-transformer-msoffice-word</artifactId>
            <version>1.1.7</version>
        </dependency>
        <dependency>
            <groupId>com.documents4j</groupId>
            <artifactId>documents4j-transformer-msoffice-excel</artifactId>
            <version>1.1.7</version>
        </dependency>

工具类formatConversion2Pdf方法: 可以将office文件流输出为byte[]数组

 /**
     * office文件转换成pdf文件
     *
     * @param inputStream
     * @return 注意调用的是本地ws office的服务,linux环境无法运行
     */
    public static byte[] formatConversion2Pdf(InputStream inputStream, String documentType) {
        try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
            IConverter converter = LocalConverter.builder().build();
            DocumentType officeType = null;
            switch (documentType) {
                case "doc":
                    officeType = DocumentType.DOC;break;
                case "docx":
                    officeType = DocumentType.DOCX;break;
                case "xls":
                    officeType = DocumentType.XLS;break;
                case "xlsx":
                    officeType = DocumentType.XLSX;break;
            }
            //officeType类型转换DocumentType.PDF
            converter.convert(inputStream).as(officeType).to(baos).as(DocumentType.PDF).execute();
            converter.kill();
            System.out.println(DocumentType.DOC + " success convert to pdf");
            return baos.toByteArray();
        } catch (Exception e) {
            throw new RuntimeException(e);
        } finally {
            try {
                inputStream.close();
            } catch (Exception e) {
            }
        }
    }

测试类:

//word,excel转pdf
    @Test
    void formatConversion2PdfTest() throws Exception {
        String srcXls = "C:\\Users\\86131\\Desktop\\translate\\word\\bbb.xls";
        String srcXlsx = "C:\\Users\\86131\\Desktop\\translate\\word\\bbb2.xlsx";
        String srcDoc = "C:\\Users\\86131\\Desktop\\translate\\word\\ccc.doc";
        String srcDocx = "C:\\Users\\86131\\Desktop\\translate\\word\\ccc2.docx";

        InputStream srcXlsStream = Files.newInputStream(Paths.get(srcXls));
        InputStream srcXlsxStream = Files.newInputStream(Paths.get(srcXlsx));
        InputStream srcDocStream = Files.newInputStream(Paths.get(srcDoc));
        InputStream srcDocxStream = Files.newInputStream(Paths.get(srcDocx));
        //生成Docx文档字节
        byte[] docByte = OfficeWUtil.formatConversion2Pdf(srcDocStream, "doc");
        //生成Docx文档缩略图
        byte[] docxByte = OfficeWUtil.formatConversion2Pdf(srcDocxStream, "docx");
        //生成Xls表格字节
        byte[] xlsByte = OfficeWUtil.formatConversion2Pdf(srcXlsStream, "xls");
        //生成Xlsx表格字节
        byte[] xlsxByte = OfficeWUtil.formatConversion2Pdf(srcXlsxStream, "xlsx");

        OutputStream docOutputStream = Files.newOutputStream(Paths.get(getTongUrl(srcDoc, "-thumb.pdf")));
        OutputStream docxOutputStream = Files.newOutputStream(Paths.get(getTongUrl(srcDocx, "-thumb.pdf")));
        OutputStream xlsOutputStream = Files.newOutputStream(Paths.get(getTongUrl(srcXls, "-thumb.pdf")));
        OutputStream xlsxOutputStream = Files.newOutputStream(Paths.get(getTongUrl(srcXlsx, "-thumb.pdf")));
        docOutputStream.write(docByte);
        docxOutputStream.write(docxByte);
        xlsOutputStream.write(xlsByte);
        xlsxOutputStream.write(xlsxByte);
        docOutputStream.flush();
        docOutputStream.close();
        docxOutputStream.flush();
        docxOutputStream.close();
        xlsOutputStream.flush();
        xlsOutputStream.close();
        xlsxOutputStream.flush();
        xlsxOutputStream.close();
    }
     /**
     * 根据地址生成同级地址+suffix
     */
    private String getTongUrl(String srcPath, String suffix) {
        //获取文件后缀
        String srcSuffix = FileNameUtil.getSuffix(srcPath).toLowerCase();
        return srcPath.substring(0, srcPath.length() - srcSuffix.length() - 1) + suffix;
    }

    /**
     * 打印图片
     */
    public static void printImg(InputStream inputStream, String tarPath) throws Exception {
        printImg(ImageIO.read(inputStream), tarPath);
    }

    /**
     * 打印图片
     */
    public static void printImg(BufferedImage bufferedImage, String tarPath) throws Exception {
        ImageIO.write(bufferedImage, "jpg", new File(tarPath));
        System.out.println("打印图片成功");
    }

测试结果截图:

生成结果
测试结果

2.PDF转缩略图

所需依赖:

        <!-- pdf转png-->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.13</version>
        </dependency>
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>2.0.16</version>
        </dependency>
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>fontbox</artifactId>
            <version>2.0.16</version>
        </dependency>

工具类:pdfConversion2ImgStream
注意: 我是调用的自己写的生成缩略图的地址
链接:各种图片处理,hutool的裁剪工具。生成渐进式jpeg格式图片以及生成缩略图
//如果想自己写的话就修改返回值注释掉记性。

 /**
     * 获取Pdf流转换Img流,返回InputStream
     */
    public static InputStream pdfConversion2ImgStream(InputStream inputStream, String inputType) {
        try (PDDocument doc = PDDocument.load(inputStream)) {
            PDFRenderer renderer = new PDFRenderer(doc);
            int pageCount = doc.getNumberOfPages();
            if (pageCount > 0) {
                BufferedImage image = renderer.renderImage(0, 4.0f);
                image.flush();
                // 需要直接输出可以使用 ImageIO.write(image, "jpg", new FileOutputStream("a.jpg"));
                //调用图片裁剪流输出方法
                return ImageWUtil.bufferedConversion2ImgStream(image, inputType);
            }
            return null;
        } catch (Exception e) {
            throw new RuntimeException(e);
        } finally {
            try {
                inputStream.close();
            } catch (Exception e) {
            }
        }
    }

测试方法

//pdf生成缩略图到本地
    @Test
    void bufferedConversion2ImgStreamTest() throws Exception {
        String srcPdf = "C:\\Users\\86131\\Desktop\\translate\\pdf\\ppp.pdf";
        InputStream srcPdfStream = Files.newInputStream(Paths.get(srcPdf));
        //生成pdf缩略图
        InputStream inputPdfStream = OfficeWUtil.pdfConversion2ImgStream(srcPdfStream, "pdf");
        printImg(inputPdfStream, getTongUrl(srcPdf, "-thumb.jpg"));
    }
    /**
     * 根据地址生成同级地址+suffix
     */
    private String getTongUrl(String srcPath, String suffix) {
        //获取文件后缀
        String srcSuffix = FileNameUtil.getSuffix(srcPath).toLowerCase();
        return srcPath.substring(0, srcPath.length() - srcSuffix.length() - 1) + suffix;
    }

    /**
     * 打印图片
     */
    public static void printImg(InputStream inputStream, String tarPath) throws Exception {
        printImg(ImageIO.read(inputStream), tarPath);
    }

    /**
     * 打印图片
     */
    public static void printImg(BufferedImage bufferedImage, String tarPath) throws Exception {
        ImageIO.write(bufferedImage, "jpg", new File(tarPath));
        System.out.println("打印图片成功");
    }

测试结果图:

执行结果
控制台

附上完整OfficeWUtil工具类代码以及测试类:

import com.documents4j.api.DocumentType;
import com.documents4j.api.IConverter;
import com.documents4j.job.LocalConverter;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.InputStream;


/**
 * @program: spring-boot-demo
 * @author: Wu ZiLin
 * @create: 2023-09-06 16:14
 * @description: Office图片格式工具类
 **/
public class OfficeWUtil {
    private OfficeWUtil() {
    }
    /**
     * 获取Pdf流转换Img流,返回InputStream
     */
    public static InputStream pdfConversion2ImgStream(InputStream inputStream, String inputType) {
        try (PDDocument doc = PDDocument.load(inputStream)) {
            PDFRenderer renderer = new PDFRenderer(doc);
            int pageCount = doc.getNumberOfPages();
            if (pageCount > 0) {
                BufferedImage image = renderer.renderImage(0, 4.0f);
                image.flush();
                // 需要直接输出可以使用 ImageIO.write(image, "jpg", new FileOutputStream("a.jpg"));
                //调用图片裁剪流输出方法
                return ImageWUtil.bufferedConversion2ImgStream(image, inputType);
            }
            return null;
        } catch (Exception e) {
            throw new RuntimeException(e);
        } finally {
            try {
                inputStream.close();
            } catch (Exception e) {
            }
        }
    }

    /**
     * office文件转换成pdf文件
     *
     * @param inputStream
     * @return 注意调用的是本地ws office的服务,linux环境无法运行
     */
    public static byte[] formatConversion2Pdf(InputStream inputStream, String documentType) {
        try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
            IConverter converter = LocalConverter.builder().build();
            DocumentType officeType = null;
            switch (documentType) {
                case "doc":
                    officeType = DocumentType.DOC;break;
                case "docx":
                    officeType = DocumentType.DOCX;break;
                case "xls":
                    officeType = DocumentType.XLS;break;
                case "xlsx":
                    officeType = DocumentType.XLSX;break;
            }
            //officeType类型转换DocumentType.PDF
            converter.convert(inputStream).as(officeType).to(baos).as(DocumentType.PDF).execute();
            converter.kill();
            System.out.println(DocumentType.DOC + " success convert to pdf");
            return baos.toByteArray();
        } catch (Exception e) {
            throw new RuntimeException(e);
        } finally {
            try {
                inputStream.close();
            } catch (Exception e) {
            }
        }
    }
}

import cn.hutool.core.io.file.FileNameUtil;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import zut.wu.fileinstall.FileInstallDemoApplication;
import zut.wu.fileinstall.utils.OfficeWUtil;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Paths;

/**
 * @program: spring-boot-demo
 * @author: Wu ZiLin
 * @create: 2023-09-07 17:41
 * @description:
 **/
//FileInstallDemoApplication.class 是我的启动类
@SpringBootTest(classes = FileInstallDemoApplication.class)
public class OfficeWUtilTest {
    //pdf生成缩略图到本地
    @Test
    void bufferedConversion2ImgStreamTest() throws Exception {
        String srcPdf = "C:\\Users\\86131\\Desktop\\translate\\pdf\\ppp.pdf";
        InputStream srcPdfStream = Files.newInputStream(Paths.get(srcPdf));
        //生成pdf缩略图
        InputStream inputPdfStream = OfficeWUtil.pdfConversion2ImgStream(srcPdfStream, "pdf");
        printImg(inputPdfStream, getTongUrl(srcPdf, "-thumb.jpg"));
    }

    //word,excel转pdf
    @Test
    void formatConversion2PdfTest() throws Exception {
        String srcXls = "C:\\Users\\86131\\Desktop\\translate\\word\\bbb.xls";
        String srcXlsx = "C:\\Users\\86131\\Desktop\\translate\\word\\bbb2.xlsx";
        String srcDoc = "C:\\Users\\86131\\Desktop\\translate\\word\\ccc.doc";
        String srcDocx = "C:\\Users\\86131\\Desktop\\translate\\word\\ccc2.docx";

        InputStream srcXlsStream = Files.newInputStream(Paths.get(srcXls));
        InputStream srcXlsxStream = Files.newInputStream(Paths.get(srcXlsx));
        InputStream srcDocStream = Files.newInputStream(Paths.get(srcDoc));
        InputStream srcDocxStream = Files.newInputStream(Paths.get(srcDocx));
        //生成Docx文档字节
        byte[] docByte = OfficeWUtil.formatConversion2Pdf(srcDocStream, "doc");
        //生成Docx文档缩略图
        byte[] docxByte = OfficeWUtil.formatConversion2Pdf(srcDocxStream, "docx");
        //生成Xls表格字节
        byte[] xlsByte = OfficeWUtil.formatConversion2Pdf(srcXlsStream, "xls");
        //生成Xlsx表格字节
        byte[] xlsxByte = OfficeWUtil.formatConversion2Pdf(srcXlsxStream, "xlsx");

        OutputStream docOutputStream = Files.newOutputStream(Paths.get(getTongUrl(srcDoc, "-thumb.pdf")));
        OutputStream docxOutputStream = Files.newOutputStream(Paths.get(getTongUrl(srcDocx, "-thumb.pdf")));
        OutputStream xlsOutputStream = Files.newOutputStream(Paths.get(getTongUrl(srcXls, "-thumb.pdf")));
        OutputStream xlsxOutputStream = Files.newOutputStream(Paths.get(getTongUrl(srcXlsx, "-thumb.pdf")));
        docOutputStream.write(docByte);
        docxOutputStream.write(docxByte);
        xlsOutputStream.write(xlsByte);
        xlsxOutputStream.write(xlsxByte);
        docOutputStream.flush();
        docOutputStream.close();
        docxOutputStream.flush();
        docxOutputStream.close();
        xlsOutputStream.flush();
        xlsOutputStream.close();
        xlsxOutputStream.flush();
        xlsxOutputStream.close();
    }

    /**
     * 根据地址生成同级地址+suffix
     */
    private String getTongUrl(String srcPath, String suffix) {
        //获取文件后缀
        String srcSuffix = FileNameUtil.getSuffix(srcPath).toLowerCase();
        return srcPath.substring(0, srcPath.length() - srcSuffix.length() - 1) + suffix;
    }

    /**
     * 打印图片
     */
    public static void printImg(InputStream inputStream, String tarPath) throws Exception {
        printImg(ImageIO.read(inputStream), tarPath);
    }

    /**
     * 打印图片
     */
    public static void printImg(BufferedImage bufferedImage, String tarPath) throws Exception {
        ImageIO.write(bufferedImage, "jpg", new File(tarPath));
        System.out.println("打印图片成功");
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小吴同学泡冷茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值