PhantomJS:管道输入(PhantomJS: pipe input)

2019-06-28 08:14发布

我试图用PhantomJS来呈现一个HTML页面的PDF。 我不想写文件到磁盘,我在内存中的HTML,我想在内存中的PDF文件。

使用从Pooria阿芝米的出色答卷,在这个问题 ,我能够从命名管道获取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是创建的,但为空白。 我缺少的东西吗?

Answer 1:

你可以做你直接在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



文章来源: PhantomJS: pipe input