我正在使用HTML2Canvas和jsPDF来创建动态网页的pdf,当画布大小超过一页时,我会添加另一页并重新添加图像,将其移至下一页。一切都运作良好,但我无法弄清楚如何设置上边距,因此第二页以后所有内容都在页面的最顶部。有没有办法为所有页面设置上边距?
html2canvas($("#formpdfarea"), {
onrendered: function(canvas) {
var imgData = canvas.toDataURL(
'image/png');
var doc = new jsPDF('l', 'mm', 'letter');
doc.addImage(imgData, 'PNG', 5, 0);
//output is 96dpi, additional pages added if output is greater than 816 pixels (816p/96dpi = 8.5 inches)
if(canvas.height > 816){
for(i=1; i*816<canvas.height; i++){
doc.addPage();
//-215.89mm which is -8.5inches
doc.addImage(imgData, 'PNG',5,-215.89*i);
}
}
doc.save('formoutput.pdf');
}
});
答案 0 :(得分:1)
我通过调整mediaBox属性解决了这个问题。
jspdf中的方法putPages写出一个页面,您可以操纵媒体框和页面宽度/高度来调整页边距。我硬编码了52(0.75in)到高度和-36(0.5in)到mediabox,给每一页留一个余量。
这是代码更改:
wPt = (pageWidth = pagedim[n].width) * k;
hPt = (pageHeight = pagedim[n].height + 52) * k;
out('<</Type /Page');
out('/Parent 1 0 R');
out('/Resources 2 0 R');
out('/MediaBox [-36 0 ' + f2(wPt) + ' ' + f2(hPt) + ']');
您还必须更改页面大小,以便页脚也正确。
我用过:
canvas.height = 72 * 10.25; // instead of 11
canvas.width = 72 * 8.5;
这可以转换为适当的功能而不是硬编码,但现在可以使用。
答案 1 :(得分:0)
我花了几个小时寻找一个驻留在jsPDF库中的解决方案,但目前似乎没有可用的解决方案。一旦你指定了pagesplit,它似乎忽略了其他jsPDF选项,如margin。
所以,我自己做了,手动打破了页面。它实际上相对简单。 :)
我为一张大桌子创建了这个。如果你试图打破桌子以外的东西,你仍然可以使用这个概念。您真正需要做的就是更改CSS类以使不同的部分可见。
job_number
这是我的CSS课程:
function add_page() {
// Youre header & footer stuff goes here
pdf.addHTML($('#pdfPage'), 20, 26, options, function() {
check_page();
});
}
function check_page() {
tr_rows = tr_rows - 28;
if( tr_rows > 0 ) {
$('#pdfPage').removeClass('pdf_page_' + current_pdf_page).addClass('pdf_page_' + ++current_pdf_page);
pdf.addPage();
add_page();
} else {
pdf.save( filename + '.pdf' );
}
}
$('#pdfPage').addClass('pdf_page_1');
tr_rows = $('#pdfPage tbody tr').length;
current_pdf_page = 1;
add_page();