【问题标题】:Perl, GhostScript & STDIN, STDOUTPerl、GhostScript 和标准输入、标准输出
【发布时间】:2012-03-16 19:26:49
【问题描述】:

如何在不写入 HDD 中间变量的情况下将来自变量的文件提供给 ghostscript 并将结果发布回变量。

这行可能会调用ghost:

gs -q -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=%stdout -

【问题讨论】:

  • CPAN 中的所有模块都不输出到变量,并写入硬盘。
  • 查看 Perl 文档中的“open”函数,它解释了如何像读取文件一样读取命令的输出
  • 尝试使用open和open2函数,没用

标签: perl stdout stdin ghostscript


【解决方案1】:
use GSAPI qw();
use IO::CaptureOutput qw(capture);

my $pdf;
capture {
    my $handle = GSAPI::new_instance;
    GSAPI::init_with_args($handle, 'TITAN', qw(-dBATCH -dNOPAUSE -dQUIET -dSAFER -sDEVICE=pdfwrite -sOutputFile=-));
    GSAPI::run_string($handle, 'newpath 100 200 moveto 200 250 lineto 100 300 lineto closepath gsave 0.5 setgray fill grestore 4 setlinewidth 0.75 setgray stroke showpage');
    GSAPI::exit($handle);
} \$pdf;

【讨论】:

  • bugtracker 中有一个补丁。
  • 我不相信你。当你说"it doesn't work" 时,你隐瞒了关键信息。
  • 在这种情况下,您是指定- 作为输入文件还是干脆不指定输入文件?我正在尝试在 C 中做同样的事情(根本没有硬盘访问权限)并不断收到“无法打开初始设备,退出。”。
  • ebyrob,你最好 open a new question 解决你的 C 问题。提示:看GSAPI.xs,Perl 函数run_string 包装了GSAPI 调用gsapi_run_string_with_length