以下是一个基本的Java8和Spring Boot实现,可以将doc/pdf/ppt格式的文件上传、根据页数重命名、转换为图片并保存到指定文件夹:

  1. 创建一个Spring Boot项目,并添加以下依赖:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.17</version>
</dependency>

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.17</version>
</dependency>

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml-schemas</artifactId>
    <version>3.17</version>
</dependency>

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.7</version>
</dependency>

<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.15</version>
</dependency>

<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox-tools</artifactId>
    <version>2.0.15</version>
</dependency>

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-io</artifactId>
    <version>1.3.2</version>
</dependency>

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-scratchpad</artifactId>
    <version>3.17</version>
</dependency>

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-scratchpad</artifactId>
    <version>3.17</version>
</dependency>

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-excelant</artifactId>
    <version>3.17</version>
</dependency>

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml-schemas</artifactId>
    <version>3.17</version>
</dependency>

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-examples</artifactId>
    <version>3.17</version>
</dependency>

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>ooxml-schemas</artifactId>
    <version>1.4</version>
</dependency>

<dependency>
    <groupId>org.apache.xmlbeans</groupId>
    <artifactId>xmlbeans</artifactId>
    <version>3.1.0</version>
</dependency>

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml-schemas</artifactId>
    <version>3.17</version>
</dependency>

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml-schemas</artifactId>
    <version>3.17</version>
</dependency>

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml-schemas</artifactId>
    <version>3.17</version>
</dependency>
  1. 创建一个文件上传服务:
@Service
public class FileUploadService {
    private final String UPLOAD_PATH = "C:/uploads"; //指定上传文件保存的路径

    public String uploadFile(MultipartFile file) throws IOException {
        String originalName = file.getOriginalFilename();
        String fileType = originalName.substring(originalName.lastIndexOf(".") + 1); //获取文件后缀名

        //根据不同的文件类型进行处理
        switch (fileType.toLowerCase()) {
            case "doc":
            case "docx":
                return uploadWordFile(file);
            case "ppt":
            case "pptx":
                return uploadPptFile(file);
            case "pdf":
                return uploadPdfFile(file);
            default:
                throw new RuntimeException("Unsupported file format!");
        }
    }

    private String uploadWordFile(MultipartFile file) throws IOException {
        File uploadDir = new File(UPLOAD_PATH);
        if (!uploadDir.exists()) {
            uploadDir.mkdirs();
        }

        File newFile = new File(UPLOAD_PATH + "/" + UUID.randomUUID().toString() + ".png");
        XWPFDocument doc = new XWPFDocument(file.getInputStream());
        List<XWPFParagraph> paragraphs = doc.getParagraphs();

        //计算总页数
        int totalPages = 0;
        for (XWPFParagraph paragraph : paragraphs) {
            if (paragraph.isPageBreak()) {
                totalPages++;
            }
        }

        //将每一页转换为图片
        for (int i = 0; i < totalPages; i++) {
            doc.showPageBreaks(true);
            BufferedImage bufferedImage = ImageIO.read(new ByteArrayInputStream(WordToImageUtils.transfer(doc, i)));
            ImageIO.write(bufferedImage, "png", new File(UPLOAD_PATH + "/" + UUID.randomUUID().toString() + ".png"));
        }

        return newFile.getAbsolutePath();
    }

    private String uploadPptFile(MultipartFile file) throws IOException {
        File uploadDir = new File(UPLOAD_PATH);
        if (!uploadDir.exists()) {
            uploadDir.mkdirs();
        }

        File newFile = new File(UPLOAD_PATH + "/" + UUID.randomUUID().toString() + ".png");
        XMLSlideShow ppt = new XMLSlideShow(file.getInputStream());
        List<XSLFSlide> slides = ppt.getSlides();

        //计算总页数
        int totalPages = slides.size();

        //将每一页转换为图片
        for (int i = 0; i < totalPages; i++) {
            BufferedImage bufferedImage = ImageIO.read(new ByteArrayInputStream(SlideToImageUtils.transfer(slides.get(i))));
            ImageIO.write(bufferedImage, "png", new File(UPLOAD_PATH + "/" + UUID.randomUUID().toString() + ".png"));
        }

        return newFile.getAbsolutePath();
    }

    private String uploadPdfFile(MultipartFile file) throws IOException {
        File uploadDir = new File(UPLOAD_PATH);
        if (!uploadDir.exists()) {
            uploadDir.mkdirs();
        }

        File newFile = new File(UPLOAD_PATH + "/" + UUID.randomUUID().toString() + ".png");
        PDDocument pdf = PDDocument.load(file.getInputStream());
        PDPageTree pages = pdf.getPages();

        //计算总页数
        int totalPages = pages.getCount();

        //将每一页转换为图片
        for (int i = 0; i < totalPages; i++) {
            BufferedImage bufferedImage = new PDFRenderer(pdf).renderImageWithDPI(i, 300, ImageType.RGB);
            ImageIO.write(bufferedImage, "png", new File(UPLOAD_PATH + "/" + UUID.randomUUID().toString() + ".png"));
        }

        return newFile.getAbsolutePath();
    }
}
  1. 创建一个文件上传控制器:
@RestController
public class FileUploadController {
    @Autowired
    private FileUploadService fileUploadService;

    @PostMapping("/upload")
    public String uploadFile(@RequestParam("file") MultipartFile file) throws IOException {
        return fileUploadService.uploadFile(file);
    }
}
  1. 测试上传一个doc/ppt/pdf文件并查看上传的图片是否已保存到指定文件夹中。

注意:以上代码仅供参考,具体实现方式可能因实际需求而有所不同。

使用Java8和Spring Boot实现将docpdfppt格式的文件上传、根据页数重命名、转换为图片并保存到指定文件夹

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

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