2015-03-16 1 views
1

Я использую жемчужину 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, чтобы узнать, могу ли я сделать то же самое из контроллера или модели.

ответ

0

После того, как креветка бросила поддержку шаблона, я написал рубинский родной камень под названием combine_pdf.

Я не могу протестировать его с вашим файлом, но вы можете загрузить PDF с помощью драгоценного камня, отобразить его в строке (или временном файле) и перезагрузить в пределах Prawn.

ИЛИ, возможно, это может помочь вам перейти к Prawn 2.0 (вы можете создавать новые данные PDF с помощью креветки и штамповать ее по существующему файлу с помощью combine_pdf).

Это просто мысль, не убивайте меня, если это не работает ;-)

Удачи!