javascript - 向 Node Webshot 生成的 PDF 添加标题

标签 javascript node.js pdf phantomjs

我正在尝试向使用 node-webshot 生成的 PDF 添加标题, 但没有任何显示。

我正在使用这段代码:

webshot('https://www.google.com', 'google.pdf', options, function (err) {
    if(err) throw err;
    console.log('Saved to PDF');
});

像这样的选项对象:

var options = {
        "paperSize": {
            "format": "A4", 
            "orientation": "portrait", 
            "border": "0.25cm",
            "header": {
                "height": "2cm",
                "contents": function () {
                    return phantom.callback(function(pageNum, numPages) {
                        return '<h1>' + pageNum + ' / ' + numPages + '</h1>';
                    });
                }
            }
        }
    };

我尝试按照 PhantomJS 上的显示方式执行内容功能 documentation但它不起作用,因为未定义幻影。我找不到任何有关如何使用 webshot 添加页眉/页脚的示例。

PDF 生成正确,但页眉是空白的,上面什么也没有写。

我该如何解决这个问题?

最佳答案

我知道这个问题已有一年多了,但对于其他遇到与上述相同问题的人来说,eval() 对我不起作用。我最终做的是在同一位置添加以下代码:

if (key === "paperSize" && page[key] && page[key].header && page[key].header.contents) {
    var header = {
      "height": page[key].header.height,
      "contents": phantom.callback(function() {return options.paperSize.header.contents;})
    }
    page.paperSize.header = header;
  }
  if (key === "paperSize" && page[key] && page[key].footer && page[key].footer.contents) {
    var footer = {
      "height": page[key].footer.height,
      "contents": phantom.callback(function() {return options.paperSize.footer.contents;})
    }
    page[key].footer = footer
  }
  if (key === "paperSize") {
    page.paperSize = {
      "format": options.paperSize.format,
      "orientation": options.paperSize.orientation,
      "margin": options.paperSize.margin,
      "header": header,
      "footer": footer
    }
  }

原因是 webshot 将选项对象中的所有数据字符串化,因此使用 phantomjs 呈现页眉和页脚所需的 phantom.callback 无法正确字符串化。相反,您只需要在选项对象中添加要在页眉/页脚中使用的 html,然后将其插入到上面代码中的 phantom.callback 中。这种方法的唯一问题是您不能在回调中使用 numPages 和 pageNum 参数。

关于javascript - 向 Node Webshot 生成的 PDF 添加标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26961624/

相关文章:

javascript - 使用 pdf.js 在浏览器中渲染 JBIG2 图像

Javascript:如何将一个数组的组件传输到另一个数组并限制传输的项目数量

javascript - 正则表达式 : substring not followed by character

javascript - 时刻JS ("Must to show days in next week")

node.js - 在 Node js 的 SQL Server 驱动程序上构建失败

wordpress - Woocommerce 州/国家/地区列表

javascript - 正确修改 React.js 中的状态数组

javascript - Redux Actions 必须是普通对象。使用自定义中间件进行异步操作

javascript - 在node.js中获取http状态码

javascript - 将 CSS 样式的 HTML 导出为 PDF