【发布时间】:2015-02-02 13:12:44
【问题描述】:
谁能一步一步或举例说明如何在rails中安装和使用pdfkit来呈现html中的图像?
我已经安装了pdfkit 和wkhtmltopdf-binary。当我这样做时
require 'pdfkit'
kit = PDFKit.new('http://google.com')
gpdf = kit.to_file('/home/blackat/Desktop/gpdf.pdf')
它将完美地生成一个谷歌主页的pdf。所以这意味着pdfkit在我的系统中正确安装(如果有错误请纠正我)。
正如railcast 中提到的,我做了所有的更改。
gem 'pdfkit'# 在我的 Gemfile 中bundle install-
require 'pdfkit'# 在 application.rb 中 -
config.middleware.use "PDFKit::Middleware", :print_media_type => true#in application.rb
为了检查天气是否有效,我在控制器中做了一些解决方法 像这样
html_data = render_to_string :layout => false
html_file_path = "demo.html"
pdf_file_path = "demo.pdf"
f = File.open(html_file_path, "w")
f.write(html_data)
f.close
kit = PDFKit.new(html_data,:page_size => 'Letter')
pdf_file = kit.to_file(pdf_file_path)
当我从 html.erb 模板中删除图像时,会生成一个 pdf。如果我在我的 erb 模板中指定任何图像,或者如果我在浏览器中包含“.pdf”,则执行会终身挂起。
我哪里做错了? 有什么博客/例子可以参考吗?
“wkhtmltopdf”是否安装正确?
请帮助我。我从 2 周开始尝试这个。
我正在使用 rails '3.2.11' 和红宝石 1.9.3
提前致谢。
【问题讨论】:
-
您正在从本地 HTML 文件生成 PDF。确保您使用的是绝对路径,以便 wkhtmltopdf 可以找到您的样式表和图像。 (在浏览器中打开
demo.html以查看缺少的内容) -
@Stefan 我使用了简单的内联 CSS(我认为这不会爆炸)。我将尝试使用图像的绝对路径。
-
@Stefan 我已经更改了我的图像路径,就像
<%= image_tag("/images/myImage.png")%>这样在我的视图中呈现图像。但是当我使用render_to_string转换它时,它只返回<img alt="MyImage" src="/images/myImage.jpg" />我怎么知道在做render_to_string时采用绝对路径? -
@Stefan 如果我用#{Rails.root} 附加图像标签 pdfkit 挂起。
-
IIRC,你可以使用
image_url来计算完整的URL,即image_tag(image_url('file.png'))。以下是我的处理方法:(1) 生成本地 HTML 文件demo.html(2) 在浏览器中打开文件并修复所有错误 (3) 使用命令行工具从该文件生成 PDF:wkhtmltopdf demo.html demo.pdf( 4) 启动 IRB 并手动调用 PDFKit (5) 将该代码插入到您的控制器中。
标签: ruby-on-rails ruby ruby-on-rails-3 pdf pdfkit