从流中编写PDF二进制文件会产生格式错误的PDF

时间:2013-06-26 12:04:24

标签: linux perl pdf stdin binaryfiles

亲爱的Stack Overflow用户,

感谢您对以下问题的帮助: 我们有一个Apache服务器作为转发代理,配置了ext_filter:只要响应是MIME类型PDF,就会调用过滤器(perl脚本),并且可以从STDIN读取PDF的内容。我们从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显示xref表格在我们编写的PDF格式中格式不正确,并且Adobe Reader无法打开它。我们已经尝试过使用sysopen,sysread等,使用“:raw”,以及其他几种正确编写二进制文件的方法,并且没有任何工作(剪切和粘贴来自documnetation的代码用于编写二进制文件)。只有在linux中使用'tee'实用程序作为过滤器时,才能正确编写。这对我们没有帮助 - 我们需要能够将它作为perl脚本的一部分从stdin写入文件。有什么建议?如果有办法以某种方式通过系统调用调用'tee',并给它perl程序的STDIN - 它可能会起作用。非常感谢提前。

1 个答案:

答案 0 :(得分:0)

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

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

我会进一步研究这个并在我找到解释时更新。

谢谢大家。