如何在jsPDF autotable中水平居中固定宽度的表格?
解决jsPDF autotable固定宽度表格水平居中的问题
我完全懂你的困扰——想让固定宽度的表格在A4 PDF页面里水平居中,却找不到精准的方法,网上大多是教你把表格撑满全屏的,调margin又总觉得没那么准。别担心,这里有两个简单又精确的方案:
方法1:通过计算精准边距实现居中
jsPDF默认的A4纵向页面宽度是210mm,我们可以根据你的表格宽度算出左右边距,让表格刚好居中:
- 表格宽度设为100mm,那么左右边距 = (页面宽度 - 表格宽度) / 2 = (210 - 100)/2 = 55mm
- 把这个值直接设到autotable的
margin选项里的left和right即可
修改后的代码如下:
document.querySelector(".report-btn").addEventListener("click", () => { const pdfDoc = new jsPDF(); const list = createListforPdf(); // function to generate list const pageWidth = pdfDoc.internal.pageSize.getWidth(); // 获取页面宽度(默认A4纵向是210) const tableWidth = 100; const horizontalMargin = (pageWidth - tableWidth) / 2; // 计算左右边距 pdfDoc.autoTable({ theme: "grid", tableWidth: tableWidth, margin: { left: horizontalMargin, right: horizontalMargin }, // 设置精准边距 styles: { halign: "center" }, columnStyles: { 0: { cellWidth: 85, halign: "left" }, 1: { cellWidth: 15 } }, head: [["MRZ Check number", "is OK?"]], body: [[list[0], "YES"], [list[1], "NO"]] }); pdfDoc.save(); });
方法2:直接设置表格起始X坐标(更直观)
autotable支持startX属性,直接指定表格在页面上的起始横向位置,同样用上面的计算逻辑:
- startX = (页面宽度 - 表格宽度) / 2 = 55mm
这种方法不需要调整全局margin,更适合只针对单个表格居中的场景:
document.querySelector(".report-btn").addEventListener("click", () => { const pdfDoc = new jsPDF(); const list = createListforPdf(); // function to generate list const pageWidth = pdfDoc.internal.pageSize.getWidth(); const tableWidth = 100; const startX = (pageWidth - tableWidth) / 2; // 计算表格起始X坐标 pdfDoc.autoTable({ theme: "grid", tableWidth: tableWidth, startX: startX, // 直接设置起始位置 styles: { halign: "center" }, columnStyles: { 0: { cellWidth: 85, halign: "left" }, 1: { cellWidth: 15 } }, head: [["MRZ Check number", "is OK?"]], body: [[list[0], "YES"], [list[1], "NO"]] }); pdfDoc.save(); });
这两种方法都能精准让你的固定宽度表格水平居中,你可以根据自己的需求选一个试试~
内容的提问来源于stack exchange,提问作者damycode




