【问题标题】:The input is not a valid Base-64 string as it contains a non-base 64 character using jsPDF-autotable, jspdf and smtjs输入不是有效的 Base-64 字符串,因为它包含使用 jsPDF-autotable、jspdf 和 smtjs 的非 base 64 字符
【发布时间】:2020-11-22 22:59:14
【问题描述】:

我们正在开发一个项目(同时为 iOS 和 Android 提供服务),其中 AngularJSIonic 1.x 仍然需要重新编码为更新的代码由于此处不值得提及的原因,因此无法使用版本。

我们现在必须使用 jsPDF-autotablejsPDF 将 ID 为 tableText 的表格的动态内容保存到 PDF 文件中,该文件可以跨越超过一页。

在相关的 .html 文件中存在如下行:

<ion-nav-buttons side="secondary">
    <a ng-click="getPDF()" class="button button-icon icon ion-ios-cloud-upload"></a>  
</ion-nav-buttons>

这样会触发以下 JavaScript 代码,以便使用 smtpjs 将生成的 PDF 文件作为附件附加:

$scope.getPDF = function ()
{
  var fileName = „test.pdf“;
  var emailSubject = „Title text“;
  var emailBody = „Some text“;
  var emailReceiver = „receiver@hotmail.com";
  var emailSender = „info@my.website.com“;
  var hostName =  „smtp.my.website.com“;
  var doc = new jsPDF(
  {
    orientation: 'l', 
    unit: 'mm', 
    format: [400, 210]
  });
  doc.autoTable(
    {
      html: '#tableText,
      useCss: true
    });

    var file = doc.output();
    Email.send(
      {
        Host: hostName,
        Username: emailSender,
        Password: „somePassword“,
        To: emailReceiver,
        Attachments : 
        [{
          name : fileName,
          data : file
        }], 
        From: emailSender,
        Subject: emailSubject,
        Body: emailBody
      }).then(
      message => alert(message)
    );
    //doc.save(fileName);
  }
}

不幸的是,这不起作用,因为将使用 alert(message) 抛出以下行:

输入不是有效的 Base-64 字符串,因为它包含非 base 64 字符、两个以上的填充字符或非空格 填充字符中的字符

请注意:

  • 发送不带附件的电子邮件时(注释掉该部分 带有“附件:”)已发送电子邮件!
  • 我们尝试避免先将 PDF 文件保存为 PDF 的存储 Android 与 iOS 的文件不同。

附上你会发现-garbage(!)-file的内容供你参考。

需要更改/更改哪些代码以及如何使其工作以将“真实”PDF 文件作为附件发送?

如果上面的行没有意义,我们会很高兴看到更好的代码!

【问题讨论】:

    标签: javascript angularjs pdf jspdf jspdf-autotable


    【解决方案1】:

    解决方案非常简单(我想知道为什么没有比我更好的开发人员找到它):

        var blob = doc.output();
        var dataUri = "data:" + contentType + ";base64," + btoa(blob);
    
        Email.send(
        {
            Host: hostName,
            Username: emailSender,
            Password: "somePassword",
            To: emailReceiver,
            Attachments : 
            [{
            name : fileName,
            data : dataUri
            }], 
            From: emailSender,
            Subject: emailSubject,
            Body: emailBody
        }).then(message => alert(message)
        );
        //doc.save(fileName);
        }
    

    【讨论】:

      猜你喜欢
      • 2018-02-09
      • 2012-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-16
      • 1970-01-01
      相关资源
      最近更新 更多