2009-08-11 47 views
0

我有一臺服務器,生成或複製PDF文件到特定的文件夾。測試PDF文件是否在Ruby中完成(在Solaris/Unix上)?

我寫了一個Ruby腳本(我第一次),對於自己的PDF文件regularily檢查,並與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 

任何幫助或想法? 謝謝 彼得

回答

1

所有的%% EOF標記意味着應該有一個在文件的物理結束的最後1024個字節內。 PDF的結構是這樣的,一個PDF文檔可能有一個或多個%% EOF標記(細節在規範中)。

因此,「包含%% EOF」不等同於「完全複製」。真的,正確的答案是服務器應該發出信號,並且你的代碼應該是該信號的客戶端。一般來說,輪詢 - 特別是IO綁定輪詢是對這個問題的錯誤答案。

+0

感謝您的回答,但對我來說它並不能幫助:「服務器」是一個過程,它打印演示文檔管理設備(PostScript打印機)的文本,將其發送到其異步調用的Ghostscript到了打印機隊列生成一個PDF(是的,它是OS/2) – 2009-08-11 12:57:42

+1

你不能用一個寫pdf的腳本包裝對ghostscript的調用,然後做一個「touch filename.done」? – klochner 2009-08-11 17:08:05

相關問題