16

我正在尝试使用 PhantomJS 将 html 页面呈现为 pdf。我不想将文件写入磁盘,我在内存中有 html,我想要在内存中保存 pdf。

使用Pooria Azimi 在这个问题上的出色回答,我能够从命名管道中获取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 输入标准输入,PDF 二进制输出标准输出。你可以像这样测试它:

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

于 2013-06-24T23:19:22.247 回答