node.js - 是否可以使用 PhantomJS 和 Node 从模板动态生成 PDF?

标签 node.js templates pdf pdf-generation phantomjs

背景/需要

我正在与一个使用 Node.JS 和 Express 的 Web 应用程序的小组合作。我们需要能够生成可以打印为硬拷贝和硬拷贝表格的报告。最好我们希望在服务器上为报告和手写表单动态生成 PDF。我们目前在服务器上使用 EJS 模板。

选项

我认为能够使用模板来构建表单/报告并从生成的 HTML 生成 PDF 会很方便,但是据我所知,我这样做的选择似乎有限。我研究了两种不同的可能解决方案:

编辑: 我发现了另一个 Node.JS 模块,它能够从 HTML 生成 PDF,名为 node-wkhtml 这依赖于 wkhtmltopdf .我现在使用 node-phantomnode-wkhtml 进行比较。我已经能够使用这两种方法在 Node 服务器上生成 PDF,而且它们似乎都能满足我的需求。

我已经看到了一些使用 PhantomJS 从网站呈现 PDF 文档的示例,但是我看到的所有示例都使用 URL 并且不向其提供 HTML 字符串。我不确定我是否可以使用模板来动态生成 PDF 报告。

当收到报告请求时,我希望从 EJS 模板生成 HTML,并使用它来生成 PDF。无论如何,我是否可以使用 Phantom 在服务器上完全动态创建页面而无需发出请求?

我的另一个选择是使用允许动态生成 PDF 的 PDFkit,但它是一个类似于 Canvas 的 API,据我所知并不真正支持任何模板概念。

问题

有谁知道我是否可以使用 PhantomJS 和 Node 从模板生成的 HTML 动态生成 PDF?或者有谁知道我可以用来从我的 Node/Express 后端生成和提供可打印报告/表单的任何其他解决方案。

最佳答案

EJS 似乎在 PhantomJS 中运行良好(安装 path 模块后)。要在给定 HTML 字符串的 PhantomJS 中加载页面,请执行 page.content = '<html><head>...'; .

npm install ejsnpm install path ,那么:

var ejs = require('ejs'),
    page = require('webpage').create();

var html = ejs.render('<h1><%= title %></h1>', {
    title: 'wow'
});

page.content = html;
page.render('test.pdf');
phantom.exit();

(使用 phantomjs 运行此脚本,而不是 node。)

关于node.js - 是否可以使用 PhantomJS 和 Node 从模板动态生成 PDF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19499789/

相关文章:

javascript - 使用 ClojureScript 项目中的 Node.js 库

c++ - 测试函数模板是否存在

javascript - 将 jsreport 与其他语言一起使用(非英语)

node.js - 在nodeJS中向用户发送通知

javascript - 检查 URL 中的 GET 变量

javascript - 我用sockets.io做了一个简单的聊天室,如何防止XSS攻击?

javascript - Jade 包含基于变量的模板

c++ - 仿函数 : templated struct vs templated operator()

javascript - PDF Blob - 弹出窗口不显示内容

php - TCPDF - 特殊字符(例如 : • ) showing up as diamond question mark