当前位置: 首页 > ops >正文

Springboot集成OpenOffice实现各类文件转PDF,在线预览

一、下载安装OpenOffice

Springboot集成OpenOffice,首先计算机环境是需要OpenOffice的。

官网下载地址Apache OpenOffice - Official Download

下载完成双击exe文件进行安装

需要先解压缩再进行安装,解压缩可以修改路径
安装时有典型安装和自定义安装。典型安装默认装在C盘,自定义安装可修改安装位置

安装完成后进入到安装目录,再进入到program文件

在输入栏输入cmd再回车,进入命令行窗口

在命令行窗口内输入以下语句进行启动:

soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard

二、Springboot项目集成OpenOffice

pom文件中先导入相关依赖:

        <dependency><groupId>org.jodconverter</groupId><artifactId>jodconverter-core</artifactId><version>4.2.2</version></dependency><dependency><groupId>org.jodconverter</groupId><artifactId>jodconverter-spring-boot-starter</artifactId><version>4.2.2</version></dependency><dependency><groupId>org.jodconverter</groupId><artifactId>jodconverter-local</artifactId><version>4.2.2</version></dependency>

yml配置文件:

jodconverter:local:enabled: trueoffice-home: C:\Program Files (x86)\OpenOffice 4 #安装路径max-tasks-per-process: 10port-numbers: 8100 #端口号

由于我代码中将用户上传的文件、以及转换后的文件都存储在计算机上,所以我配置了两个地址

file:source_path: D:/sourceFiles/target_path: D:/targetFiles/

编写控制器进行实现:

import com.wk.convert.config.FileProperties;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.jodconverter.DocumentConverter;
import org.jodconverter.office.OfficeException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.InputStreamResource;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.apache.pdfbox.pdmodel.PDDocument;
import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.*;
import java.nio.file.Files;
import java.util.*;
import java.io.File;
import java.io.IOException;
import java.util.concurrent.CompletableFuture;@Slf4j
@RestController
@RequestMapping()
@Api(tags = "文件")
public class FileController {@Autowiredprivate DocumentConverter converter;@SneakyThrows@ApiOperation(value = "文件预览")@PostMapping("/viewPDF")public void viewPDF(HttpServletResponse response, @RequestPart("multipartFile") MultipartFile multipartFile) {File targetFile = getPDFFile(multipartFile);if (targetFile == null) return;// 返回前端预览String pdfPath = targetFile.getAbsolutePath();try {ServletOutputStream outputStream = response.getOutputStream();InputStream in = Files.newInputStream(new File(pdfPath).toPath());IOUtils.copy(in, outputStream);in.close();outputStream.close();} catch (Exception e) {e.printStackTrace();}}@ApiOperation(value = "文件转换PDF")@PostMapping("/toPDF")public ResponseEntity<InputStreamResource> toPDF(HttpServletRequest request, HttpServletResponse response, @RequestPart("multipartFile") MultipartFile multipartFile) throws IOException, OfficeException {File targetFile = getPDFFile(multipartFile);if (targetFile == null) return null;// 返回文件InputStream inputStream = Files.newInputStream(new File(targetFile.getAbsolutePath()).toPath());HttpHeaders headers = new HttpHeaders();headers.add("Content-Disposition", "attachment; filename=" + targetFile.getName());return ResponseEntity.ok().headers(headers).contentType(MediaType.APPLICATION_OCTET_STREAM).body(new InputStreamResource(inputStream));}private File getPDFFile(MultipartFile multipartFile) throws IOException, OfficeException {if (multipartFile.isEmpty()) {log.info("文件为空");return null;}File file1 = new File(FileProperties.SOURCE_PATH);if (!file1.exists()) file1.mkdir();File file2 = new File(FileProperties.TARGET_PATH);if (!file2.exists()) file2.mkdir();String originalFilename = Objects.requireNonNull(multipartFile.getOriginalFilename());String fileName = UUID.randomUUID().toString().replaceAll("-", "").substring(0, 6) + "_" + originalFilename.split("\\.")[0];File sourceFile = new File(FileProperties.SOURCE_PATH + fileName + "." + originalFilename.substring(originalFilename.lastIndexOf(".") + 1));try (FileOutputStream fos = new FileOutputStream(sourceFile)) {fos.write(multipartFile.getBytes());}File targetFile = new File(FileProperties.TARGET_PATH + fileName + ".pdf");converter.convert(sourceFile).to(targetFile).execute();return targetFile;}}

文件配置类 

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;@Configuration
public class FileProperties {public static String SOURCE_PATH;public static String TARGET_PATH;@Value("${file.source_path}")public void setSourcePath(String sourcePath) {SOURCE_PATH = sourcePath;}@Value("${file.target_path}")public void setTargetPath(String targetPath) {TARGET_PATH = targetPath;}
}

附上简单前端代码:

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>File Converter</title>
</head>
<body>
<h1>Converter</h1><br>
<form action="/viewPDF" method="post" enctype="multipart/form-data"><label>文件预览:</label><input type="file" name="multipartFile" accept="application/*"><button type="submit">submit</button>
</form><br>
<form action="/toPDF" method="post" enctype="multipart/form-data"><label>文件转PDF:</label><input type="file" name="multipartFile" accept="application/*"><button type="submit">submit</button>
</form></body>
</html>

实现效果:

http://www.xdnf.cn/news/11622.html

相关文章:

  • KMP算法详解及各种应用
  • code::blocks代码及信息回顾
  • malloc 的实现原理
  • CSDN规则详解(三)
  • 【Kubernetes系列】私有仓库Harbor和Registry的安装使用
  • test ui-03-cypress 入门介绍
  • Tomcat配置的下载和安装教程(10.1.28)
  • MapReduce详细介绍
  • 【新版】软考 - 系统架构设计师(总结笔记)
  • Dialog详解
  • IDS的详细介绍
  • FreeMarker常见操作
  • MVC、MVP、MVVM模式的概念与区别
  • JDBC基础知识
  • 2024年Web前端最全WebService(1)—WebService的相关概念(WSDL、SOAP、SEI、CXF(1),字节跳动已经四面还见了hr
  • 经典SQL语句大全(基础、提升、技巧、数据开发、基本函数)
  • ngrok软件实现内网穿透
  • 如何修改 Windows 本地 hosts 文件
  • Appium 是什么?
  • CRC 校验解释
  • python中%s是什么意思_python的%s是什么意思
  • Spring Security详细介绍使用
  • LDAP概念和原理介绍
  • Google Protocol Buffers(Protobuf):入门指南、介绍和应用场景
  • 图数据库是什么?一文快速了解相关概念
  • 什么是护网?2024护网行动怎么参加?一文详解_护网具体是做啥的
  • 详解TCP协议(一)——TCP是什么及报文结构
  • EasyUi框架
  • ⭐️Composer常见错误解决
  • C++stack