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

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

作者: 鄙人_阿K | 来源:发表于2020-12-27 16:23 被阅读0次

    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;
        }
    

    相关文章

      网友评论

          本文标题:关于 pdfjs实现页面生成pdf 加密(base64)传输到后

          本文链接:https://www.haomeiwen.com/subject/apvonktx.html