返回

在 JSPDF 生成的 PDF 文件中轻松添加顶部边距,解决布局难题

javascript

在 JSPDF 下载的 PDF 文件中添加顶部边距

问题背景

使用 JSPDF 库生成 PDF 文件时,内容往往从页面顶部开始,没有顶部边距。这可能会导致布局问题,需要添加顶部边距。

解决方案

步骤 1:添加顶边距变量

在 JavaScript 代码中,创建一个名为 top_left_margin 的变量,并指定所需的边距大小(以像素为单位)。

步骤 2:调整 PDF 尺寸

将 PDF 宽度和高度计算公式更新为:

PDF_Width = HTML_Width + (top_left_margin * 2)
PDF_Height = (PDF_Width * 1.2) + (top_left_margin * 2)

步骤 3:调整图像高度

将图像高度计算公式更新为:

imgHeight = canvas.height * imgWidth / canvas.width + top_left_margin

步骤 4:添加图像到 PDF

在添加图像到 PDF 的代码中,使用 top_left_margin 作为图像 y 坐标的偏移量:

doc.addImage(imgData, 'PNG', top_left_margin, position, imgWidth, imgHeight)

代码示例

const section = document.getElementById('summaryId');

var HTML_Width = section.scrollWidth;
var HTML_Height = section.scrollHeight;
var top_left_margin = 15;
var PDF_Width = HTML_Width + (top_left_margin * 2);
var PDF_Height = (PDF_Width * 1.2) + (top_left_margin * 2);
var canvas_image_width = HTML_Width;
var canvas_image_height = HTML_Height;

var totalPDFPages = Math.ceil(HTML_Height / PDF_Height) - 1;

html2canvas(section, { allowTaint: true }).then(function (canvas) {
    var imgData = canvas.toDataURL('image/png');
    var imgWidth = 210;
    var pageHeight = 299;
    var imgHeight = canvas.height * imgWidth / canvas.width + top_left_margin;
    var heightLeft = imgHeight;

    var doc = new jspdf.jsPDF();
    var position = 0;

    doc.addImage(imgData, 'PNG', top_left_margin, position, imgWidth, imgHeight);
    heightLeft -= pageHeight;

    while (heightLeft >= 0) {
        position = heightLeft - imgHeight;
        doc.addPage();
        doc.addImage(imgData, 'PNG', top_left_margin, position, imgWidth, imgHeight);
        heightLeft -= pageHeight;
    }

    doc.save("Dashboard.pdf");
});

常见问题解答

Q1:我可以在生成的 PDF 文件中添加多页吗?
A1:是的,您可以通过 doc.addPage() 方法添加任意数量的页面。

Q2:是否可以通过脚本调整边距大小?
A2:是的,您可以修改 top_left_margin 变量的值来调整边距大小。

Q3:是否有其他方法可以添加顶部边距?
A3:另一种方法是在 CSS 中为父元素添加 margin-top 属性。

Q4:是否可以在不使用库的情况下添加顶部边距?
A4:可以,您可以使用 CSS page-margin 属性直接在浏览器中添加边距。

Q5:是否可以添加其他类型的边距?
A5:是的,JSPDF 还提供了添加左右和底部边距的方法。