当前位置: 首页 > 面试题库 >

PhantomJS:管道输入

锺离明煦
2023-03-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已创建,但为空白。我想念什么吗?


问题答案:

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



 类似资料:
  • 问题内容: 本质上,我正在尝试替换: 为了避免使用硬盘驱动器,请在C ++中使用管道。这是我的代码: 我绝对可以确保上述字符串已正确初始化。但是,发生了两件事对我来说没有意义: (1)我正在执行的程序报告“输入文件为空”。由于我未使用“ <”调用程序,因此不应期望输入文件。相反,它应该期待键盘输入。此外,它应该阅读“ gulp_command”中包含的文本。 (2)程序的报告(通过标准输出提供)出

  • null (它也应该与ffprobe和ffplay一起工作)

  • 问题内容: 我想在Linux操作系统上的C程序内执行以下操作: 使用syscall(或2)创建PIPE 使用exec()执行新流程 将流程的STDIN连接到先前创建的管道。 将流程的输出连接到另一个PIPE。 这样做的目的是为了性能目的而避免访问任何驱动器。 我知道使用PIPE系统调用创建管道非常简单,我可以使用popen为输入或输出目的创建管道。 但是您将如何针对输入和输出执行此操作? 问题答案

  • 问题内容: 有没有人有创建Java中的管道对象,任何好的建议 是 从Java既是一个InputStream和和OutputStream没有多重继承和两个流是抽象类,而不是接口? 基本需求是有一个可以传递给需要InputStream或OutputStream的对象的对象,该对象需要将一个线程的输出传递给另一个线程的输入。 问题答案: 看来这个问题的重点已被遗漏。如果我对您的理解正确,那么您希望一个对

  • 问题内容: 我在bash脚本中具有简单的功能,我想将stdout作为输入传递给它。 我想以这种方式使用它。 当然,我使用了冗余函数echo和printf来简化问题,但是您明白了。现在,我收到一个“未找到”错误,我认为这意味着我的参数定界是错误的(“ $ 1”部分)。有什么建议么? 最初,jc_hms函数的用法如下: 但我想将结果存储在变量中,以便在将其发送到串行端口之前先进行进一步处理。 编辑:所

  • 问题内容: 这是一段简单的代码: 我将其执行为:java Read <input.txt 一旦将input.txt完全传递到程序中,x就会保持无限的null。为什么呢?有没有办法在将文件输入代码后使标准输入(命令行)活动?我尝试关闭流并重新打开,但它不起作用。重置等。 问题答案: 通过执行操作,您已经告诉操作系统,对于此过程,管道文件 是 标准文件。您不能再从应用程序内部切换回命令行。 如果要这样