проверить, закончен ли файл PDF в Ruby (в Solaris / Unix)? - PullRequest
0 голосов
/ 11 августа 2009

У меня есть сервер, который генерирует или копирует PDF-файлы в определенную папку.

Я написал скрипт Ruby (мой первый в истории), который регулярно проверяет собственные PDF-файлы и отображает их с помощью acrobat. Так просто, так мило.

Но теперь у меня проблема: как определить, что PDF завершен?

Созданный PDF заканчивается на %% EOF \ n но скопированные сгенерированы с помощью некоторого Apple-Magic (я думаю, что Acrobat Writer), который имеет %% EOF около начала файла, много двоичных нулей и еще один %% EOF около конца с возвратом каретки (или строкой). feed) и двоичный ноль в конце.

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 Ответ

1 голос
/ 11 августа 2009

Все токены %% EOF означают, что они должны быть в последних 1024 байтах физического конца файла. Структура PDF такова, что в документе PDF может содержаться 1 или более токенов %% EOF (подробности приведены в спецификации).

Таким образом, «содержит %% EOF» не эквивалентно «полностью скопированному». В самом деле, правильный ответ заключается в том, что сервер должен сигнализировать об этом, а ваш код должен быть клиентом этого сигнала. В общем, опрос - особенно опрос, связанный с IO, - неправильный ответ на эту проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...