这在 Firefox 和 Chrome 中运行良好;但是,在 Internet Explorer 11 中,该过程需要很长时间,并导致浏览器报告没有响应。如果用户等待足够长的时间(30 秒到 2 分钟之间的任何时间),该过程就会解决。
我正在尝试使用 html2canvas 捕获 DOM 的一部分的 PNG,然后通过 jsPDF 将 PNG 转换为 PDF。本质上,我具有与页面对应的 ID 的元素。我以 PNG 格式捕获页面,然后通过将每个 PNG 作为页面添加到 PDF 中,在 PDF 转换步骤中将 PNG 扩展为整页。我这样做的代码如下所示:
// Default to GMSRD1
var fileName = "record-of-discussion-form.pdf";
var pages = ["GMSRD1_page1", "GMSRD1_page2", "GMSRD1_page3", "GMSRD1_page4"]
if (this.state.parsed.formId === "GMSC1") {
fileName = "consultee-form.pdf"
pages = ["GMSC1_page1", "GMSC1_page2", "GMSC1_page3"];
}
if (this.state.parsed.formId === "GMSA1") {
fileName = "assent-form.pdf"
pages = ["GMSA1_page1", "GMSA1_page2"];
}
if (this.state.parsed.formId === "GMSW2" ) {
fileName = "withdraw-form.pdf"
pages = ["GMSW2_page1", "GMSW2_page2", "GMSW2_page3"];
}
// Objct to build
var pdf = new jsPDF({
orientation: "p",
unit: "pt",
format: "a4",
compression: true
});
// Canvas creation promises
let promises = [];
// Capture canvas for each page
pages.forEach(page => {
let element = document.getElementById(page);
promises.push(this.getCanvasData(element));
});
Promise.all(promises).then(dataUrls => {
dataUrls.forEach((dataUrl, i) => {
pdf.addImage(dataUrl, "PNG", 45, 40, 800 * .63, 980 * .7, undefined, "FAST");
pdf.addPage();
});
let testOutput = pdf.output('arraybuffer'); // arraybuffer
var uint8Array = new Uint8Array(testOutput);
var array = Array.from(uint8Array)
// <DO something w/ data below>
有没有人见过这种行为或有任何解决方法?想知道是否有办法通过超时将进程的当前状态释放到浏览器以避免这种行为?
编辑:我在库中有一个 Unresolved 问题也解决了这个问题(见评论)
最佳答案
您是否尝试清理缓存和历史记录? chrome 有时会发生类似的情况,这似乎对我有用
关于javascript - html2canvas导致IE11挂起进入 "Not responding"状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56588535/