![](/img/trans.png)
[英]Is it possible to run PhantomJS from node.js as a command line argument
[英]Is it possible to use PhantomJS and Node to dynamically generate PDFs from templates?
我正在與使用Node.JS和Express的Web應用程序上的小組合作。 我們需要能夠生成可以打印為紙質版和紙質版的報告。 最好是我們希望在服務器上為報告和手寫表格動態生成PDF。 我們目前正在服務器上使用EJS模板。
我當時以為,能夠使用模板來構建表單/報告並從生成的HTML生成PDF將很方便,但是據我所知,這樣做的選擇似乎很有限。 我研究了兩種不同的可能解決方案:
編輯:我發現了另一個Node.JS模塊,該模塊能夠從HTML生成名為node-wkhtml的 PDF,它依賴於wkhtmltopdf 。 我現在正在比較使用node-phantom
和node-wkhtml
。 我已經能夠使用這兩種方法在Node服務器上生成PDF,它們似乎都可以滿足我的需求。
我已經看到了一些使用PhantomJS從網站呈現PDF文檔的示例,但是我看到的所有示例都使用URL,並且不向其提供HTML字符串。 我不確定是否可以使用模板來動態生成PDF報告。
當需要報告時,我希望從EJS模板生成HTML,並使用該模板生成PDF。 無論如何,我是否可以使用Phantom在服務器上完全動態創建頁面而無需發出請求?
我的另一個選擇是使用允許動態生成PDF的PDFkit,但是據我所知,它是一種類似於畫布的API,實際上並不支持任何模板概念。
有誰知道我是否可以將PhantomJS與Node一起使用,以從模板生成的HTML動態生成PDF? 還是有人知道我可以使用其他任何解決方案從我的Node / Express后端生成和提供可打印的報告/表格。
我將為任何試圖用node-phantom
做類似事情的人發布答案。 因為node-phantom
控制着PhantomJS的本地安裝,所以即使相應的PhantomJS操作是同步的,它也必須對所有內容使用異步方法。 在設置要在PhantomJS中呈現的頁面的內容時,您只需執行以下操作:
page.content = '<h1>Some Markup</h1>';
page.render('page.pdf');
但是,在節點內使用node-phantom模塊時,必須使用page.set
方法。 這是我在下面使用的代碼。
'use strict';
var phantom = require('node-phantom');
var html = '<!DOCTYPE html><html><head><title>My Webpage</title></head>' +
'<body><h1>My Webpage</h1><p>This is my webpage. I hope you like it' +
'!</body></html>';
phantom.create(function (error, ph) {
ph.createPage(function (error, page) {
page.set('content', html, function (error) {
if (error) {
console.log('Error setting content: %s', error);
} else {
page.render('page.pdf', function (error) {
if (error) console.log('Error rendering PDF: %s', error);
});
}
ph.exit();
});
});
});
EJS在PhantomJS中運行正常(安裝path
模塊后)。 要在給定HTML字符串的情況下在PhantomJS中加載頁面,請執行page.content = '<html><head>...';
。
npm install ejs
和npm 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-webshot模塊-您可以將原始html直接放入參數中,然后直接打印pdf。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.