【问题标题】:PhantomJS: pipe inputPhantomJS:管道输入
【发布时间】:2012-09-06 09:31:15
【问题描述】:

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

使用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 已创建,但为空白。我错过了什么吗?

【问题讨论】:

    标签: linux pipe named-pipes phantomjs mkfifo


    【解决方案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 "&lt;b&gt;test&lt;/b&gt;" | phantomjs makepdf.js &gt; test.pdf &amp;&amp; open test.pdf

    【讨论】:

    • 这个其实我已经试过了,发现不行。但是,下载最新版本后,它确实可以工作。谢谢!
    • 使用 "load" 事件不是使用 setTimeout 更好吗?这样你就知道一切都已经加载了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 2021-02-21
    相关资源
    最近更新 更多