2013-09-10 2 views
0

Что не так с этим методом? Я полностью в тупике. Я получаю эту ошибку на img.write(res) линии:Рельсы: креветка PDF to rmagick output

ArgumentImage no images in this image list 

Вот метод контроллера:

def convert_to_image 
    @document = Document.find(params[:document_id]) 
    img = Magick::ImageList.new 
    pdf = Prawn::Document.generate("tmp.pdf", :margin => 0, :page_size => [398, 398]) do |p| 
    res = @document.post_pdf(p) 
    img.write(res) 
    send_data img 
    end 
end 

Метод post_pdf упоминалось выше выглядит следующим образом:

def post_pdf(p) 
    size = 398 
    p.image self.user.logo.path, :width => size 
    p.bounding_box([30, 490], :width => size) do 
    p.fill_color self.user.colour1 
    p.pad_bottom(10) { p.text self.title, :size => 28, :style => :bold } 
    p.fill_color '#444444' 
    end 
    self.components.each do |component| 
    p.image component.image_newsletter.path, :width => size 
    p.fill_color self.user.colour1 
    p.fill_rectangle([0, 20], size, 20) 
    end 
end 
+1

Возможно, вам стоит вернуть что-то из 'post_pdf'? например 'p' ... На данный момент это, вероятно, возвращает массив' self.components'. – j03w

+0

Я думал, Rails автоматически возвратил объекты в блоках? Я проверю это. –

+1

'post_pdf (p)' возвращает последний оператор, который в вашем случае является 'self.components.each'. Блок, который вы передали 'each', будет' yield' внутри 'each' scope. После этого 'each' вернет исходный массив. http://www.ruby-doc.org/core-2.0.0/Array.html#method-i-each Функции, которые принимают 'block', могут или не могут возвращать результаты' block', так что не полагайтесь на это. – j03w

ответ

0

решаемая. Необходимо:

1.) Ghostscript.

2.) переписан метод:

def create_pdf_image 
    @document = Document.find(params[:document_id]) 
    pdf = Prawn::Document.new 
    temp = "#{@document.user.name.downcase.parameterize.underscore}-#{@document.id}" 
    @document.post_pdf(pdf) 
    pdf.render_file("#{temp}.pdf") 
    image = Magick::ImageList.new("#{temp}.pdf") 
    image.write("#{temp}.png") { self.quality = 100 } 
    send_file "#{temp}.png" 
end 

Может кому-то помочь. По-видимому, rmagick нужен ghostscript. Мой метод просто не играл, хотя метод post_pdf остается неизменным.

 Смежные вопросы

  • Нет связанных вопросов^_^