javascript - 输入不是有效的 Base-64 字符串,因为它包含使用 jsPDF-autotable、jspdf 和 smtjs 的非 base 64 字符
问题描述
我们正在开发一个项目(同时为 iOS 和 Android 提供服务),其中AngularJS和Ionic 1.x仍然需要编码,因为由于这里不值得一提的原因,重新编码到较新版本是不可能的。
tableText
我们现在必须使用jsPDF-autotable和jsPDF将具有 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 字符、两个以上的填充字符或填充字符中的非空白字符
请注意:
- 发送不带附件的电子邮件时(用“附件:”注释掉该部分),将发送一封电子邮件!
- 我们尝试避免首先保存 PDF 文件,因为 Android 和 iOS 的 PDF 文件存储不同。
需要更改/更改哪些代码以及如何使其工作以将“真实”PDF文件作为附件发送?
如果上面的行没有意义,我们会很高兴看到更好的代码!
解决方案
解决方案非常简单(我想知道为什么没有比我更好的开发人员找到它):
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);
}
推荐阅读
- html - CSS网格位置children的children
- css - 如何删除 ngb-pagination 主动焦点/模糊
- asp.net - UTF-8 - Oracle,实体框架核心
- python - 使用 coco 数据格式 json 文件进行交叉验证
- java - 在触摸坐标上创建视图,但它给出了错误的 x 和 y
- django-rest-framework - Django Rest 框架 GeoDjango 序列化器
- machine-learning - 在使用训练测试拆分以找到最佳超参数后,我是否应该使用整个数据集重新训练模型?
- ionic-framework - HTTP 获取请求(Wordpress 网站 Rest API 调用)在 iOS 应用程序(Ionic4 和 Angular)中不起作用
- ios - 仅在当前字体大小不适合时更改标签字体大小
- javascript - 如何使用不区分大小写的下拉选择