You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在jsPDF autotable中水平居中固定宽度的表格?

解决jsPDF autotable固定宽度表格水平居中的问题

我完全懂你的困扰——想让固定宽度的表格在A4 PDF页面里水平居中,却找不到精准的方法,网上大多是教你把表格撑满全屏的,调margin又总觉得没那么准。别担心,这里有两个简单又精确的方案:

方法1:通过计算精准边距实现居中

jsPDF默认的A4纵向页面宽度是210mm,我们可以根据你的表格宽度算出左右边距,让表格刚好居中:

  • 表格宽度设为100mm,那么左右边距 = (页面宽度 - 表格宽度) / 2 = (210 - 100)/2 = 55mm
  • 把这个值直接设到autotable的margin选项里的leftright即可

修改后的代码如下:

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

火山引擎 最新活动