Я использую жемчужину Prawn (v 0.12.0, мы не можем использовать 2.0.0 из-за проблем совместимости) в проекте Ruby on Rails. Пользователь загрузил PDF-файл, который они получили непосредственно с официального веб-сайта правительства, поэтому это PDF-файл, который нам придется обрабатывать и для других пользователей, но он поврежден и сбой, когда Prawn пытается отобразить его как строку. Вы можете найти PDF-код в ссылке «Сдача в аренду» по телефону this page.Ruby on Rails, Prawn - Восстановление поврежденного PDF-файла в Rails
Ошибки я получаю с этим PDF:
NoMethodError - undefined method 'size' for nil:NilClass:
И это исходит от этого метода в нашей Креветках перл:
def finalize
if dictionary.data[:Contents].is_a?(Array)
dictionary.data[:Contents].each do |stream|
stream.compress_stream if document.compression_enabled?
stream.data[:Length] = stream.stream.size # THIS LINE!!!
end
else
content.compress_stream if document.compression_enabled?
content.data[:Length] = content.stream.size # IT DOESN'T GET TO THIS
end
end
я застрял. Единственными инструментами, которые я смог найти в моих поисках «исправления» PDF-файлов, являются Adobe Acrobat и PDFtk. PDFtk можно использовать на сервере, но это только для Windows, и наш сервер работает на сервере Linux. Я не могу найти ни одного драгоценного камня или вокруг него. Я также смог «исправить» PDF «Сохранить как PDF» из Google Chrome (v41) на Mac (не работали ни Windows, ни Ubuntu Google Chrome). Я хочу, чтобы иметь возможность «исправить» PDF из моего проекта Rails. Любые мысли/предложения?
[EDIT] Использование Ghostscript из командной строки работало для меня. Эта строка: gs -o repaired.pdf -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress crp_14.pdf
, «исправлена» в формате PDF. Теперь посмотрим в RGhost gem, чтобы узнать, могу ли я сделать то же самое из контроллера или модели.