angular - 如何使用 jsPDF 呈现多个分页结果(HTML 到 PDF)
问题描述
我正在尝试打印多个 jsPDF.HTML(...) 的结果。它们中的每一个都在同一 div 内的列表的不同分页中运行。该 div 的 PDF 转换多次显示第一页,即使我可以在执行每个 jsPDF.HTML(...) 之前在 UI 中看到其中的项目发生变化。
是否有解决方案或至少解释为什么会发生这种情况?
async printReceipt() {
console.log('getting the number of pages in the pagination');
var lenArr = new Array(Math.ceil(this.receiptItems.length / 10));
var doc = new jsPDF('p', 'pt', [496, 702]);
var arrayBuffer: ArrayBuffer[] = [];
var fileURL;
console.log('creatting main doc');
for (let index = 0; index < lenArr.length; index++) {
console.log('Changing pagination to:', index + 1);
this.page = index + 1;
console.log('Converting page:', index + 1);
await new Promise<void>(async (resolve, reject) => {
doc.html(document.getElementById('receipt'), {
callback: async (res) => {
console.log('Adding page to buffer, page:', index + 1);
arrayBuffer.push(res.output('arraybuffer'));
if (lenArr.length - 1 == index) {
console.log('Printing');
await this.mergePdfs(arrayBuffer);
}
resolve();
},
});
});
}
}
日志顺序:
解决方案
我通过将 jsPDF 对象的声明移动到 Promise 中并在页面更改和 Promise 之间添加超时来解决了这个问题。
async printReceipt() {
console.log('getting the number of pages in the pagination');
var lenArr = new Array(Math.ceil(this.receiptItems.length / 10));
var arrayBuffer: ArrayBuffer[] = [];
var fileURL;
console.log('creatting main doc');
for (let index = 0; index < lenArr.length; index++) {
console.log('Changing pagination to:', index + 1);
this.page = index + 1;
await this.sleep(1000);
console.log('Converting page:', index + 1);
await new Promise<void>(async (resolve, reject) => {
***var doc = new jsPDF('p', 'pt', [496, 702]);***
doc.html(document.getElementById('receipt'), {
callback: async (res) => {
console.log('Adding page to buffer, page:', index + 1);
arrayBuffer.push(res.output('arraybuffer'));
if (lenArr.length - 1 == index) {
console.log('Printing');
await this.mergePdfs(arrayBuffer);
}
resolve();
},
});
});
}
}
sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
jsPDF对象似乎保留了 jsPDF.html(...) 的第一个结果,无论此方法是否多次执行。
推荐阅读
- javascript - 是否有可能找出使用 JQuery 选择的 CSS 样式
- javascript - Jquery 试图将单个消息拆分为 2 个 html 元素
- c - memfd_create() 给出的 fd 上的 mmap() 有时会因文件描述符错误而失败
- java - 在不压缩 (BI_RGB) 和索引调色板的情况下保存 BMP 文件的问题
- java - 一个具有泛型返回类型的方法怎么可能分配给该范围之外的变量?
- sorting - 在elasticsearch中搜索字符串数组中的确切字段,并按最新发布日期排序
- apache - apache返回状态码403,但正常服务页面
- ruby - 反转 gems 的依赖以重用代码?
- r - str_replace/str_detect 具有原始含义而不是正则表达式
- c# - 派生类覆盖 Xamarin.IOS 中的 ApplicationDidEnterForeground 调用