ruby-on-rails - wicked_pdf_image_tag 在查找图像时解析为公共(public)文件夹

标签 ruby-on-rails ruby wkhtmltopdf wicked-pdf ruby-on-rails-5.1

我想渲染用户在 PDF 中上传的图像。
我将图像保存到当前 Rails 目录 public文件夹。

图像正在公用文件夹中保存。
一切都在开发中有效,但在生产中,它认为图像是 Assets 的一部分,并引发“图像不在 Assets 中”的错误。
在开发中,它正在查看公用文件夹中的正确路径。
在使用以下代码进行生产时,它会查看 public/public为图像。

这是我认为呈现 PDF 的代码。


    <% @images.each do |image| %>
      <% if Rails.env != "development" %>
        <%= wicked_pdf_image_tag ("public/#{image.original_filename}")%>
      <% else %>
        <%= wicked_pdf_image_tag(image.original_filename)%>
      <% end %>

    <% end %>


我尝试使用

wicked_pdf_image_tag("public/#{image.original_filename}")

但它返回一个 Assets 错误,因为它查看 public/assets 文件夹。

我也尝试过使用

wicked_pdf_image_tag("/public#{image.original_filename}")

但它会导致公共(public)/公共(public)文件夹,图像不在里面,而是上一层。

当我尝试检索 wicked_pdf_image_tag 所期望的图像时看看public/图像的文件夹。

最佳答案

wicked_pdf_image_tagimage_tag 的简写使用邪恶的 pdf 规则解析 Assets 路径(参见 wicked_pdf/wicked_pdf_helper/assets.rb):

def wicked_pdf_image_tag(img, options = {})
  image_tag wicked_pdf_asset_path(img), options
end

def wicked_pdf_asset_path(asset)
  if (pathname = asset_pathname(asset).to_s) =~ URI_REGEXP
    pathname
  else
    "file:///#{pathname}"
  end
end

因此,当您需要一些变化时,没有什么可以阻止您使用 image_tag直接使用正确的图像 url/路径。问题是 wicked_pdf 需要本地文件系统的绝对文件路径才能呈现(以及用于 html 预览的纯图像 url):

image_tag "file://#{File.expand_path("public/your_image_path_goes_here.jpg")}"

也不是original_filename不是您存储中该文件的名称,而是上传期间客户端计算机上的文件名称。您需要使用存储路径,这取决于您的上传库,例如对于 Paperclip,这将类似于 yourmodel.image.path

关于ruby-on-rails - wicked_pdf_image_tag 在查找图像时解析为公共(public)文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56690670/

相关文章:

ruby-on-rails - 使用 form_tag 传递所有参数

sql - rails 在表中添加新行

ruby - 为什么 0 && 1 在 ruby​​ 中是 1 而 1 && 0 是 0?

ruby - 我能否以编程方式获取类或方法的描述?

html - 使用 NReco (WkHtmlToPdf) 以单位设置页面大小

django - 将 wkhtmltopdf 与动态模板结合使用

ruby-on-rails - 分配(:user) returning nil rather than user

ruby-on-rails - 选择_tag : Style and Modify Options Upon Condition

ruby - 我怎样才能把数字当作单词来排序?

css - wkhtmltopdf 文本分为 2 页