jsPDF生成PDF文件,文件不全问题,后台进行文件下载,前台不下载

我是前端使用jsPDF进行生成PDF文件,使用Base64进行加密,解密;后台进行文件流下载

1.前端使用jsPDF和html2canvas进行生成PDF文件(当然有这同样的毛病,生成时候有滚动条的情况下,内容会丢失,我这里使用的是网上很多人的一种思路,把要进行生成的标签,进行复制一份,对这个复制了的对象进行操作,就不会丢失内容了。并且,这里没有让用户在前台页面进行下载,这里是直接进行传递到后台进行后台自动下载。)

@这里主要用到了两个js,一个是html2canvas.js;一个是jsPDF.js;两个文件必须要引用

(文件可以网上自己下载,我这里也是网上随便找的,如果没找到,可以联系我,我发给你)

主要就是使用到jsPDF.output()//这个方法,进行传递后台解密,文件流下载(这里的我操作的是一个div,给div起一个id就可以了,这里还要说一下,这个背景必须要换,它默认黑色,自己试试就知道了)

function onclick()
{
var targetDom = $("#JSDDGSDAFAS_id");
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) {
         //返回图片URL,参数:图片格式和清晰度(0-1)
          var pageData = canvas.toDataURL('image/jpeg', 1.0);
         //方向默认竖直,尺寸ponits,格式a4【595.28,841.89]
           var pdf = new jsPDF('', 'pt', 'a4');
         //需要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); //然后把这个字符串送到后台解密
         //移除添加的元素
         $('.super').remove();
           var url=""//自己的地址
         $.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');
          }
         });
       }
    });
}

2.后台这里使用的.net;不过大体思路都是一样的,用其他语言也是可以的。方法对就行

 

   //根据前台传递过来的文件流,生成文件,这里我写的是绝对地址,文件名fileNanme自己起
    FileStream writeStream = new FileStream(@"E:\bmcp\bmcpWeb\BaseJSD\JSD_PDF\" + fileName, FileMode.Create);// 文件不保存创建一个文件
    string BASEFile = Request["file"];//这里获得传递过来的文件流,这个是我本地得到前台传递过来的参数方法,自己要根据实际情况进行判断
    byte[] b = Convert.FromBase64String(BASEFile);//BASEFile为前台页面传递过来的数据
    // Base64解码
     for (int i = 0; i < b.Length; ++i)
     {
       // 调整异常数据
        if (b[i] < 0)
          {
            b[i] += 32;
          }
          writeStream.WriteByte(b[i]);// 写入本地文件
      }
      //关闭流
      writeStream.Close();

 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值