【问题标题】:Rails + Prawn_rails: How do I add an image to my PDF?Rails + Prawn_rails:如何将图像添加到我的 PDF?
【发布时间】:2013-12-04 22:34:13
【问题描述】:

我正在使用这个 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 图片也是如此

【问题讨论】:

  • 确切的错误是什么?您尝试过其他图片吗?
  • 是的,我尝试输入乱码pdf.image "nonexisting/image/path.jpg",它说找不到图像(这很好),但后来我将真实图像的路径传递给它,但它不起作用.无法识别的格式
  • 但你真的尝试过不同的 .jpg 文件吗?
  • Prawn 支持 PNG 和 JPG 图片,因此 .GIF 将不起作用。
  • @eugen 你说得对,我需要一张 JPG 图片。

标签: ruby-on-rails pdf


【解决方案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

【讨论】:

  • 视图中是否有可能?我更新了我的问题,使其更具体
【解决方案2】:

添加图片很简单。

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 可能是一个文字路径,在这种情况下它只是一个回形针附件。

更新

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

require "open-uri"

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

【讨论】:

  • 对不起,我忘了提,我在视图中遇到了这个问题。我会更新问题
  • 我已经用一些可能有帮助的东西更新了我的答案,但请注意,你提到的代码在你看来确实不应该存在。
【解决方案3】:

好像最新的大虾(1.0.0版)变了。你会得到

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

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

这对我有用:

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

Prawn::Document.new(background: img)

【讨论】:

    猜你喜欢
    • 2016-11-30
    • 2021-04-09
    • 2013-04-04
    • 2014-03-21
    • 1970-01-01
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    相关资源
    最近更新 更多