问题
I have been using JSPDF to generate pdf document based on some html. Earlier using jspdf fromHTML Api, we could give margins like this
var margins2 = {
top: 415,
bottom: 10,
left: 55,
width: 300
};
doc.fromHTML(reactListContent, margins2.left, margins2.top, {
'width': margins2.width,
'elementHandlers': specialElementHandlers
}, margins2);
But, in the new .html API , how can i provide margins, width and height. The new API is like
var pdf = new jsPDF('p', 'pt', 'letter');
pdf.html(document.getElementById('html'), {
callback: function (pdf) {
console.log("how to get margins");
}
});
回答1:
If you look at the source code of jspdf.debug.js, html.js has the options for x and y offsets.
opt: {
filename: 'file.pdf',
margin: [0, 0, 0, 0],
enableLinks: true,
x: 0,
y: 0,
html2canvas: {},
jsPDF: {}
}
So you can set the x and y coordinates like this:
pdf.html(document.getElementById('html'), {
x: 36,
y: 36,
callback: function () {
// pdf.save('test.pdf');
window.open(pdf.output('bloburl')); // to debug
}
});
Unfortunately, I can't do the same by modifying the margin: [0, 0, 0, 0]
. Looks like they are still working on this issue. So the short answer is NOT YET.
A work-around is to calculate the scale of html2canvas by margin:
let pdf = new jsPDF('p', 'pt', 'a4');
let left = 36; // narrow margin - 12.7 mm
let srcwidth = document.getElementById('html').style.width;
let scale = (595.28 - left * 2) / Math.ceil(srcwidth.replace('px','')); // a4 pageSize 595.28
pdf.html(document.getElementById('html'), {
html2canvas: {
scale: scale // default is window.devicePixelRatio,
},
x: left,
y: 36,
callback: function () {
window.open(pdf.output('bloburl'));
}
});
来源:https://stackoverflow.com/questions/56162138/how-to-give-width-height-x-and-y-coordinates-in-generating-pdf-from-html-using