WickedPDF 模板 image_tag / wicked_pdf_image_tag 不适用于仅 Rails API

问题描述 投票:0回答:4

我正在尝试使用 Wicked PDF 生成 PDF。到目前为止,一切顺利,但当我尝试添加图像时,我得到的都是空白框。我的图像位于

../app/assets/images/foo.png
../public/images/foo.png
中,用于测试目的。

据我了解,

wicked_pdf_image_tag('foo.png')
将输出
<img src="file:///home/users/my_username/my_app_name/public/images/foo.png">
,因此我的图像在
/public/images
中,以下代码应该可以工作:

<%= wicked_pdf_image_tag("foo.png", width: 100, height: 100) %>    

...但事实并非如此,它只给了我一个空白框。我还尝试了以下所有方法:

    <%= image_tag Rails.root.join("app/assets/images/foo.png"), width: 100, height: 100 %>
    <img src="<%= Rails.root.join("app/assets/images/foo.png")%>" width="100" height="100">
    <%= image_tag Rails.root.join("public/images/foo.png"), width: 100, height: 100 %>
    <img src="<%= Rails.root.join("public/images/foo.png")%>" width="100" height="100">
    <%= wicked_pdf_image_tag("foo.png", width: 100, height: 100) %>
    <img src="<%= "images/foo.png"%>" width="100" height="100">

生成的就是这个

如有任何帮助,我们将不胜感激。预先感谢

更新:

我认为值得一提的是 Rails 应用程序仅支持 API。话虽如此,我在 .erb 文件中添加了以下代码:

<%= image_tag image_url("foo.png"), width: 100, height: 100 %>

仅此方法不起作用,但如果我将 application_controller.rb 类更改为:

class ApplicationController < ActionController::API

至:

class ApplicationController < ActionController::Base

这是我发现的使图像出现的唯一方法。如果有人能对此提供见解,我将不胜感激。

ruby-on-rails ruby-on-rails-5 erb wicked-pdf
4个回答
0
投票

不认识你的时间...我希望你没事...尝试将其添加到您的应用程序控制器中:

class ApplicationController <ActionController::API
   include ActionController::Helpers
   #....
end

之后

 <%= image_tag("foo.png", size: "100")  %>

0
投票

我过去也遇到过这个问题,如果我没记错的话,我的问题是:

无论是缩进

wicked_pdf_image_tag
的方式有问题,您都不应该使用任何括号,如下所示:

<%= wicked_pdf_image_tag 'foo.png', class: "my-class", size: "50x50" %>

您正在使用的 wicked_pdf 二进制文件的版本


0
投票

我终于开始工作了。无需更改

application_controller.rb
类。我所要做的就是指定图像的主机,并用它构建 URL 的其余部分,如下所示:

wicked_pdf_image_tag("localhost:3000#{image_url("foo.png")}")

当然,一旦应用程序开始工作,主机就会发生变化。为此,我创建了一个助手来为我管理图像 URL:

def manage_image_url
    return case Rails.env
    when 'development' then 'http://localhost:3000'
    when 'develop' then 'https://yourpagehere.com'
    else 'https://yourotherpagehere.com'
    end
end

在生成 PDF 的控制器中,我将该方法的结果作为变量传递,最终的代码应如下所示:

wicked_pdf_image_tag("#{manage_image_url}#{image_url("foo.png")}")

image_tag
方法也有效。 请注意,如果您的 Rails 应用程序不是仅 API,您可能不需要执行此操作。 我仍然不确定是什么导致图像在您尝试从资产或公共文件夹加载图像时不显示,但我的猜测是,这与仅 API 应用程序的工作方式有关。祝你有美好的一天!


0
投票

帮我解决了

<%= wicked_pdf_image_tag(asset_url(row["image_kind"]), { size: "100x100" }) %>
© www.soinside.com 2019 - 2024. All rights reserved.