这种方法有什么问题?我完全难过了。我一直在img.write(res)
行上收到此错误:
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
答案 0 :(得分: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
方法保持不变。