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

React项目中使用jsPDF导出PDF时如何将HTML表格适配A4页面?

问题:jsPDF导出表格超出A4页面的适配方案

我在HTML中创建了表格,使用jsPDF导出为PDF时,表格超出了A4页面尺寸。以下是我的React实现代码、HTML页面视图和导出后的PDF视图,求解决办法让表格适配A4页面。

我的React代码

export default function OfferPDF({offer, paramsId}) {
    
    const generatePDF = () => {
        const pdfSize = 'a4';
        const doc = new jsPDF('p', 'pt', pdfSize);
        doc.setFont('Ubuntu', 'normal');
        doc.html(document.getElementById('pdf-content'), {
            callback: function (pdf) {
                pdf.save(`${offer.offers_year}/${offer.offers_no}.pdf`);
            }
        });
    }
    

    return (
        <div id="pdf-content">

            <table className="table table-bordered">
                <tbody>
                <tr>
                    <td>Müşteri</td>
                    <td>{offer.trade_name}</td>
                    <td>Bilgi</td>
                    <td>{offer.information}</td>
                </tr>
                ...
                </tbody>
            </table>
            <button onClick={generatePDF}>Pdf</button>
        </div>
    );
}

HTML页面视图

HTML页面视图

导出后的PDF视图

导出后的PDF视图


解决方案

方案1:配置jsPDF的html参数设置适配宽度

在doc.html的配置中添加width和windowWidth参数,直接指定PDF内的内容宽度为A4页面的可用宽度(A4纵向pt单位总宽度为595.28,减去左右边距后设为515pt左右):

const generatePDF = () => {
    const pdfSize = 'a4';
    const doc = new jsPDF('p', 'pt', pdfSize);
    doc.setFont('Ubuntu', 'normal');
    doc.html(document.getElementById('pdf-content'), {
        callback: function (pdf) {
            pdf.save(`${offer.offers_year}/${offer.offers_no}.pdf`);
        },
        width: 515, // 适配A4页面的可用宽度
        windowWidth: document.getElementById('pdf-content').offsetWidth // 匹配原内容宽度辅助缩放
    });
}

方案2:添加PDF专属CSS样式强制适配

给表格添加专属样式,让表格自动换行、缩小字体并固定布局:

/* 可放在组件style标签或全局CSS中 */
#pdf-content .table {
    width: 100% !important;
    table-layout: fixed; /* 固定表格布局,避免列宽溢出 */
}
#pdf-content .table td {
    word-wrap: break-word;
    overflow-wrap: break-word; /* 长文本自动换行 */
    font-size: 10pt; /* 适当缩小字体减少宽度占用 */
    padding: 4pt; /* 调整内边距节省空间 */
}

方案3:计算缩放比例适配页面

通过获取页面宽度和内容宽度,计算出缩放比例,让内容整体缩放到A4页面内:

const generatePDF = () => {
    const pdfSize = 'a4';
    const doc = new jsPDF('p', 'pt', pdfSize);
    const pageWidth = doc.internal.pageSize.getWidth();
    const contentElement = document.getElementById('pdf-content');
    const contentWidth = contentElement.offsetWidth;
    const scale = pageWidth / contentWidth; // 计算适配页面的缩放比例

    doc.setFont('Ubuntu', 'normal');
    doc.html(contentElement, {
        callback: function (pdf) {
            pdf.save(`${offer.offers_year}/${offer.offers_no}.pdf`);
        },
        autoPaging: 'text', // 开启自动分页,避免内容被截断
        scale: scale // 应用缩放比例
    });
}

内容的提问来源于stack exchange,提问作者Ubeydullah Yılmaz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 22:57:21