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

简介:

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

第一步:装office

第二步:下载jacob

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

第三步:配置jdk

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

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

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

com.jacob

jacob

1.19

system

${project.basedir}/lib/jacob.jar

第五步:将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();

}

}

前端:

pdf在线预览

type="application/pdf" style="overflow: auto; width: 100%; height: 800px;" />

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值