java通过jacob实现office在线预览功能

简介:

这篇文章中的代码都是参考于网上的,只做一个记录。主要做的就是实现一个office在线预览功能。

第一步:装office

第二步:下载jacob

打开网址下载,目前最新的是1.19版本。

第三步:配置jdk

解压下载完的jacob压缩包,根据jdk的版本选择dll中的一个,放入/jdk/jre/bin中。

第四步:在项目中引入jar包

在maven官网上找不到com.jacob的jar包,只能手动引入,这个jar包在jacob的压缩包中有。

<dependency>
   <groupId>com.jacob</groupId>
   <artifactId>jacob</artifactId>
   <version>1.19</version>
   <scope>system</scope>
   <systemPath>${project.basedir}/lib/jacob.jar</systemPath>
</dependency>

第五步:将office转化为pdf文件

这里需要再次说明,这个代码不是我写的,这里只是做个记录,方便下次用到的时候直接使用。

import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletResponse;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
import org.springframework.web.bind.annotation.RestController;
import java.io.*;

@RestController
public class PdfConvert {

  @RequestMapping("/PdfConvert.do")
  public void PdfConvert(HttpServletResponse response) {
    String path = "C:\\Users\\acer\\Desktop\\测试.doc";
    String path2 = "C:\\Users\\acer\\Desktop\\测试.pdf";
    word2PDF(path, path2);
    String path3 = "C:\\Users\\acer\\Desktop\\测试2.ppt";
    String path4 = "C:\\Users\\acer\\Desktop\\测试2.pdf";
    ppt2PDF(path3, path4);
    String path5 = "C:\\Users\\acer\\Desktop\\测试3.xls";
    String path6 = "C:\\Users\\acer\\Desktop\\测试3.pdf";
    excel2PDF(path5, path6);
  }

  public boolean word2PDF(String inputFile, String pdfFile) {
    ActiveXComponent app = new ActiveXComponent("Word.Application");
    try {
      app.setProperty("Visible", false);
      Dispatch docs = app.getProperty("Documents").toDispatch();
      Dispatch doc = Dispatch.call(docs, "Open", new Object[]{inputFile, false, true}).toDispatch();
      Dispatch.call(doc, "ExportAsFixedFormat", new Object[]{pdfFile, 17});
      Dispatch.call(doc, "Close", new Object[]{false});
      app.invoke("Quit", 0);
      return true;
    } catch (Exception var6) {
      app.invoke("Quit", 0);
      return false;
    }
  }

  public boolean excel2PDF(String inputFile, String pdfFile) {
    ComThread.InitSTA(true);
    ActiveXComponent app = new ActiveXComponent("Excel.Application");
    try {
      app.setProperty("Visible", false);
      app.setProperty("AutomationSecurity", new Variant(3));
      Dispatch excels = app.getProperty("Workbooks").toDispatch();
      Dispatch excel = Dispatch.invoke(excels, "Open", 1, new Object[]{inputFile, new Variant(false), new Variant(false)}, new int[9]).toDispatch();
      Dispatch.invoke(excel, "ExportAsFixedFormat", 1, new Object[]{new Variant(0), pdfFile, new Variant(0)}, new int[1]);
      Dispatch.call(excel, "Close", new Object[]{false});
      if (app != null) {
        app.invoke("Quit", new Variant[0]);
        app = null;
      }

      ComThread.Release();
      return true;
    } catch (Exception var6) {
      app.invoke("Quit");
      return false;
    }
  }

  public boolean ppt2PDF(String inputFile, String pdfFile) {
    ActiveXComponent app = new ActiveXComponent("PowerPoint.Application");

    try {
      Dispatch ppts = app.getProperty("Presentations").toDispatch();
      Dispatch ppt = Dispatch.call(ppts, "Open", new Object[]{inputFile, true, true, false}).toDispatch();
      Dispatch.call(ppt, "SaveAs", new Object[]{pdfFile, 32});
      Dispatch.call(ppt, "Close");
      app.invoke("Quit");
      return true;
    } catch (Exception var6) {
      app.invoke("Quit");
      return false;
    }
  }
}

第六步:在页面上展示pdf

后端:

@RequestMapping("/GetPdf.do")
  public void GetPdf(HttpServletResponse response) {
    //从数据库中查出文件位置和文件名字
    String pdfpath = "C:\\Users\\acer\\Desktop\\测试.pdf";
    String pdfname = "测试";
    try {
      File file = new File(pdfpath);
      if (!file.exists()) {
        response.getWriter().write("该文档生成pdf失败,请下载文档查看");
        return;
      }
      InputStream fis = new FileInputStream(pdfpath);
      byte[] buffer = new byte[1024];
      response.reset();
      response.addHeader("Content-Disposition", "inline;filename=" + java.net.URLEncoder.encode(pdfname, "UTF-8"));
      response.addHeader("Content-Length", "" + file.length());
      response.setContentType("application/pdf");
      OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
      int nbytes = 0;
      while ((nbytes = fis.read(buffer)) != -1) {
        toClient.write(buffer, 0, nbytes);
        toClient.flush();
      }
      toClient.flush();
      toClient.close();
      fis.close();
    } catch (Exception ex) {
      ex.printStackTrace();
    }
  }

前端:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8"/>
  <title>pdf在线预览</title>
</head>
<body>
<div style=" width: 100%; height: 100%;">
  <embed src="/GetPdf.do"
      type="application/pdf" style="overflow: auto; width: 100%; height: 800px;" />
</div>
</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java实现在线预览的示例代码(openOffice实现)

    简介 之前有写了poi实现在线预览的文章,里面也说到了使用openOffice也可以做到,这里就详细介绍一下. 我的实现逻辑有两种: 一.利用jodconverter(基于OpenOffice服务)将文件(.doc..docx..xls..ppt)转化为html格式. 二.利用jodconverter(基于OpenOffice服务)将文件(.doc..docx..xls..ppt)转化为pdf格式. 转换成html格式大家都能理解,这样就可以直接在浏览器上查看了,也就实现了在线预览的功能:转换成

  • java通过jacob实现office在线预览功能

    简介: 这篇文章中的代码都是参考于网上的,只做一个记录.主要做的就是实现一个office在线预览功能. 第一步:装office 第二步:下载jacob 打开网址下载,目前最新的是1.19版本. 第三步:配置jdk 解压下载完的jacob压缩包,根据jdk的版本选择dll中的一个,放入/jdk/jre/bin中. 第四步:在项目中引入jar包 在maven官网上找不到com.jacob的jar包,只能手动引入,这个jar包在jacob的压缩包中有. <dependency> <groupI

  • Java实现办公文档在线预览功能

    java实现办公文件在线预览功能是一个大家在工作中也许会遇到的需求,网上些公司专门提供这样的服务,不过需要收费 如果想要免费的,可以用openoffice,实现原理就是: 通过第三方工具openoffice,将word.excel.ppt.txt等文件转换为pdf文件流: 当然如果装了Adobe Reader XI,那把pdf直接拖到浏览器页面就可以直接打开预览,前提就是浏览器支持pdf文件浏览. 我这里介绍通过poi实现word.excel.ppt转pdf流,这样就可以在浏览器上实现预览了.

  • SpringBoot实现文件在线预览功能的全过程

    目录 背景 系统设计 文件类型及方案 流程设计 系统实现 识别文件后缀 文件解析 系统效果 使用方法 项目源码地址 预览界面 总结 背景 最近公司内部oa系统升级,需要增加文件在线预览服务,最常见的文件就是office文档,一开始构思几个方案,比如office软件自带的文件转换,openoffice转换,offce365服务,aspose组件转换,最终采用了aspose转换,原因是组件功能完善,不依赖其它软件安装环境 系统设计 文件类型及方案 文件类型 预览方案 word aspsoe-word

  • ASP.NET实现word文档在线预览功能代码

    于是考虑在每个文件上传时为其生存一份HTMl文件,这样就能实现在线预览功能.主要代码如下 复制代码 代码如下: using System; using System.Collections; using System.Configuration; using System.Data; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using S

  • asp.net实现word文档在线预览功能的方法

    本文实例讲述了asp.net实现word文档在线预览功能的方法.分享给大家供大家参考.具体实现方法如下: 实现方式:office文档转html,再在浏览器里面在线浏览 1.首先引入com组件中office库,然后在程序集扩展中引入word的dll 2.将Microsoft.Office.Interop.Word的嵌入互操作类型设置为 false,如图 3.主要代码: 复制代码 代码如下: using System; using System.Collections.Generic; using

  • vue项目实现github在线预览功能

    最近在使用 vue-cli 脚手架工具构建自己的第一个 vue 项目,有点小激动,想把它上传到 github 并展示一下预览效果,结果踩了好多坑,折腾了大半天才弄好. 这里假设你也是和我一样使用了 vue-cli 搭建了自己的项目,并且项目也已经上传到了 github 问题1 当我们在命令行执行 npm run build 后,项目的目录下会生成一个 dist 文件夹,它里面又包含一个 static 文件夹和一个 index.html 文件,这是 webpack 最终打包好的文件 我们先尝试在浏

  • vue3如何实现PDF文件在线预览功能

    目录 概述 正文 创建 vue3 项目 添加 PDF 预览插件 总结 概述 之前我们用 Reactjs + React-PDF 实现了 React 版的 PDF 文件预览,今天我们用 Vue3 + Vue-PDF 实现 Vue 版本的 PDF 文件在线预览功能. 我们先来看看完成后效果 正文 创建 vue3 项目 我们先创建一个的 Vue3 项目, 在终端中输入命令 pnpm create vite vue-pdf-preview 选择 vue-ts 回车,cd 进入项目根目录,执行 pnpm

  • Vue实现docx、pdf格式文件在线预览功能

    目录 介绍 docx 安装 使用 PDF 安装 引入和使用 pdf的放大和缩小 多格式的文件渲染函数映射 不支持的文件提示处理 总结 介绍 在业务中,如果遇到文档管理类的功能,会出现需要在线预览的业务需求,本文主要是通过第三方库来实现文档预览功能,并将其封装成preview组件 docx docx的实现需要使用docx-preview插件 安装 npm i docx-preview 使用 创建一个容器标签 <div ref="file" v-show="extend =

  • Java实现PDF在线预览功能(四种方式)

    目录 Java实现PDF在线预览 Java快捷实现PDF在线预览 Java实现PDF在线预览 @RequestMapping("/preview1") public void er(HttpServletResponse response){ File file = new File("G:\\桌面\\Thymeleaf3.0中文翻译文档@www.java1234.com.pdf"); if (file.exists()){ byte[] data = null;

  • JS+HTML5实现图片在线预览功能

    本文实例为大家分享了HTML5图片在线预览的具体代码,供大家参考,具体内容如下 <!DOCTYPE html> <html> <head> <title>HTML5图片预览</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script src="http://img9.ton

随机推荐