java实现Word文档(doc、docx)在线查看功能(前台+后台)

功能需求要求实现文档上传、下载、查看、删除,查看没弄过,别的就不提了,以下是我记录的实现文档在线查看的方法以及效果图

java实现Word文档(doc、docx)在线查看功能(前台+后台)_第1张图片java实现Word文档(doc、docx)在线查看功能(前台+后台)_第2张图片

实现思路

首先把word文件转为pdf,然后在用js查看pdf文件实现在线查看功能。

主要用到的知识点:

1.word转pdf:

导入包 com.aspose.words.Document;

使用其中的

//pathFile是doc路径

Document document = new Document(pathFile.toString());

  //pathDirs+File.separator+wordDate+"_"+netWork+".pdf"是pdf路径

 File outputFile = new File(pathDirs+File.separator+wordDate+"_"+netWork+".pdf");

 //操作文档保存

 document.save(outputFile.getAbsolutePath(), com.aspose.words.SaveFormat.PDF);

2.pdf通过response传给前台请求:(filePath是pdf的路径)

public  void wrightWord(HttpServletRequest request, HttpServletResponse response,String filePath)

            throws ServletException, IOException {

        try {

            //获取所要下载的文件名称

                String fileName=filePath.substring(filePath.lastIndexOf(File.separator)+1,filePath.length());

            String fileNameOld=fileName;

            //根据文件名获取 MIME 类型

            response.setCharacterEncoding("UTF-8");

            //设置ContentType字段值

            response.setContentType("application/pdf");

 

            if (request.getHeader("User-Agent").toLowerCase().indexOf("firefox") > 0) {

                fileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1"); // firefox浏览器

            } else if (request.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0) {

                fileName = URLEncoder.encode(fileName, "UTF-8");// IE浏览器

            }else if (request.getHeader("User-Agent").toUpperCase().indexOf("CHROME") > 0) {

                fileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1");// 谷歌

            }

 

            //下载文件所在目录

            String folder=filePath.replace(fileName,"");

            

            response.addHeader("Content-type", "application/pdf");

 

            response.addHeader("Content-Disposition", "attachment;filename="+fileName);

            //通知文件流读取文件

            InputStream in  = new FileInputStream(filePath);

//            InputStream in = getServletContext().getResourceAsStream(folder+filename);

            //获取response对象的输出流

            OutputStream out = response.getOutputStream();

            byte[] buffer = new byte[1024];

            int len;

            //循环取出流中的数据

            while((len = in.read(buffer)) != -1){

                out.write(buffer,0,len);

            }

            out.flush();

            in.close();

            out.close();

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

3.前台显示pdf文件,实现在线查看功能:

其中showPDF是pdf容器,前边那个url是对应的请求获取pdf文件。外层那个div是用来展示pdf的,给用户感觉就是点击打开,返回页面关闭,没有放对应的css,主要就是js实现,这个自己灵活写。

关键使用打开pdf文件的代码: PDFObject.embed("/spdbnb/file/showJys?netWork="+netWork+"&wordDate="+wordDate,"#showPDF");

你可能感兴趣的:(java实现Word文档(doc、docx)在线查看功能(前台+后台))