1

亲爱的 Stack Overflow 用户,

我会感谢您对以下问题的帮助:我们有一个 Apache 服务器用作转发代理,并配置了 ext_filter:只要响应是 MIME 类型 PDF,就会调用过滤器(perl 脚本),并且 PDF 的内容可能从 STDIN 读取。我们从 STDIN 读取 PDF,将其写入文件,仅此而已。这几乎总是很有效,但在一个特定的网站上,PDF 在以下列方式编写时格式不正确:

my $input_file = shift;
binmode STDIN;
open(OUT, ">" . $input_file);
binmode OUT;
foreach my $line (<STDIN>){
        print OUT $line;
}
close OUT;

如果我们改为调用“tee”(将过滤器设置为使用“tee”)- 文件被正确写入。分析格式错误的 PDF 表明我们编写的 PDF 中的外部参照表格式错误,Adobe Reader 无法打开它。我们已经尝试过使用 sysopen、sysread 等,使用 ":raw" 和其他几种正确编写二进制文件的方法,但没有任何效果(从文档中剪切和粘贴用于编写二进制文件的代码)。仅当使用 linux 中的 'tee' 实用程序作为过滤器时,它才被正确编写。这对我们没有帮助——我们需要能够将它作为 perl 脚本的一部分从标准输入写入文件。有什么建议么?如果有一种方法可以通过系统调用以某种方式调用“tee”,并为其提供 perl 程序的 STDIN——它可能会起作用。提前谢谢了。

4

1 回答 1

0

好吧,虽然代码基本上是正确的,但将它放在“eval”中会以某种方式破坏 thd PDF。我仍然不明白为什么,但删除 eval 解决了问题。

perl 是从 Apache 的 ext_filter 模块的上下文中调用的。

当我找到对此的解释时,我将进一步调查并更新。

谢谢大家。

于 2013-08-18T12:13:52.827 回答