可以使用 Apache PDFBox 和 Apache POI 库来实现将 doc 和 pdf 文件转换为图片并按页数重命名保存的功能。

首先,在 pom.xml 文件中添加以下依赖:

<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.23</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>5.0.0</version>
</dependency>

然后,编写一个方法来实现文件上传并转换为图片的功能:

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.imageio.ImageIO;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;

import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

@Service
public class FileService {

    public List<String> uploadFile(MultipartFile file) throws IOException {
        List<String> filenames = new ArrayList<>();
        String originalFilename = file.getOriginalFilename();
        String extension = originalFilename.substring(originalFilename.lastIndexOf('.') + 1);

        if (extension.equalsIgnoreCase('doc') || extension.equalsIgnoreCase('docx')) {
            filenames = convertDocToImages(file);
        } else if (extension.equalsIgnoreCase('pdf')) {
            filenames = convertPdfToImages(file);
        }

        return filenames;
    }

    private List<String> convertDocToImages(MultipartFile file) throws IOException {
        List<String> filenames = new ArrayList<>();
        XWPFDocument docx = new XWPFDocument(file.getInputStream());
        List<XWPFParagraph> paragraphs = docx.getParagraphs();
        int pageNum = 1;
        for (XWPFParagraph para : paragraphs) {
            List<XWPFRun> runs = para.getRuns();
            BufferedImage image = new BufferedImage(612, 792, BufferedImage.TYPE_INT_RGB);
            for (XWPFRun run : runs) {
                run.setFontSize(10);
                run.setFontFamily('Arial');
                run.setBold(false);
                run.setItalic(false);
                run.setUnderline(false);
                String text = run.getText(0);
                if (text != null) {
                    int width = image.getWidth();
                    int height = image.getHeight();
                    image.getGraphics().drawString(text, width / 2, height / 2);
                }
            }
            String filename = 'page_' + pageNum + '.png';
            File outputfile = new File(filename);
            ImageIO.write(image, 'png', outputfile);
            filenames.add(filename);
            pageNum++;
        }
        docx.close();
        return filenames;
    }

    private List<String> convertPdfToImages(MultipartFile file) throws IOException {
        List<String> filenames = new ArrayList<>();
        PDDocument pdf = PDDocument.load(file.getInputStream());
        PDFRenderer renderer = new PDFRenderer(pdf);
        int pageNum = 1;
        for (int i = 0; i < pdf.getNumberOfPages(); i++) {
            String filename = 'page_' + pageNum + '.png';
            BufferedImage image = renderer.renderImageWithDPI(i, 300);
            File outputfile = new File(filename);
            ImageIO.write(image, 'png', outputfile);
            filenames.add(filename);
            pageNum++;
        }
        pdf.close();
        return filenames;
    }

}

在这个方法中,我们首先检查文件扩展名,如果是 doc 或 docx 文件,则使用 POI 库将文件转换为图片。如果是 pdf 文件,则使用 PDFBox 库进行转换。在转换的过程中,我们使用循环遍历每个页,并将每个页转换为一个图片,并按页数重命名为 page_1.png,page_2.png 等等。最后,将每个文件名添加到一个列表中,并将该列表返回。

请注意,这个方法返回一个列表,其中包含每个页的文件名。您可以使用这些文件名来保存图片到磁盘或数据库中。

Java Spring Boot 实现 Doc/PDF 文件按页数转换为图片并重命名保存

原文地址: https://www.cveoy.top/t/topic/l3fv 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录