我有Page,它有6个div,同名类“exportpdf”,我使用 jspdf 和 html2canvas
将这些div转换为pdfvar elementTobePrinted = angular.element(attrs.selector),
iframeBody = elementTobePrinted.contents().find('div.exportpdf');
在html2canvas .....中
html2canvas(elementTobePrinted, {
onrendered: function (canvas) {
var doc = new jsPDF();
for(var i=1;i<elementTobePrinted.length;i++){
doc.addImage(canvas.toDataURL("image/jpeg"), 'jpeg', 15, 40, 180, 160);
doc.addImage(canvas.toDataURL("image/jpeg"),'JPEG', 0, 0, 215, 40)
doc.addPage();
}
doc.save(attrs.fileName);
}
我将页面转换为canvas.its为整个pdf创建相同的div内容。我需要每个div内容到不同页面的相同pdf。
任何人都可以帮助我吗?
问题在于html2canvas:
doc.addImage(canvas.toDataURL("image/jpeg"), 'jpeg', 15, 40,180, 160);
这里我需要将elementTobePrinted
列表传递给addImage。
答案 0 :(得分:2)
我认为这里的问题是elementTobePrinted
不是你想象的那样。
运行代码时:
var elementTobePrinted = angular.element(attrs.selector)
这将返回一个与条件匹配的每个元素的列表,所以你说你有6个这样的元素(“它有6个div”)。
您是否尝试过更换:
html2canvas(elementTobePrinted, {
onrendered: function (canvas) {
var doc = new jsPDF();
for(var i=1;i<elementTobePrinted.length;i++) {
doc.addImage(canvas.toDataURL("image/jpeg"), 'jpeg', 15, 40, 180, 160);
doc.addImage(canvas.toDataURL("image/jpeg"),'JPEG', 0, 0, 215, 40)
doc.addPage();
}
doc.save(attrs.fileName);
}
使用...
for(var i=0; i<elementTobePrinted.length; i++){
html2canvas(elementTobePrinted[i], {
onrendered: function (canvas) {
var doc = new jsPDF();
doc.addImage(canvas.toDataURL("image/jpeg"), 'jpeg', 15, 40, 180, 160);
doc.addImage(canvas.toDataURL("image/jpeg"),'JPEG', 0, 0, 215, 40)
doc.addPage();
doc.save(attrs.fileName);
}
}
我建议这样做的原因是html2Canvas想要一个 SINGLE 元素作为它的第一个参数,你上面的例子传递了一个 list 元素(我想,假设{{1找到你要打印的所有6个div。)
答案 1 :(得分:0)
在角度2(现在为6)框架上。 您可以使用以下逻辑,
generateAllPdf()
函数,6 id's
,id
并调用html2canvas
函数,html2canvas
在后台运行以处理图像,我正在使用
await
关于功能,html2canvas
完成其处理后,我将保存
文档,await
,我最终会下载一个空的
页面。下面是我的代码逻辑,
// As All Functions in js are asynchronus, to use await i am using async here
async generateAllPdf() {
const doc = new jsPDF('p', 'mm', 'a4');
const options = {
pagesplit: true
};
const ids = document.querySelectorAll('[id]');
const length = ids.length;
for (let i = 0; i < length; i++) {
const chart = document.getElementById(ids[i].id);
// excute this function then exit loop
await html2canvas(chart, { scale: 1 }).then(function (canvas) {
doc.addImage(canvas.toDataURL('image/png'), 'JPEG', 10, 50, 200, 150);
if (i < (length - 1)) {
doc.addPage();
}
});
}
// download the pdf with all charts
doc.save('All_charts_' + Date.now() + '.pdf');
}