欢迎光临
我们一直在努力

ybdx是什么文件如何利用pdf.js 实现在前端预览 .pdf 文件?

1. 下载地址:

pdf.js 下载链接:https://pan.baidu.com/s/1sax0GNA_Y6XWNo19cwXJHA
提取码:78jz
2. 任务描述:

从接口返回处拿到了 pdf 编译成的 base64 编码,实现在前台预览 pdf 文件;
3. 测试流程:

这边提供了 pdf 文件转 base64 编码的方法;
1)利用 pdfToBase64String 方法将本地 pdf 文件转成 base64 编码;
2)利用 base64StringToPdf 方法将 base64编码 转成 pdf 文件,并获取 pdf 文件的输出流 ;(获取文件输出流后,删除了本地 pdf 文件,留意下)
3)在 JS 中利用 pdf.js 实现 pdf 文件的预览。
4. 代码内容:

1)pdf 转成 base64 编码方法,filePath 指定文件路径

  
    @RequestMapping(value = “/pdfToBase64String”)
    @ResponseBody
    public String pdfToBase64String(String filePath) {
        //文件输入流
        FileInputStream fin = null;
        //缓冲输入流
        BufferedInputStream bin = null;

        ByteArrayOutputStream baos;
        //缓冲输出流
        BufferedOutputStream bout = null;
        String a = null;
        try {
            //TODO 实例化 .pdf文件 对象
            File file = new File(filePath);
            //建立读取文件的文件输出流
            fin = new FileInputStream(file);
            //在文件输出流上安装节点流(更大效率读取)
            bin = new BufferedInputStream(fin);
            // 创建一个新的 byte 数组输出流,它具有指定大小的缓冲区容量
            baos = new ByteArrayOutputStream();
            //创建一个新的缓冲输出流,以将数据写入指定的底层输出流
            bout = new BufferedOutputStream(baos);
            byte[] buffer = new byte[1024];
            int len = bin.read(buffer);
            while (len != -1) {
                bout.write(buffer, 0, len);
                len = bin.read(buffer);
            }
            //刷新此输出流并强制写出所有缓冲的输出字节,必须这行代码,否则有可能有问题
            bout.flush();
            byte[] bytes = baos.toByteArray();
            //apache公司的API
            String base64 = Base64.encode(bytes);
            return base64;
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fin.close();
                bin.close();
                //关闭 ByteArrayOutputStream 无效。此类中的方法在关闭此流后仍可被调用,而不会产生任何 IOException
                //baos.close();
                bout.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
2)base64 编码转成 pdf 方法

    @RequestMapping(value = “/base64StringToPdf”)
    public void base64StringToPdf(String base64Content,String filePath,HttpServletResponse response)
            //创建指定文件的输出流
            fos = new FileOutputStream(file);
            //为文件输出流对接缓冲输出流对象
            bos = new BufferedOutputStream(fos);

            byte[] buffer = new byte[1024];
            int length = bis.read(buffer);
            while (length != -1) {
                bos.write(buffer, 0, length);
                length = bis.read(buffer);
            }
            // 刷新此输出流并强制写出所有缓冲的输出字节,必须这行代码,否则有可能有问
            bos.flush();
        } catch (Exception e) {
            e.printStackTrace();
        } finally
                if (fos != null) {
                    fos.close();
                }
                if (bos != null) {
                    bos.close();
                }
                //TODO 将.pdf文件放到输出流中
                try
                } catch (Exception e) {
                    e.printStackTrace();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
3)前端 HTML 文件,利用 iframe ,指定 src 的路径

  
  

   
   
   
  

4)Js文件,这边可能需要根据自身的实际情况改动

        
        //预览接口
        doPreview:function () {
            //获取 pdf 文件的输出流,对应 Java 后台的方法
            let url = ctx + '/base64StringToPdf';
            debugger
            console.log(url)
            //从缓冲输出流中获取
            //这个 viewer.html 是 pdf.js 里面的
            $('#pdfPrint')[0].src = ctx + '/static/js/pdf/web/viewer.html'+'?file='+ url;
        },
        //pdf 转 base64 接口
        btnPdfToBase64:function () {
            let filePath = “D:\测试.pdf”;
            //这边是调用后台方法,这边需要自己根据情况修改
            inDataService.pdfToBase64String({filePath:filePath}).then(data =>{
                console.log(data)
            })
        },

5. 效果图:

6. 缺陷:

利用 pdf.js 实现 pdf 文件的预览效果还是挺好的,唯一的遗憾就是打印的效果图不清晰,据说是因为游览器的原因。
注:有些注释可能不够权威,大家发现错误后希望提醒我!

赞(0)
未经允许不得转载:上海聚慕医疗器械有限公司 » ybdx是什么文件如何利用pdf.js 实现在前端预览 .pdf 文件?

登录

找回密码

注册