(Rails)IMGKIT - 使用html和css导出图像时出现的问题

时间:2013-01-08 04:51:56

标签: ruby-on-rails-3 imgkit

我在我的一个项目中使用IMGKIT,并且必须使用带有html选项的css来满足要求。我注意到如果样式表设置如下:

kit = IMGKit.new(html, :quality => 50)
kit.stylesheets << '/path/to/css/file'

并且样式表有一个带有相对url('image.png')的background属性,使用kit.to_file导出时不会生成图像:

(Rails.root + "public/pngs/" + "image.png")

请求挂起,如果我们用协议,主机和端口将后台网址替换为完整网址,则会很好地导出。

我是否需要在样式表中为所有图像添加绝对网址?

我已经尝试在我的development.rb文件中定义asset_host:

config.action_controller.asset_host = Proc.new { |source|
     "#{request.protocol}#{request.host_with_port}"
    }

如果我检查浏览器,它确实替换了css中的url,但是当通过IMGKIT导出时仍然没有生成图像。

1 个答案:

答案 0 :(得分:4)

IMGKIT使用绝对网址为任何背景图片或其他资源重新提供css。 因此,您可以按照此链接https://coderwall.com/p/exj0ig和一些步骤

动态生成它

A)将所有图片放入rails app的assets / images文件夹

B)如果没有安装https://github.com/rails/sass-rails

,请安装gem'sass-rails'

C)创建另一个css文件名为css_file_name.css.sccs.erb

D)将所有其他css文件内容放入其中。

E)在css文件中,只需输入您的图像文件名如下: background-image:image-url('image.png');

F)使用资产pipline(http://guides.rubyonrails.org/asset_pipeline.html#how-to-use-the-asset-pipeline) 以app模式运行以下命令: (1)开发模式:RAILS_ENV =开发包exec rake资产:预编译 (2)生产模式:RAILS_ENV =生产包exec rake资产:预编译

G)在您的config / environments /

(1)在development.rb config.action_controller.asset_host =“你的本地主机网址,即YOUR_LOCALHOST_ADDRESS”

(2)在production.rb config.action_controller.asset_host =“http://assets.example.com”/ 您的地址 /

H)最后将样式表与IMGKIT联系起来,如下所示

html_content = "YOUR HTML CONTENT"
kit = IMGKit.new(html_content, height: 900, transparent:true, quality:10) /*YOUR SETTING*/
kit.stylesheets << "#{Rails.root}/public/assets/application.css"
file = kit.to_file(Rails.root + "public/pngs/" + "screenshot.png") /*YOUR IMAGE NAME*/
send_file("#{Rails.root}/public/pngs/screenshot.png", :filename => "screenshot.png", :type => "image/png",:disposition => 'attachment',:streaming=> 'true') /*YOUR ADDRESS WHERE U WANT TO STORE PNG FILE*/

I)重新启动服务器并享受!!!!!

[注意:在每次更改后,请运行assets pipline命令以获取最新的application.css,该文件来自.sccs.erb扩展文件。]