zoukankan      html  css  js  c++  java
  • 实现在线预览pdf文件(接口获取文件)

      上一篇说了关于文档转成pdf格式的方法,本篇说明获取相应的pdf在页面加载获取。

      本方法使用了第三方插件PDFObject(PDFObject官网地址) ,该插件支持的浏览器:Chrome, Firefox, Safari (macOS and iOS), IE 9-11, and MS Edge 等,亲测挺好用的。要实现pdf在线预览功能需要引入相关js,相关js可以从github下载(github地址),也可以从我分享的百度云链接下载,提取码:tas2 ,引入pdfobject.js/pdfobject.min.js即可。本demo仅仅展示通过接口来获取相应pdf展示,具体的实现如下:

    一,定义后台接口用于获取相应的pdf文件

        @RequestMapping(value = "/getPdfFile/{fileName}", method = RequestMethod.GET)
        public void getPdfFile(@RequestParam Map<String, String> param, HttpServletRequest request,
                HttpServletResponse response, @PathVariable String fileName) throws IOException {
            BufferedInputStream bis = null;
            OutputStream os = null;
         //上篇博客默认文件的hashcode值为文件名,此处暂且可以把fileName即hashCode当成文件的id操作
            try {
                // 文件名称,此处最好加一个fileName合法性判断
                String newfileName = fileName+".pdf";byte[] buf = new byte[1024];
                int len = 0;
                response.reset();
                response.setContentType("application/pdf;charset=utf-8");
           //切记此处不可写成response.setHeader("Content-disposition", "attachment;filename=" + fileName);        //添加attachment浏览器会响应下载,预览会失败
    response.setHeader(
    "Content-Disposition:inline", "filename=" +newfileName); String pdfPath = request.getServletContext().getRealPath("/convert") + File.separator + newfileName; File file = new File(pdfPath); if (file.exists()) { FileInputStream fis = new FileInputStream(pdfPath); if (fis != null) { bis = new BufferedInputStream(fis); os = response.getOutputStream(); while ((len = bis.read(buf)) != -1) { os.write(buf, 0, len); } } } } catch (Exception e) { e.printStackTrace(); } finally { if (bis != null) { bis.close(); } if (os != null) { os.close(); } } }

    二,编写html/jsp代码用于请求和展示请求的数据

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>pdf_priview</title>
    <style type="text/css">
    @charset "UTF-8";
    
    * { box-sizing: border-box; }
    
    body {
        font: 16px sans-serif;
        color: #454545;
        /*background: rgb(218,244,249);*/
        background: #fff;
        margin: 0;
        padding: 3rem 2rem 2rem 2rem;
    }
    
    h1 {
        font-weight: normal;
        font-size: 1.4rem;
        color: #555;
    }
    
    .pdfobject-com {
        position: absolute;
        top: 0;
        left: 0;
        z-index: 2016;
    }
    
    .pdfobject-com a:link, .pdfobject-com a:visited {
        color: #fff;
        font-weight: bold;
        display: block;
        padding: .25rem 1rem;
        background: #6699FF;
        text-decoration: none;
    }
    
    .pdfobject-com a:hover, .pdfobject-com a:visited:hover {
        color: #FFF;
        background: #FF3366;
        text-decoration: none;
    }
    
    .pdfobject-com a:before {
         content: "2190";
         margin-right: .25rem;
    }
    </style>
    
    
    <style>
    .pdfobject-container {
        max-width: 100%;
        width: 800px;
        height: 800px;
        border: 10px solid rgba(0,0,0,.2);
        margin: 0;
    }
    
    </style>
    </head>
    <body>
    <div id="my-pdf"></div>
    <script src="${config.path()}scripts/pdfobject.min.js"></script>
    <script>
    
    var options = {
        //height: "400px",可以设置宽高,也可以在外部css设置
        page: 1,  //默认一开始加载展示第几页
        fallbackLink: "<p>This is a <a href='[url]'>fallback link</a></p>",
        pdfOpenParams: {
            view: "FitV",
            pagemode: "thumbs",
            search: "lorem ipsum"
        }
    }
    //调用展示方法
    PDFObject.embed("${config.path()}hhwy/fileview/getPdfFile/ba95e9a428c958b6f846934dacc15d9a", "#my-pdf", options);
    </script>
    </body>
    </html>

      亲测可用,至此,文件上传,转pdf格式,并且在线预览功能完成。

  • 相关阅读:
    VC++ 利用PDB和dump文件定位问题并进行调试
    MFC限制edit控件的字符输入长度
    VC++ 使用CreateProcess创建新进程
    正则表达式验证HTTP地址是否合法
    C++ _access和_waccess的使用方法
    最后一次谈 VirtualBox的安装方法
    解决/var/log下没有messages文件的问题?
    待续未完- 自己写后台内容管理程序的辅助内容
    php中的正则函数:正则匹配,正则替换,正则分割 所有的操作都不会影响原来的字符串.
    未完待续
  • 原文地址:https://www.cnblogs.com/id-tangrenhui/p/11798592.html
Copyright © 2011-2022 走看看