16

PhantomJSを使用してhtmlページをpdfにレンダリングしようとしています。ファイルをディスクに書き込みたくありません。HTMLをメモリに保存し、PDFをメモリに保存します。

この質問でPooriaAzimiからの優れた回答を使用して、名前付きパイプからpdfを取得できます。もう一方の端で同じことを試みると(入力ファイルを名前付きパイプに置き換える)、空白のpdfになってしまいます。

これは私が今していることです(簡略化):

mkfifo in_pipe.html out_pipe.pdf
./phantomjs rasterize.js in_pipe.html out_pipe.pdf

次に、別の端末で:

echo '<center>hey!</center>' > in_pipe.html
cat out_pipe.pdf > out.pdf

ファイルout.pdfが作成されますが、空白です。私は何かが足りないのですか?

4

1 に答える 1

32

探していることは、PhantomJS で直接非常に簡単に行うことができます (実際には文書化されていません)。

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

page.viewportSize = { width: 600, height: 600 };
page.paperSize = { format: 'Letter', orientation: 'portrait', margin: '1cm' };

page.content = fs.read('/dev/stdin');

window.setTimeout(function() {
    page.render('/dev/stdout', { format: 'pdf' });
    phantom.exit();
}, 1);

(読み込みが必要な画像がある場合などは、タイムアウトを増やす必要があるかもしれません。)

HTML は stdin に入り、PDF バイナリは stdout に出ます。次のようにテストできます。

echo "<b>test</b>" | phantomjs makepdf.js > test.pdf && open test.pdf

于 2013-06-24T23:19:22.247 に答える