springboot实现文件预览

日常问题 专栏收录该内容
4 篇文章 0 订阅

springboot实现文件预览

如果直接预览.pdf文件

由于安全问题,当url为本地路径的时候,前端不能直接使用window.open(url)打开文件。
解决方案:

-pom.xml导入

<!--    文件格式转换-->
    <dependency>
      <groupId>com.artofsolving</groupId>
      <artifactId>jodconverter</artifactId>
      <version>2.2.1</version>
    </dependency>
    <dependency>
      <groupId>org.openoffice</groupId>
      <artifactId>jurt</artifactId>
      <version>3.0.1</version>
    </dependency>
    <dependency>
      <groupId>org.openoffice</groupId>
      <artifactId>ridl</artifactId>
      <version>3.0.1</version>
    </dependency>
    <dependency>
      <groupId>org.openoffice</groupId>
      <artifactId>juh</artifactId>
      <version>3.0.1</version>
    </dependency>
    <dependency>
      <groupId>org.openoffice</groupId>
      <artifactId>unoil</artifactId>
      <version>3.0.1</version>
    </dependency>
  • 写一个config
@Configuration
public class MyConfig  implements WebMvcConfigurer {

	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
		registry.addResourceHandler("/Path/**").addResourceLocations("file:/E:/file_PDF/");
	}
}

前面的路径为返回前端的虚拟路径,后面的 路径为保存文件的本地路径。

需要文件格式转换

  • 需要下载officeopen
  • 下载完成后进入officeopen.exe 文件目录(我的为C:\Program Files (x86)\OpenOffice 4\program\)
  • 在目录下cmd执行soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard
  • 代码进行转换
@RequestMapping("/showPDF")
	public String changeType(String fid,String fileName,HttpServletRequest request) throws ConnectException {
		String srcPath = "E:\\file_upload\\" + fid + "_" + fileName;
		File inputFile = new File(srcPath);
		if (!inputFile.exists()){
			System.out.println("源文件不存在!");
			return "";
		}
//  把文件名转化为.pdf结尾
		String targetFileName = fileName.substring(0,fileName.lastIndexOf('.')) + ".pdf";

		String targetPath = "E:\\file_PDF\\"+fid + "_" + targetFileName;



		File outputFile = new File(targetPath);
// 如果这个文件之前转换过
//		直接展示
		if (outputFile.exists()){
			return "/Path/" + fid + "_" + targetFileName;
		}

		if (!outputFile.getParentFile().exists()){
			outputFile.getParentFile().mkdirs();
		}

		// 调用openoffice服务线程
//		进入officeopen 目录启动
//soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard
		String command = "C:\\Program Files (x86)\\OpenOffice 4\\program\\soffice.exe -headless -accept=\"socket,host=127.0.0.1,port=8100;urp;\"";
		Process p = null;
		try {
			p = Runtime.getRuntime().exec(command);
		} catch (IOException e) {
			e.printStackTrace();
		}

		// 连接openoffice服务
		OpenOfficeConnection connection = new SocketOpenOfficeConnection(
			"127.0.0.1", 8100);
		connection.connect();

		// 支持转换txt doc ppt xls文件到pdf
		DocumentConverter converter = new StreamOpenOfficeDocumentConverter(
			connection);
		converter.convert(inputFile, outputFile);

		// 关闭连接
		connection.disconnect();

		// 关闭进程
		p.destroy();
		System.out.println("转换完成!");
		return "/Path/" + fid + "_" + targetFileName;
	}

注意:
由于jodconverter 2.2.1版本不能将.doxc 文件转化成pdf。将版本改为2.2.2
2.2.2版本的仓库里面没有需要自己在网上然后下载jar包自己导入

  • 0
    点赞
  • 0
    评论
  • 5
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:深蓝海洋 设计师:CSDN官方博客 返回首页

打赏作者

悟世皆为空!

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值