微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为 JSPDF 中的所有屏幕添加页眉和页脚

如何解决为 JSPDF 中的所有屏幕添加页眉和页脚

我正在尝试在下载 PDF 时在所有屏幕中添加页眉和页脚。我已经使用 jspdf-autotable 添加了带有模拟数据的表格并且能够下载它。但是标题只出现在下载的 PDF 的最后一页

我需要一些帮助才能在所有屏幕中获取带有页码的页眉和页脚。请帮忙。

沙箱中的代码https://codesandbox.io/s/upbeat-cannon-cfiry?file=/src/App.js:0-1257

代码在这里

import jsPDF from "jspdf";
import "jspdf-autotable";
import { datas } from "./data";
import { renderToString } from "react-dom/server";
import PdfDocument from "./PdfDocument";
export default function App() {
  const columns = [
    { title: "Rank",dataKey: "Rank" },{ title: "Name",dataKey: "Name" },{ title: "count",dataKey: "count" }
  ];

  var rows = datas?.map((data) => ({
    Rank: data?.Rank,Name: data?.Name,count: data?.count
  }));

  const downloadPdf = () => {
    const string = renderToString(<PdfDocument />);

    var doc = new jsPDF("p","pt");
    doc.setFontSize(20);
    doc.setTextColor(40);
    doc.setFontStyle("normal");
    doc.autoTable(columns,rows,{
      startY: doc.autoTable() + 70,margin: { horizontal: 10 },styles: { overflow: "linebreak" },bodyStyles: { valign: "top" },columnStyles: { email: { columnWidth: "wrap" } },theme: "striped",showHead: "everyPage"
    });
    doc.fromHTML(string);

    doc.save("random.pdf");
  };

  return (
    <div className="App">
      <h1>Hello CodeSandBox</h1>
      <h2>Start editing to see some magic happen!</h2>
      <button onClick={downloadPdf}> Download PDF </button>
    </div>
  );
}

解决方法

AutoTable 提供了用于自定义表格内容和样式的钩子列表。

您可以使用 didDrawPage 钩子将页眉和页脚添加到您的页面。你可以这样做:

doc.autoTable(columns,rows,{
  startY: doc.autoTable() + 70,margin: { horizontal: 10 },styles: { overflow: "linebreak" },bodyStyles: { valign: "top" },columnStyles: { email: { columnWidth: "wrap" } },theme: "striped",showHead: "everyPage",didDrawPage: function (data) {

    // Header
    doc.setFontSize(20);
    doc.setTextColor(40);
    doc.text("Report",data.settings.margin.left,22);

    // Footer
    var str = "Page " + doc.internal.getNumberOfPages();

    doc.setFontSize(10);

    // jsPDF 1.4+ uses getWidth,<1.4 uses .width
    var pageSize = doc.internal.pageSize;
    var pageHeight = pageSize.height
      ? pageSize.height
      : pageSize.getHeight();
    doc.text(str,pageHeight - 10);
  }
});

结果:

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。