2012-09-13 15 views
14

PhantomJSを使用してhtmlページをpdfにレンダリングしようとしています。 ファイルをディスクに書きたくない、メモリにhtmlがあり、メモリにpdfが必要です。PhantomJS:パイプ入力

Pooria Azimiの優れた答えをthis questionで使用して、名前付きパイプから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が作成されますが、空白になっています。何か不足していますか?

答えて

30

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は、標準入力になると、PDFのバイナリは、標準出力を出て行きます。これは実際に私はすでに試したものです

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

+0

、それが機能しなかったことがわかった:あなたはそれが好きでテストすることができます。しかし、最新バージョンをダウンロードした後は、実際に動作します。ありがとう! – mads

+0

setTimeoutを使用する代わりに、 "load"イベントを使用する方が良いでしょうか?そうすれば、すべてがロードされていることが分かります。 – oligofren

関連する問題