关于 pdfjs实现页面生成pdf 加密(base64)传输到后

2020-12-27  本文已影响0人  鄙人_阿K

1、引入js

image.png

2、代码

1、包括需要生成的


image.png

2、js部分

 // 测试 pdf 加密后传输
    function pdfTobase64(){
        // 此处必须 copy dom 这是 原生pdfjs的一个bug
        let targetDom = $("#bodyto");
        var copyDom = targetDom.clone();
        copyDom.addClass('super');
        copyDom.width(targetDom.width() + "px");
        copyDom.height(targetDom.height() + "px");
        $('body').append(copyDom);
        copyDom.css({ "background": "#FFFFFF" });

        html2canvas(copyDom, {
            allowTaint: true,
            taintTest: false,
            onrendered: function (canvas) {

                var contentWidth = canvas.width;
                var contentHeight = canvas.height;

                //一页pdf显示html页面生成的canvas高度;
                var pageHeight = contentWidth / 592.28 * 841.89;
                //未生成pdf的html页面高度
                var leftHeight = contentHeight;
                //页面偏移
                var position = 0;
                //a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高
                var imgWidth = 595.28;
                var imgHeight = 592.28/contentWidth * contentHeight;

                var pageData = canvas.toDataURL('image/jpeg', 1.0);

                var pdf = new jsPDF('', 'pt', 'a4');

                //有两个高度需要区分,一个是html页面的实际高度,和生成pdf的页面高度(841.89)
                //当内容未超过pdf一页显示的范围,无需分页
                if (leftHeight < pageHeight) {
                    pdf.addImage(pageData, 'JPEG', 0, 0, imgWidth, imgHeight );
                } else {
                    while(leftHeight > 0) {
                        pdf.addImage(pageData, 'JPEG', 0, position, imgWidth, imgHeight)
                        leftHeight -= pageHeight;
                        position -= 841.89;
                        //避免添加空白页
                        if(leftHeight > 0) {
                            pdf.addPage();
                        }
                    }
                }
               // pdf.save($('#enName').val()+"的出入境.pdf");

                //需要dataUrl格式
                //pdf.addImage(pageData, 'JPEG', 0, 0, 595.28, 592.28 / canvas.width * canvas.height);
               // pdf.save('pdf.pdf');//调用这个就是直接在前台进行下载
                //去掉前面的字符串后,就是文件的加密字符串
                var datauri = pdf.output('dataurlstring');
                var base64 = datauri.substring(28); //然后把这个字符串送到后台解密
                //移除添加的元素
                copyDom.remove();
               // $('.super').remove();
                var url="${ctx}/entryae/entryae!sendPDF.action"//自己的地址
                $.post(url, { file: base64 }, function (returndata) {
                    try {
                        var ss = JSON.parse(returndata);
                        //如果想要关闭当前页,网上有很多,这里就说一下谷歌浏览器,
                        //谷歌浏览器比较特殊,只能把window.location.href = 'about:blank '才可以关闭
                        //window.open("about:blank", "_self").close();//关闭当前页
                        window.open(JSON.parse(ss[0]).data.url);
                        $('#GZSP_XS_Sure_Mask').hide();
                    } catch (e) {
                        $.messager.alert('提示', returndata, 'info');
                    }
                });
            }
        });
    }

3、后端代码

    /**
     * 接受pdf 处理
     */
    public String sendPDF() throws Exception {

        // 前端发送过来的 base64
        String file = request.getParameter ("file");
        String fileName = "aaaaaaaa";// 前端传送
        String realPath = request.getSession ( ).getServletContext ( ).getRealPath ("/");
        String path = realPath + "upload\\pdf2\\";// 统一文件夹地址
        String filePath = path + fileName + ".pdf";// 组合的最终路径
        // 如果没有则创建
        File headPath2 = new File (filePath);//获取文件夹路径
        createFileOrDir (headPath2);

        stringSaveAsFile (file, filePath);
        // 测试地址:xxxxxxxxxx、adp/WzhWebService.ws?wsdl
        String serviceUrl = "http://xxxx.xxxx.xxx/adp/WzhWebService.ws";
        Service service = new ObjectServiceFactory ( ).create (WzhWebService.class);

        XFireProxyFactory factory = new XFireProxyFactory ( );
        WzhWebService wzhWebService = (WzhWebService) factory.create (service, serviceUrl);


        Map map = new HashMap ( );
        map.put ("xxxxxx", "xxxxxxx");
        map.put ("xxxxxxx", "xxxxxxx");
        map.put ("pdfName", fileName);
        map.put ("xxxxxxxx", "xxxxxxxx");// (印章)
        map.put ("xxxxxxxx", "xxxxxxxx");
        // 印章位置
        // map.put("llx", "80") ;
        // map.put("lly", "100") ;
        map.put ("urx", "230");
        map.put ("ury", "250");
        map.put ("pdfData", file);

        String param = JSONObject.fromObject (map).toString ( );

        String rstr = wzhWebService.WzhQzService (param);// 发送报文后返回的数据

        JSONObject jsonObject = JSONObject.fromObject (rstr);
        String rtnData = jsonObject.getString ("rtnData");
        JSONObject data = JSONObject.fromObject (rtnData);
        String fileUrl = data.getString ("fileUrl");

        // String toPath = "C://abc//"+fileName+"_signe.pdf" ;
        stringSaveAsFile (fileUrl, filePath);

        return null;
    }
上一篇下一篇

猜你喜欢

热点阅读