You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用jsPDF将HTML模板文件转为适配A4尺寸的PDF?

解决jsPDF转换HTML为A4 PDF时内容显示不全的问题

要让生成的PDF完美适配A4尺寸,需要从jsPDF实例配置、HTML转换参数和内容CSS适配三个方面调整,以下是具体修改方案:

1. 明确指定A4尺寸初始化jsPDF

创建jsPDF实例时,显式指定格式为A4,同时用mm作为单位更贴合纸张尺寸逻辑:

// 纵向A4,单位mm
var doc = new jsPDF('portrait', 'mm', 'a4');

2. 配置HTML转换的适配参数

在doc.html()方法中添加宽度、边距等参数,确保内容适配A4的可打印区域:

  • width:设置为A4宽度减去左右边距后的数值
  • margin:设置合理页边距,避免内容贴边
  • autoPaging:开启自动分页,处理长内容溢出问题

3. 给发票HTML添加打印适配CSS

在你的发票HTML模板中,添加打印专属CSS规则,限制内容宽度:

@media print {
  .invoice-container {
    width: 190mm; /* A4总宽度210mm,左右各留10mm边距 */
    margin: 0 auto;
    overflow: hidden;
  }
  /* 隐藏不需要打印的按钮、链接等元素 */
  .no-print {
    display: none !important;
  }
}

修改后的完整代码

$('#convertToPdf').click(function(){
    var invoiceUrl = $('#invoiceLink').attr('href');

    $.ajax({
        url: invoiceUrl,
        type: 'GET',
        dataType: 'html',
        success: function(htmlContent) {
            // 初始化纵向A4的PDF文档,单位mm
            var doc = new jsPDF('portrait', 'mm', 'a4');
            // 获取A4页面的实际宽度
            var pageWidth = doc.internal.pageSize.getWidth();
            
            doc.html(htmlContent, {
                // 内容宽度=页面宽度-左右边距(各10mm)
                width: pageWidth - 20,
                // 设置上下左右边距均为10mm
                margin: [10, 10, 10, 10],
                // 自动根据文本内容分页
                autoPaging: 'text',
                callback: function (doc) {
                    doc.save('invoice.pdf');
                }
            });
        },
        error: function(xhr, status, error) {
            console.error('Error fetching HTML content:', error);
        }
    });
});

额外注意事项

  • 发票内的表格、图片等元素尽量用相对宽度(比如width: 100%),避免固定宽度超出页面
  • 可以先在浏览器打印预览中调试HTML内容的适配效果,再用jsPDF转换

内容的提问来源于stack exchange,提问作者Maciej

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 07:11:02