在线预览doc,docx文档

前言:上传成功以后的每个文档都能获取到所传文件的路径;

我这里是一个maven项目,需要在pom文件引入

<!-- 文件预览 --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.15</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>3.15</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.15</version></dependency><dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>xdocreport</artifactId><version>1.0.6</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>3.15</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>ooxml-schemas</artifactId><version>1.3</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.3</version></dependency>

点击在线预览的时候,前端需要给后台传入这条数据的id
需要在你项目的static/img下边新建一个doc文件夹,存放所需要的文档;里面的图片 如图:


先将所需要的东西封装好

package com.xxxxx.xxxx.controller.tool;import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.List;import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.converter.PicturesManager;
import org.apache.poi.hwpf.converter.WordToHtmlConverter;
import org.apache.poi.hwpf.usermodel.Picture;
import org.apache.poi.hwpf.usermodel.PictureType;
import org.apache.poi.xwpf.converter.core.BasicURIResolver;
import org.apache.poi.xwpf.converter.core.FileImageExtractor;
import org.apache.poi.xwpf.converter.xhtml.XHTMLConverter;
import org.apache.poi.xwpf.converter.xhtml.XHTMLOptions;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.w3c.dom.Document;public class Doc2Html {/*** doc转换为html* * * @param* *          fileName* *            docx文件路径(如果你的是存到文件服务器的,直接用路径,如果是直接将文件流存到数据库的,转为InputStream )* * @param* *            outPutFile* *            html输出文件路径* * @throws TransformerException* @throws IOException* @throws ParserConfigurationException*/public static void doc2Html(String fileName, String outPutFile, String imgPath)throws TransformerException, IOException, ParserConfigurationException {long startTime = System.currentTimeMillis();// HWPFDocument wordDocument = new HWPFDocument(fileName);HWPFDocument wordDocument = new HWPFDocument(new FileInputStream(fileName));WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument());wordToHtmlConverter.setPicturesManager(new PicturesManager() {public String savePicture(byte[] content, PictureType pictureType, String suggestedName, float widthInches,float heightInches) {return "/img/doc/" + suggestedName;}});wordToHtmlConverter.processDocument(wordDocument);// 保存图片List<Picture> pics = wordDocument.getPicturesTable().getAllPictures();if (pics != null) {for (int i = 0; i < pics.size(); i++) {Picture pic = (Picture) pics.get(i);String suggestFullFileName = pic.suggestFullFileName();System.out.println(suggestFullFileName);try {pic.writeImageContent(new FileOutputStream(imgPath + "/src/main/resources/static/img/doc/" + pic.suggestFullFileName()));} catch (FileNotFoundException e) {e.printStackTrace();}}}Document htmlDocument = wordToHtmlConverter.getDocument();ByteArrayOutputStream out = new ByteArrayOutputStream();DOMSource domSource = new DOMSource(htmlDocument);StreamResult streamResult = new StreamResult(out);TransformerFactory tf = TransformerFactory.newInstance();Transformer serializer = tf.newTransformer();serializer.setOutputProperty(OutputKeys.ENCODING, "utf-8");serializer.setOutputProperty(OutputKeys.INDENT, "yes");serializer.setOutputProperty(OutputKeys.METHOD, "html");serializer.transform(domSource, streamResult);out.close();writeFile(new String(out.toByteArray()), outPutFile);System.out.println("Generate " + outPutFile + " with " + (System.currentTimeMillis() - startTime) + " ms.");}/*** 写文件* * @param content* @param path*/public static void writeFile(String content, String path) {FileOutputStream fos = null;BufferedWriter bw = null;try {File file = new File(path);fos = new FileOutputStream(file);bw = new BufferedWriter(new OutputStreamWriter(fos, "utf-8"));bw.write(content);} catch (FileNotFoundException fnfe) {fnfe.printStackTrace();} catch (IOException ioe) {ioe.printStackTrace();} finally {try {if (bw != null)bw.close();if (fos != null)fos.close();} catch (IOException ie) {}}}/*** docx格式word转换为html* * @param fileName*            docx文件路径(如果你的是存到文件服务器的,直接用路径,如果是直接将文件流存到数据库的,转为InputStream )* @param outPutFile*            html输出文件路径* @throws TransformerException* @throws IOException* @throws ParserConfigurationException*/public static void docx2Html(String fileName, String outPutFile, String imgPath)throws TransformerException, IOException, ParserConfigurationException {String fileOutName = outPutFile;long startTime = System.currentTimeMillis();XWPFDocument document = new XWPFDocument(new FileInputStream(fileName));// XWPFDocument document = new XWPFDocument(fileName);XHTMLOptions options = XHTMLOptions.create().indent(4);// 导出图片File imageFolder = new File(imgPath + "/src/main/resources/static/img/");options.setExtractor(new FileImageExtractor(imageFolder));// URI resolver// options.URIResolver(new FileURIResolver(imageFolder));options.URIResolver(new BasicURIResolver("/img/"));File outFile = new File(fileOutName);outFile.getParentFile().mkdirs();OutputStream out = new FileOutputStream(outFile);XHTMLConverter.getInstance().convert(document, out, options);System.out.println("Generate " + fileOutName + " with " + (System.currentTimeMillis() - startTime) + " ms.");}public static void main(String[] args) throws Exception {// Doc2Html.docx2Html("D:\\测试文档.docx","D:\\cs.html");}}

调用封装好的接口

public void devDoc(HttpServletResponse response, int kid) throws Exception {//获取项目的路径String realPath = System.getProperty("user.dir");Long kId = (long) kid;InputStream input = null;OutputStream out = null;CrKnowledge crKnowledge = crKnowledgeService.selectCrKnowledgeById(kId);CrKnowledgeAttach crKnowledgeAttach = new CrKnowledgeAttach();crKnowledgeAttach.setKUid(kId);crKnowledgeAttach.setFjName(crKnowledge.getKName());List<CrKnowledgeAttach> crKnowledgeAttachs = crKnowledgeAttachService.selectCrKnowledgeAttachList(crKnowledgeAttach);for (CrKnowledgeAttach crKnowledgeAttach2 : crKnowledgeAttachs) {crKnowledgeAttach.setFjUrl(crKnowledgeAttach2.getFjUrl());// 在线预览//获取文件路径String filePath = Global.getUploadPath();String string = crKnowledgeAttach2.getFjUrl().substring(15);filePath+=string;//截取文件名称(查看获取到的文件名是否需要截取,这里需要全路径,需要截取)String filename = crKnowledgeAttach2.getFjName();String caselsh = filename.substring(0,filename.lastIndexOf("."));if (crKnowledgeAttach2.getFjTag1().equals("docx")) {Doc2Html.docx2Html(filePath, "D:\\"+caselsh+".html",realPath);input = new FileInputStream("D:\\"+caselsh+".html");response.setContentType("text/html;charset=UTF-8");// 解决页面显示乱码out = response.getOutputStream();} else if (crKnowledgeAttach2.getFjTag1().equals("doc")) {Doc2Html.doc2Html(filePath, "D:\\"+caselsh+".html",realPath);input = new FileInputStream("D:\\"+caselsh+".html");response.setContentType("text/html;charset=UTF-8");// 解决页面显示乱码out = response.getOutputStream();}FileInputStream fis = new FileInputStream("D:\\"+caselsh+".html");byte[] b = new byte[fis.available()];if (out != null) {if (input != null) {input.read(b);out.write(b);} else {System.out.println("InputStream为空。。。");}} else {System.out.println("OutputStream为空。。。");}out.flush();input.close();out.close();}}

前端需要传一个id直接展示就成:


这里我用ajax进行传值

$(function(){/* 获取到id进行传值 */var kid=[[${kid}]];var data={"kid":kid};$.ajax({type: "POST",url: url+"xxx/xxxxxx/devDoc",data: data,dataType: 'text',success: function(data) {$("#div2").html(data);}})})

效果图:

欢迎指出意见

在线预览doc,docx文档相关推荐

  1. 利用微软的Office Online在线预览播放Office文档,无工具栏

    利用微软的Office Online在线预览播放Office文档 通过微软的在线预览URL链接可以直接打开在线PPT文档如下 https://view.officeapps.live.com/op/v ...

  2. wps在线预览接口_文档在线预览的实现

    最近在研究企业文档管理,这个是基本上所有企业都需要的软件,当然也是有很多种解决方案.对于企业文档来说,最基本的需求就是独立存储,共享.这种需求只需要建立一个Windows共享文件夹或者架一个Samba ...

  3. wps在线预览接口_WPS文档在线预览接入的一点心得

    花了大半天时间接入WPS文档在线预览功能,还算比较顺利. 原来的OA系统一直用到文档在线预览功能,之前是用微软+officeweb365来实现的.一直感觉不太理想.昨天无意间见到金山WPS开放了在线文 ...

  4. php 在线预览office 相关文档

    若不使用第三方的软件,类如卓正公司的PageOffice等专业工具,要想实现在自己平台上word,excel,ppt,pdf等格式的在线预览.推荐使用一些方法. 1.Excel 引用第三方的平台,通过 ...

  5. python爬虫读取pdf_python爬虫处理在线预览的pdf文档

    引言 最近在爬一个网站,然后爬到详情页的时候发现,目标内容是用pdf在线预览的 比如如下网站: https://camelot-py.readthedocs.io/en/master/_static/ ...

  6. vue3 - 网页在线预览 office word 文档,打开 .doc / .docx 文件显示并解析文档内容功能效果(超详细示例功能源码,复制粘贴后开箱即用)

    效果图 本博客实现了在 vue3 项目中,实现预览 word 文档功能示例,打开后缀名为 .doc / .docx 的文件进行显示解析, 如下图真实运行所示,兼容任意浏览器,你可以一键复制示例源码稍微 ...

  7. 文件在线预览doc,docx转换pdf(一)

    文件在线预览doc,docx转换pdf(一) 前言 文档转换是一个是一块硬骨头,但是也是必不可少的,我们正好做的知识库产品中,也面临着同样的问题,文档转换,精准的全文搜索,知识的转换率,是知识库产品的 ...

  8. 使用Unoconv和LibreOffice进行格式转换实现在线预览 doc,doxc,xls,xlsx,ppt,pptx 文件

    此项目根据企业真实需求制作而成,希望能帮助大家解决在线预览的问题! 此项目已开源,欢迎大家来STAR 软件 版本 SpringBoot 2.2.2.RELEASE LibreOffice 6.3.2 ...

  9. SpringBoot 使用LibreOffice 在线预览 doc,doxc,xls,xlsx,ppt,pptx 文件

    接上一篇:linux环境源码安装unoconv Linux环境_源码安装Unoconv实现文件在线预览doc,doxc,xls,xlsx,ppt,pptx 文件 https://gblfy.blog. ...

最新文章

  1. 面部识别技术走到十字路口?
  2. UVA11992不错的线段树段更新
  3. 用js控制video的src_百度知道
  4. 分数怎么在计算机上关,电脑如何在注册表上关闭AutoRun功能
  5. 14-容器网络之host和none
  6. Spring Boot文档阅读笔记-对Messaging with RabbitMQ解析
  7. MySQL 重中之重 [ 事物 ]
  8. ##CSP认证 201909-2小明种苹果(续)(100分)
  9. ReactNative 使用SectionList时出现一个黄色警告VirtualizedList:missing keys for items解决方法
  10. 网络***思路总结 Network penetration ideas
  11. beetl html模板,Beetl模板引擎之自定义html标签
  12. centOS下python用ffmpeg将MP3转换成WAV
  13. 慎用!3个容易被打的Python恶搞脚本!
  14. 脑皮质算法(3)-- 新皮层的位置:利用皮层网格细胞的感觉运动物体识别理论
  15. 程序员笔试题收集汇总(三)
  16. sumifs(多条件求和,多条件计数,数据分类汇总利器)、countifs
  17. QT ACTIVEX最新操作WORD文档的一些心得
  18. 富途php面试经验,忍不住想吐槽一下富途二面体验
  19. .Net加密与解密——非对称加密之加密模式
  20. android自动获取系统时间,Android获取系统时间的多种方法

热门文章

  1. 唯品会(VIP)按关键词搜索 API
  2. Vue:首屏加载页实现
  3. python(2048)
  4. 【机器学习】正样本和负样本
  5. cdn部署php,Typecho博客全站部署腾讯云CDN教程
  6. 摇床摇篮是哄睡很好用的工具
  7. 谷歌又闹大乌龙!Jeff Dean参与的新模型竟搞错Hinton生日
  8. 现在40系显卡都快出来了,为何1060型号的显卡还有这么多人用?
  9. 好用的语音转文字的软件
  10. 那些看着高大上的名词