如何在使用html2canvas和jspdf时,在画布分成多个页面时添加顶部边距?

5

我正在使用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');
            }
        });

你找到解决方案了吗?我也遇到了完全相同的问题。 - Razi Syed
2个回答

1
我通过调整 mediaBox 属性来解决了这个问题。
jspdf 中的 putPages 方法会输出一个页面,您可以操纵媒体框和页面宽度/高度以调整页面边距。我在高度上硬编码了额外的 52 (0.75 英寸),在 mediaBox 上减去了 36 (0.5 英寸),以给每个页面留出边距。
这是代码更改:
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; 

这可以转化为一个合适的功能而不是硬编码,但现在可以使用。

0

我花了多个小时在jsPDF库中寻找解决方案,但目前似乎没有可用的解决方案。一旦您指定了pagesplit,它似乎会忽略其他jsPDF选项,如margin。

所以,我自己做了这件事,手动分割页面。实际上相对简单。 :)

我为一个大表格创建了这个。如果您想要分割的不是表格,您仍然可以使用这个概念。您只需要更改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();

这是我的CSS类:

.pdf_page_1 tr:nth-child(n+28) { display: none; }

.pdf_page_2 tr:nth-child(-n+28) { display: none; }
.pdf_page_2 tr:nth-child(n+56) { display: none; }

.pdf_page_3 tr:nth-child(-n+56) { display: none; }
.pdf_page_3 tr:nth-child(n+84) { display: none; }

.pdf_page_4 tr:nth-child(-n+84) { display: none; }
.pdf_page_4 tr:nth-child(n+112) { display: none; }

#pdfPage tr:first-child { display: table-row !important; }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接