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

如何在Node.js的html-pdf中记录生成PDF的页码?

如何在html-pdf中收集页码到Node.js变量

首先得明确:html-pdf依赖PhantomJS在后台渲染PDF,{{page}}是模板变量,会在PhantomJS渲染阶段被替换成实际页码——前端HTML里的普通JS拿不到这个值,因为渲染过程和你的Node.js代码是隔离的。要把页码收集到变量里,得通过PhantomJS和Node.js之间的回调机制来传递数据。

下面是具体的实现方案:

步骤1:调整HTML结构,配置页脚回调脚本

我们需要把页脚的定义移到html-pdf的配置选项中,嵌入一段脚本,让PhantomJS渲染每一页时,把当前页码发送回Node.js端:

// 你的核心HTML内容
const htmlContent = `
<div id="pageHeader" style="text-align: center; padding-top: 30px;"></div>
<body class='page'> ${myHtmlText} </body>
`;

步骤2:设置PDF生成配置,收集页码

在生成PDF的配置里,我们定义页脚内容,并通过PhantomJS的onCallback函数接收每一页的页码,存入目标数组:

const pdf = require('html-pdf');

// 用来存储页码的数组
let myIndex = [];

const pdfOptions = {
  footer: {
    height: '20mm', // 给页脚预留足够空间,避免脚本被截断
    content: `
      <div style="text-align: center; font-size: 12px;">
        <span id="currentPage">{{page}}</span>
        <script>
          // 提取当前页码并发送给Node.js端
          const pageNum = parseInt(document.getElementById('currentPage').textContent);
          window.callPhantom({ type: 'pageNumber', value: pageNum });
        </script>
      </div>
    `
  },
  phantom: {
    // 接收PhantomJS传递的页码数据
    onCallback: function(data) {
      if (data.type === 'pageNumber') {
        myIndex.push(data.value);
      }
    }
  }
};

// 生成PDF并处理结果
pdf.create(htmlContent, pdfOptions).toFile('./output.pdf', (err, res) => {
  if (err) {
    console.error('PDF生成失败:', err);
    return;
  }
  console.log('PDF生成完成!页码数组:', myIndex);
  // 此时myIndex就是[1,2,3,...]这样的完整页码集合
});

替代方案:直接生成页码范围数组

如果你不需要逐页捕获页码,只是想要从1到总页数的连续数组,可以通过PhantomJS获取总页数后直接生成:

const pdfOptions = {
  phantom: {
    onLoadFinished: function() {
      // 获取PDF总页数
      const totalPages = this.pages.length;
      // 生成从1到总页数的数组
      myIndex = Array.from({ length: totalPages }, (_, i) => i + 1);
    }
  }
};

注意事项

  • html-pdf库已经多年未维护(最后更新在2018年),如果项目允许,建议迁移到更现代的工具比如Puppeteer(基于Chrome),它的API更灵活,文档也更完善。
  • 务必确保页脚的height设置足够,否则脚本可能被截断,无法触发回调传递页码。

内容的提问来源于stack exchange,提问作者T.J. Webaholic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 23:24:08