首页 > 解决方案 > 输入不是有效的 Base-64 字符串,因为它包含使用 jsPDF-autotable、jspdf 和 smtjs 的非 base 64 字符

问题描述

我们正在开发一个项目(同时为 iOS 和 Android 提供服务),其中AngularJSIonic 1.x仍然需要编码,因为由于这里不值得一提的原因,重新编码到较新版本是不可能的。

tableText我们现在必须使用jsPDF-autotablejsPDF将具有 id 的表格的动态内容保存到一个 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 字符、两个以上的填充字符或填充字符中的非空白字符

请注意:

附上你会发现 - 垃圾(!)的内容 -file供你参考。pdf生成问题

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

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

标签: javascriptangularjspdfjspdfjspdf-autotable

解决方案


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

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

推荐阅读