16

背景/ニーズ

Node.JS と Express を使用して Web アプリケーションのグループで作業しています。ハード コピーおよびハード コピー フォームとして印刷できるレポートを生成できる必要があります。レポートと手書きフォームの両方について、サーバー上で PDF を動的に生成したいと考えています。現在、サーバーで EJS テンプレートを使用しています。

オプション

テンプレートを使用してフォーム/レポートを作成し、結果の HTML から PDF を生成できると便利だと考えていましたが、これを行うためのオプションは、私が見つける限り制限されているようです。私は2つの異なる解決策を見てきました:

編集: wkhtmltopdfに依存するnode-wkhtmlと呼ばれる HTML から PDF を生成できる別の Node.JS モジュールを見つけました。現在、 と を使用して比較しています。これらの両方を使用して Node サーバーで PDF を生成できましたが、どちらも必要なことを実行できるようです。node-phantomnode-wkhtml

PhantomJS を使用して Web サイトから PDF ドキュメントをレンダリングする例をいくつか見てきましたが、私が見た例はすべて URL を使用しており、HTML の文字列をフィードしていません。PDF レポートを動的に生成するために、これをテンプレートで機能させることができるかどうかはわかりません。

レポートのリクエストが届いたとき、EJS テンプレートから HTML を生成し、それを使用して PDF を生成したいと考えていました。ファントムを使用して、リクエストを行わずにサーバー上で完全にページを動的に作成する方法はありますか?

私の他のオプションは、PDF の動的生成を可能にする PDFkit を使用することですが、これはキャンバスのような API であり、私が知る限り、テンプレートの概念を実際にはサポートしていません。

質問

Node で PhantomJS を使用して、テンプレートから生成された HTML から動的に PDF を生成できるかどうかは誰にもわかりませんか? または、Node/Express バックエンドから印刷可能なレポート/フォームを生成して提供するために使用できる他のソリューションを知っている人はいますか?

4

3 に答える 3

7

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。)

于 2013-10-21T20:45:29.647 に答える
5

この問題に対する非常に簡単な解決策は、node-webshotモジュールです。生の html を引数として直接入力すると、pdf が直接出力されます。

于 2014-01-11T21:37:00.463 に答える