[英]How do I download an image in PDF format from dataURL using html2pdf?
I am creating a checklist containing both text and images.我正在创建一个包含文本和图像的清单。 Using html2pdf, the PDF downloaded can only show the text.
使用html2pdf,下载的PDF只能显示文字。 I have converted the image to base64 but how do I insert it into the PDF file alongside the text?
我已将图像转换为 base64 但如何将其与文本一起插入 PDF 文件中?
Note: The image is obtained from Firebase storage.注:图片来源于Firebase存储。
HTML: HTML:
<button type="button" class="btn btn-success btn-lg" onclick="GenPDF()">Download PDF</button>
<form>
<table>
<tr style= "background-color: #dddddd">
<td>Remarks:</td>
<td>
<%= NFBSectionOneRemarks%>
</td>
</tr>
<tr style= "background-color: #dddddd">
Image:
</tr>
<tr style= "background-color: white">
<td>
<canvas width="600" height="400" id="image1"></canvas>
</td>
</tr>
<table>
</form>
JavaScript: JavaScript:
var dataURL;
img.onload = function(){
canvas.height = canvas.width * (img.height / img.width);
var oc = document.createElement('canvas'),
octx = oc.getContext('2d');
oc.width = img.width * 0.5;
oc.height = img.height * 0.5;
octx.drawImage(img, 0, 0, oc.width, oc.height);
octx.drawImage(oc, 0, 0, oc.width * 0.5, oc.height * 0.5);
ctx.drawImage(oc, 0, 0, oc.width * 0.5, oc.height * 0.5,
0, 0, canvas.width, canvas.height);
};
img.src = imageurl;
var canvas = document.getElementById('image1');
dataURL = canvas.toDataURL();
console.log(dataURL);
});
});
}).catch((error) => {
console.log(error)
});
function GenPDF(){
event.preventDefault();
var element = document.getElementById ('form');
var opt = {
margin: 1,
filename: 'file.pdf',
image: { type: 'png', quality: 0.98 },
html2canvas: { scale: 2 },
jsPDF: { unit: 'in', format: 'letter', orientation: 'portrait' }
};
// New Promise-based usage:
html2pdf().set(opt).from(element).save();
}
We can use the below approach to add an image in pdf while generating each page.我们可以使用下面的方法在生成每个页面时在 pdf 中添加图像。
let header = null;
var HeaderImgUrl = 'sample.jpg';
getDataUri(HeaderImgUrl, function (dataUri) {
header = dataUri;
console.log("logo=" + header);
});
function getDataUri(url, cb) {
var image = new Image();
image.setAttribute('crossOrigin', 'anonymous'); //getting images from external domain
image.onload = function () {
var canvas = document.createElement('canvas');
canvas.width = this.naturalWidth;
canvas.height = this.naturalHeight;
//next three lines for white background in case png has a transparent background
var ctx = canvas.getContext('2d');
ctx.fillStyle = '#fff'; /// set white fill style
ctx.fillRect(0, 0, canvas.width, canvas.height);
canvas.getContext('2d').drawImage(this, 0, 0);
cb(canvas.toDataURL('image/jpeg'));
};
image.src = url;
}
var opt = {
margin: [1.3, .3, 1.7, .3], //top, left, buttom, right
filename: 'test.pdf',
image: { type: 'jpeg', quality: 1 },
html2canvas: { scale: 4, allowTaint: false, useCORS: true },
jsPDF: { unit: 'in', format: 'letter', orientation: 'landscape' },
pagebreak: { mode: 'avoid-all', after: '.pageBreak' }
};
html2pdf().from(element).set(opt).toPdf().get('pdf').then(function (pdf) {
var number_of_pages = pdf.internal.getNumberOfPages()
var pdf_pages = pdf.internal.pages
for (var i = 1; i < pdf_pages.length; i++) {
pdf.addImage(header, 'JPEG', 0, 0, 11, 1);//add image at desired position(11 and 1 are values in inches for an A4 page)
}
}).save();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.