有没有一种方法可以从循环生成多个PDF并存储它们而不将文件保存到磁盘?

时间:2019-01-05 17:25:13

标签: blob javamail jspdf html2canvas bloburls

我正在尝试使用jsPDF在一个节点上的节点内的一组元素中从html生成几个单独的pdf。 (学生成绩单)。然后,我需要使用JavaMail通过电子邮件将个人成绩单发送给每位学生家长。

问题是: 我不想在生成pdf文件时将其保存到磁盘,而是想以编程方式遍历其中的报告卡元素页面(id =“'studentCard_'+ studentId”),从html生成单独的pdf,然后将每个单独的pdf即时存储或推入数组或对象(创建时)中,然后我可以将其传递给JavaMail,循环以将每个单独的pdf附加到相关的父母电子邮件中。

我可以毫无障碍地将html转换为pdf ...

我只是不确定如何将该pdf附加到电子邮件,因为唯一的选择是pdf.save(filename),而且我不想在循环中将每个单独生成的pdf实际保存到磁盘-我只想临时存储生成的文件,然后再将其附加到电子邮件中并发送出去。

我已经将pdf转换为blob和blob URL,然后可以将blob推入数组。我可以将pdf转换为blob或blob url,然后将其推送到一个数组,然后遍历该数组并将其附加到电子邮件中。 这是我的解决方案,用于将每个pdf转换为blob,然后将blob推入数组以传递到JavaMail进行循环吗?

我对此问题的任何方面一无所知。 如果我将blob附加到电子邮件上,或在主体中插入blob URL,则当父级单击文件下载文件或单击插入到主体中的链接时,它将自动转换回PDF通过自己的邮件程序或在浏览器中阅读的格式?如何正确执行此操作?

1 个答案:

答案 0 :(得分:1)

您是否曾经考虑过使用IndexedDB?我已经将JsStore(一个IndexedDB包装器)用于多个项目。很整洁。

In []: for row in chunk(range(100), 10): print(' '.join(str(data//2).rjust(3) for data in row)) Out[]: 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 32 32 33 33 34 34 35 35 36 36 37 37 38 38 39 39 40 40 41 41 42 42 43 43 44 44 45 45 46 46 47 47 48 48 49 49 是唯一的选项。您应该可以使用pdf.output(datauristring)pdf.save(filename)并将其保存到IndexedDB。根据您pdf文件的大小,您甚至可以使用localStorage,它比idb易于使用,但存储空间却少得多。