利用 pdf.js 实现在前端预览 .pdf 文件

目录

1. 下载地址:

2. 任务描述:

3. 测试流程:

4. 代码内容:

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

2)base64 编码转成 pdf 方法

3)前端 HTML 文件,利用 iframe ,指定 src 的路径

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

5. 效果图:

6. 缺陷:

注:有些注释可能不够权威,大家发现错误后希望提醒我!


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){

        //缓冲输入流
        BufferedInputStream bis = null;
        //文件输出流
        FileOutputStream fos = null;
        //缓冲输出流
        BufferedOutputStream bos = null;
        //.pdf文件转成的base64编码
        base64Content = "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L0F2Z1dpZHRoIDQ0Ny9NYXhXaWR0aCAxMjkyL0ZvbnRXZWlnaHQgNDAwL1hIZWlnaHQgMjUwL1N0ZW1WIDQ0L0ZvbnRCQm94WyAtMTQxIC0yMzIgMTE1MSA4MTBdIC9Gb250RmlsZTIgNTYgMCBSPj4NCmVuZG9iag0KMTAgMCBvYmoNCjw8L1R5cGUvRXh0R1N0YXRlL0JNL05vcm1hbC9jYSAxPj4NCmVuZG9iag0KMTEgMCBvYmoNCjw8L1R5cGUvRXh0R1N0YXRlL0JNL05vcm1hbC9DQSAxPj4NCmVuZG9iag0KMTIgMCBvYmoNCjw8L1R5cGUvRm9udC9TdWJ0eXBlL1RydWVUeXBlL05hbWUvRjIvQmFzZUZvbnQvQkNERkVFK0RlbmdYaWFuL0VuY29kaW5nL1dpbkFuc2lFbmNvZGluZy9Gb250RGVzY3JpcHRvciAxMyAwIFIvRmlyc3RDaGFyIDMyL0xhc3RDaGFyIDEyMC9XaWR0aHMgNTggMCBSPj4NCmVuZG9iag0KMTMgMCBvYmoNCjw8L1R5cGUvRm9udERlc2NyaXB0b3IvRm9udE5hbWUvQkNERkVFK0RlbmdYaWFuL0ZsYWdzIDMyL0l0YWxpY0FuZ2xlIDAvQXNjZW50IDgxMC9EZXNjZW50IC0yMzIvQ2FwSGVpZ2h0IDgxMC9BdmdXaWR0aCA0NDcvTWF4V2lkdGggMTI5Mi9Gb250V2VpZ2h0IDQwMC9YSGVpZ2h0IDI1MC9TdGVtViA0NC9Gb250QkJveFsgLTE0MSAtMjMyIDExNTEgODEwXSAvRm9udEZpbGUyIDU2IDAgUj4+DQplbmRvYmoNCjE0IDAgb2JqDQo8PC9UeXBlL1hPYmplY3QvU3VidHlwZS9JbWFnZS9XaWR0aCA1MzcvSGVpZ2h0IDIyNi9Db2xvclNwYWNlL0RldmljZVJHQi9CaXRzUGVyQ29tcG9uZW50IDgvSW50ZXJwb2xhdGUgZmFsc2UvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxNTEwNj4+DQpzdHJlYW0NCnic7J0HdBvXmag3dpzdTZ7TT042e7LvOS/7zq6T7Cax49iiiBn0TnQ2kEQHSALsVaRYRKvLlmVLtqxuq9iULMleO7ZjJ66Su+Iix12iTTX23ovk9w+GHAzRCIoUAUE/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CeuW0PFh63dY0sr8XGdXa22W8oH9ostZXP3CDWGxG61kAlNVJnKTySe7kSwp1CjaievJT1zul3xUq17S8uHA7IvAeL8QbbrabzMgQTsjP2dhK/1E6lBum4GZBfEH/AfWhcadDQplbmRzdHJlYW0NCmVuZG9iag0KNTcgMCBvYmoNClsgMFsgMTAwMF0gIDI4NTk1WyAyNzRdICAyODY0MVsgNzI5XSAgMjg2NDZbIDUxNF0gIDI4NjYwWyA1MDFdICAyODY2NFsgNTE0XSAgMjg2NzJbIDg0MV0gIDI4NjgzWyA0NDBdIF0gDQplbmRvYmoNCjU4IDAgb2JqDQpbIDI3NCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCA3MjkgMCAwIDAgMCA1MTQgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCA1MDEgMCAwIDAgNTE0IDAgMCAwIDAgMCAwIDAgODQxIDAgMCAwIDAgMCAwIDAgMCAwIDAgNDQwXSANCmVuZG9iag0KNTkgMCBvYmoNCjw8L1R5cGUvTWV0YWRhdGEvU3VidHlwZS9YTUwvTGVuZ3RoIDMwNTY+Pg0Kc3RyZWFtDQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IjMuMS03MDEiPgo8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgo8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiAgeG1sbnM6cGRmPSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZi8xLjMvIj4KPHBkZjpQcm9kdWNlcj5NaWNyb3NvZnTCriBXb3JkIDIwMTk8L3BkZjpQcm9kdWNlcj48L3JkZjpEZXNjcmlwdGlvbj4KPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyI+CjxkYzpjcmVhdG9yPjxyZGY6U2VxPjxyZGY6bGk+dHVkYWRhPC9yZGY6bGk+PC9yZGY6U2VxPjwvZGM6Y3JlYXRvcj48L3JkZjpEZXNjcmlwdGlvbj4KPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+Cjx4bXA6Q3JlYXRvclRvb2w+TWljcm9zb2Z0wq4gV29yZCAyMDE5PC94bXA6Q3JlYXRvclRvb2w+PHhtcDpDcmVhdGVEYXRlPjIwMTktMTAtMTJUMTQ6MTI6MTkrMDg6MDA8L3htcDpDcmVhdGVEYXRlPjx4bXA6TW9kaWZ5RGF0ZT4yMDE5LTEwLTEyVDE0OjEyOjE5KzA4OjAwPC94bXA6TW9kaWZ5RGF0ZT48L3JkZjpEZXNjcmlwdGlvbj4KPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIj4KPHhtcE1NOkRvY3VtZW50SUQ+dXVpZDpBNTEyRjdENC03NjE2LTRGMTUtQjA4Qi0xRENERUE1QjI3OTQ8L3htcE1NOkRvY3VtZW50SUQ+PHhtcE1NOkluc3RhbmNlSUQ+dXVpZDpBNTEyRjdENC03NjE2LTRGMTUtQjA4Qi0xRENERUE1QjI3OTQ8L3htcE1NOkluc3RhbmNlSUQ+PC9yZGY6RGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8L3JkZjpSREY+PC94OnhtcG1ldGE+PD94cGFja2V0IGVuZD0idyI/Pg0KZW5kc3RyZWFtDQplbmRvYmoNCjYwIDAgb2JqDQo8PC9EaXNwbGF5RG9jVGl0bGUgdHJ1ZT4+DQplbmRvYmoNCjYxIDAgb2JqDQo8PC9UeXBlL1hSZWYvU2l6ZSA2MS9XWyAxIDQgMl0gL1Jvb3QgMSAwIFIvSW5mbyAxNSAwIFIvSURbPEQ0RjcxMkE1MTY3NjE1NEZCMDhCMURDREVBNUIyNzk0PjxENEY3MTJBNTE2NzYxNTRGQjA4QjFEQ0RFQTVCMjc5ND5dIC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDE2Nj4+DQpzdHJlYW0NCnicNdA7EsFwEMfxTcjDIwhCxCteN8EMV6KjMRozOgdQuYBTKHWu4Ajxt1+22M9s8duZXRFTWWaZHop8ucJLsSPFCeAEN8Vdw1nxdnCHt+JflMJRWczNQrM6lhGMYQJTSCEHv8DMxJfpf7LAhjy44EAfQqhBCYrggQ8FqEIFyhBAD7rQggjq0IAmJNCBNsQwhIE5bLXX96wfyoZpK/BUDonIB9+GFlkNCmVuZHN0cmVhbQ0KZW5kb2JqDQp4cmVmDQowIDYyDQowMDAwMDAwMDE2IDY1NTM1IGYNCjAwMDAwMDAwMTcgMDAwMDAgbg0KMDAwMDAwMDE2NiAwMDAwMCBuDQowMDAwMDAwMjIyIDAwMDAwIG4NCjAwMDAwMDA1MzMgMDAwMDAgbg0KMDAwMDAwMTI5MyAwMDAwMCBuDQowMDAwMDAxNDI0IDAwMDAwIG4NCjAwMDAwMDE0NTIgMDAwMDAgbg0KMDAwMDAwMTYxMCAwMDAwMCBuDQowMDAwMDAxNjgzIDAwMDAwIG4NCjAwMDAwMDE5MjMgMDAwMDAgbg0KMDAwMDAwMTk3NyAwMDAwMCBuDQowMDAwMDAyMDMxIDAwMDAwIG4NCjAwMDAwMDIyMDIgMDAwMDAgbg0KMDAwMDAwMjQ0MyAwMDAwMCBuDQowMDAwMDE3NzMyIDAwMDAwIG4NCjAwMDAwMDAwMTcgNjU1MzUgZg0KMDAwMDAwMDAxOCA2NTUzNSBmDQowMDAwMDAwMDE5IDY1NTM1IGYNCjAwMDAwMDAwMjAgNjU1MzUgZg0KMDAwMDAwMDAyMSA2NTUzNSBmDQowMDAwMDAwMDIyIDY1NTM1IGYNCjAwMDAwMDAwMjMgNjU1MzUgZg0KMDAwMDAwMDAyNCA2NTUzNSBmDQowMDAwMDAwMDI1IDY1NTM1IGYNCjAwMDAwMDAwMjYgNjU1MzUgZg0KMDAwMDAwMDAyNyA2NTUzNSBmDQowMDAwMDAwMDI4IDY1NTM1IGYNCjAwMDAwMDAwMjkgNjU1MzUgZg0KMDAwMDAwMDAzMCA2NTUzNSBmDQowMDAwMDAwMDMxIDY1NTM1IGYNCjAwMDAwMDAwMzIgNjU1MzUgZg0KMDAwMDAwMDAzMyA2NTUzNSBmDQowMDAwMDAwMDM0IDY1NTM1IGYNCjAwMDAwMDAwMzUgNjU1MzUgZg0KMDAwMDAwMDAzNiA2NTUzNSBmDQowMDAwMDAwMDM3IDY1NTM1IGYNCjAwMDAwMDAwMzggNjU1MzUgZg0KMDAwMDAwMDAzOSA2NTUzNSBmDQowMDAwMDAwMDQwIDY1NTM1IGYNCjAwMDAwMDAwNDEgNjU1MzUgZg0KMDAwMDAwMDA0MiA2NTUzNSBmDQowMDAwMDAwMDQzIDY1NTM1IGYNCjAwMDAwMDAwNDQgNjU1MzUgZg0KMDAwMDAwMDA0NSA2NTUzNSBmDQowMDAwMDAwMDQ2IDY1NTM1IGYNCjAwMDAwMDAwNDcgNjU1MzUgZg0KMDAwMDAwMDA0OCA2NTUzNSBmDQowMDAwMDAwMDQ5IDY1NTM1IGYNCjAwMDAwMDAwNTAgNjU1MzUgZg0KMDAwMDAwMDA1MSA2NTUzNSBmDQowMDAwMDAwMDUyIDY1NTM1IGYNCjAwMDAwMDAwNTMgNjU1MzUgZg0KMDAwMDAwMDA1NCA2NTUzNSBmDQowMDAwMDAwMDAwIDY1NTM1IGYNCjAwMDAwMTg4MjAgMDAwMDAgbg0KMDAwMDAxOTE1MSAwMDAwMCBuDQowMDAwMDMxNjIwIDAwMDAwIG4NCjAwMDAwMzE3NDQgMDAwMDAgbg0KMDAwMDAzMTk1OSAwMDAwMCBuDQowMDAwMDM1MDk4IDAwMDAwIG4NCjAwMDAwMzUxNDMgMDAwMDAgbg0KdHJhaWxlcg0KPDwvU2l6ZSA2Mi9Sb290IDEgMCBSL0luZm8gMTUgMCBSL0lEWzxENEY3MTJBNTE2NzYxNTRGQjA4QjFEQ0RFQTVCMjc5ND48RDRGNzEyQTUxNjc2MTU0RkIwOEIxRENERUE1QjI3OTQ+XSA+Pg0Kc3RhcnR4cmVmDQozNTUxMA0KJSVFT0YNCnhyZWYNCjAgMA0KdHJhaWxlcg0KPDwvU2l6ZSA2Mi9Sb290IDEgMCBSL0luZm8gMTUgMCBSL0lEWzxENEY3MTJBNTE2NzYxNTRGQjA4QjFEQ0RFQTVCMjc5ND48RDRGNzEyQTUxNjc2MTU0RkIwOEIxRENERUE1QjI3OTQ+XSAvUHJldiAzNTUxMC9YUmVmU3RtIDM1MTQzPj4NCnN0YXJ0eHJlZg0KMzY5MDcNCiUlRU9G";
        //TODO 文件路径
        filePath = "D:\\hhh.pdf";
        //TODO 解析base64编码内容,生成.pdf文件
        try {
            //base64编码内容转换为字节数组
            byte[] bytes = Base64.decode(base64Content);

            // 创建一个将bytes作为其缓冲区的ByteArrayInputStream对象
            ByteArrayInputStream byteInputStream = new ByteArrayInputStream(bytes);

            // 创建从底层输入流中读取数据的缓冲输入流对象
            bis = new BufferedInputStream(byteInputStream);
            //TODO 指定输出.pdf文件,后续会删掉
            File file = new File(filePath);
            //获取文件目录,判断是否存在
            File path = file.getParentFile();
            if (!path.exists()) {
                //TODO 如果文件目录不存在,会自动创建
                path.mkdirs();
            }
            //创建指定文件的输出流
            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 {
            try {
                if (bis != null) {
                    bis.close();
                }
                if (fos != null) {
                    fos.close();
                }
                if (bos != null) {
                    bos.close();
                }
                //TODO 将.pdf文件放到输出流中
                try {
                    FileInputStream input = new FileInputStream(file);
                    byte[] data = new byte[input.available()];
                    input.read(data);
                    response.getOutputStream().write(data);
                    input.close();
                    if (file.isFile() && file.exists()) {
                        //删除本地文件
                        file.delete();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

3)前端 HTML 文件,利用 iframe ,指定 src 的路径

  <div id="centerM" region="center" showHeader="false" showCollapseButton="false" bodyStyle="padding:0">
    <!--startprint0-->
    <iframe src="" id="pdfPrint" style="width: 100%;height: 100%"></iframe>
    <!--endprint0-->
  </div>

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 文件的预览效果还是挺好的,唯一的遗憾就是打印的效果图不清晰,据说是因为游览器的原因。

注:有些注释可能不够权威,大家发现错误后希望提醒我!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值