Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
测试PDF文件是否在Ruby中完成(在Solaris/Unix上)?_Ruby - Fatal编程技术网

测试PDF文件是否在Ruby中完成(在Solaris/Unix上)?

测试PDF文件是否在Ruby中完成(在Solaris/Unix上)?,ruby,Ruby,我有一个服务器,可以生成PDF文件或将其复制到特定文件夹 我写了一个ruby脚本(我有史以来第一次),定期检查自己的PDF文件,并用acrobat显示它们。这么简单,这么好 但现在我有一个问题:如何检测PDF是否完整 生成的PDF以%%EOF结尾\n 但是复制的文件是用一些Apple Magic(我想是Acrobat Writer)生成的,它在文件开头有一个%%EOF,在文件末尾有很多二进制零和另一个%%EOF,结尾有回车符(或换行符)和二进制零 while true dir = readp

我有一个服务器,可以生成PDF文件或将其复制到特定文件夹

我写了一个ruby脚本(我有史以来第一次),定期检查自己的PDF文件,并用acrobat显示它们。这么简单,这么好

但现在我有一个问题:如何检测PDF是否完整

生成的PDF以%%EOF结尾\n 但是复制的文件是用一些Apple Magic(我想是Acrobat Writer)生成的,它在文件开头有一个%%EOF,在文件末尾有很多二进制零和另一个%%EOF,结尾有回车符(或换行符)和二进制零

while true
  dir = readpfad
  Dir.foreach(dir) do |f|
    datei = File.join(dir, f)
    if File.file?(datei)
      if File.stat(datei).owned?
        if datei[-9..-1].upcase == "__PDF.PDF"
          if File.stat(datei).size > 5
            test = File.new(datei)
            dummy = test.readlines
            if dummy[-1][0..4] == "%%EOF"
              #move the file, so it will not be shown again
              cmd = "mv " + datei + " " + movepfad
              system(cmd)
              acro = ACROREAD + " " + File.join(movepfad, f) + "&"
              system(acro)
            else
              puts ">>>" + dummy[-1] + "<<<"
            end
          end
        end
      end
    end
  end
  sleep 1
end
为true时
dir=readpfad
董事会主席(董事会主席)|
datei=File.join(dir,f)
if File.File?(日期i)
如果File.stat(datei).owned是?
如果日期i[-9..-1].upcase==“\uu PDF.PDF”
如果File.stat(datei).size>5
test=File.new(datei)
dummy=test.readlines
如果虚拟[-1][0..4]==“%%EOF”
#移动文件,使其不再显示
cmd=“mv”+datei+“”+movepfad
系统(cmd)
acro=ACROREAD+“”+File.join(movepfad,f)+“&”
系统(acro)
其他的

放置“>>>”+虚拟[-1]+“所有%%EOF令牌意味着在文件物理结尾的最后1024字节内应该有一个。PDF的结构是这样的:PDF文档中可能有一个或多个%%EOF令牌(详细信息见规范)


因此,“contains%%EOF”并不等同于“完全复制”。实际上,正确的答案是服务器应该在完成时发出信号,并且您的代码应该是该信号的客户端。通常,轮询——特别是IO绑定轮询——是对该问题的错误答案。

感谢您的回答,但在我的情况下,它没有帮助:在“服务器”是一个进程,它在演示管理器设备(postscript打印机)上打印文本,并将其发送到打印机队列,该队列异步调用ghostscript以生成PDF(是的,它是OS/2)。难道您不能用写入PDF的脚本包装对ghostscript的调用,然后执行“touch filename.done”操作吗?