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

jsPDF中maxWidth与splitTextToSize功能失效问题求助

解决jsPDF文本自动换行问题

问题原因

你遇到的问题是splitTextToSize用法错误导致代码报错,同时旧版jsPDF对text方法的maxWidth参数支持存在局限。另外代码里还有两处日期处理的小问题需要修正。

修正后的完整代码

function generatePDF() {
    var name = "Blah";
    var paymentaddress = 'some bullshit, but like a whole lotta bulshit, man, like you know what I mean, man?';
    var date = new Date();
    var totalPrice = 100;
    let day = date.getDate();
    let month = date.getMonth() + 1; // 月份从0开始,加1才是实际月份
    let year = date.getFullYear(); // 替换废弃的getYear()方法

    var pdf = new jsPDF();
    
    pdf.setFont('courier');
    pdf.setFontSize(22);
    pdf.text("Test Order Receipt", 38, 23);
    pdf.setFontSize(12);
    pdf.text("Name: " + name, 20, 40);

    // 处理付款地址自动换行:先拼接完整文本,再拆分
    var addressText = "Payment Address: " + paymentaddress;
    // splitTextToSize(文本内容, 最大宽度) 返回拆分后的文本数组
    var splitAddress = pdf.splitTextToSize(addressText, 170); // 宽度适配页面边距(200-15*2)
    // 渲染拆分后的文本,自动逐行显示
    pdf.text(splitAddress, 20, 50);

    pdf.text("Total: €" + totalPrice + ".00", 20, 95);
    pdf.text("Date: " + day + "/" + month + "/" + year, 20, 110);
    pdf.line(15, 30, 200, 30);
    pdf.line(15, 30, 15, 120);
    pdf.line(15, 120, 200, 120);
    pdf.line(200, 120, 200, 30);
    pdf.line(15, 100, 200, 100);
    
    pdf.save('Receipt (' + date + ').pdf');
}

关键修正点

  1. 正确使用splitTextToSize:该方法接收文本内容和最大宽度两个核心参数,返回按宽度拆分后的字符串数组,再传递给pdf.text即可自动换行渲染。
  2. 修复日期显示问题:替换废弃的getYear()为getFullYear(),同时给月份加1(getMonth()返回0-11对应实际1-12月)。
  3. 适配页面宽度:设置拆分宽度为170,匹配页面左右15的边距,避免文本超出边框。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 12:04:57