Rails + Prawn_rails:如何在我的PDF中添加图像?

时间:2013-12-04 22:34:13

标签: ruby-on-rails pdf

我正在使用这个gem来使用Prawn来创建PDF:https://github.com/Whoops/prawn-rails

但是,我似乎无法弄清楚如何添加图像。我已经尝试了pdf.image "path/to/img.jpg,但它会说该文件不是可识别的格式。

我也在第101页查看了这个:http://prawn.majesticseacreature.com/manual.pdf,但它不起作用。

这在观点中发生:

    prawn_document() do |pdf|
        pdf.image "#{Rails.root}/public/logo.gif"

    end

这引发:

Prawn::Errors::UnsupportedImageType at /admin/purchases/6188.pdf

image file is an unrecognised format

.jpg图像也是如此

3 个答案:

答案 0 :(得分:1)

我会做这样的事情。

gem 'prawn'

bundle install

在您的控制器中。

      def controller_method
         pdf = Prawn::Document.new
         begin
            pdf_file_path = "#{Rails.root}/public/output"
            full_doc = "#{Rails.root}/public/something.png" 
            pdf.image full_doc
            pdf.start_new_page
            pdf.render_file pdf_file_path
         rescue Prawn::Errors::UnsupportedImageType
             flash[:notice] = "Image unsupported"
             redirect_to '/handle'
         end
      end

答案 1 :(得分:0)

添加图像非常简单。

def download
  @document = Document.find(params[:id])
  tmp_file = Tempfile.new(Digest::MD5.hexdigest(rand(12).to_s))
  pdf = Prawn::Document.generate(tmp_file.path, :margin => 0, :page_size => "A4", :skip_page_creation => true) do |posting|
    posting.start_new_page
    posting.image @document.user.logo.path
    send_data posting.render, :filename => "whatever.pdf", :type => "application/pdf"
  end
end

显然@document.user.logo.path可能是文字路径,在这种情况下,这只是一个Paperclip附件。

<强>更新

如果它是文字路径,您可能需要执行以下操作:

require "open-uri"

def download
  ...
  posting.image File.open("/path/to/image.jpg")
  ...
end

答案 2 :(得分:0)

最近的大虾(版本1.0.0)似乎发生了变化。你会得到

undefined method `image=' for #<Prawn::Document

如果您尝试将某些内容应用于pdf.image。

这对我有用:

img = "#{Rails.root}/public/my_lovely_image.png" 

Prawn::Document.new(background: img)