說是使用pdfkit,其實做工作的還是wkhtmltopdf。
一、新建項目
rails new mypdf --skip-bundle
進入項目:cd mypdf,打開Gemfile:vim Gemfile
修改source為https://ruby.taobao.com
添加:gem 'pdfkit'
運行bundle install
二、配置
在項目目錄下的config/initializers里加上pdfkit.rb文件,修改內容為:
PDFKit.configure do |config|
config.wkhtmltopdf = '/path/wkhtmltopdf'
end
config.wkhtmltopdf配置的是wkhtmltopdf的路徑,要確保pdfkit能找到它。
其它的配置請參考:http://wkhtmltopdf.org/usage/wkhtmltopdf.txt,里面的橫杠用下劃線代替。
三、使用
在controller里的相應位置加入:
用渲染的模版內容生pdf:
html = render_to_string(:template => "pdf_template.erb",:layout => false)
kit = PDFKit.new(html)
kit.stylesheets << "#{Rails.root}/app/assets/assets/stylesheets/pdf.css"
#kit.to_pdf # inline PDF
#kit.to_file('/path/pdf.pdf')
send_data(kit.to_pdf, :filename => "mypdf.pdf", :type => "application/pdf")
#render :text => kit.to_pdf
用url的內容生成pdf:
url = "http://www.baidu.com"
kit = PDFKit.new(url)
# kit.stylesheets << "#{Rails.root}/app/assets/assets/stylesheets/pdf.css" # 用url時就不可以用css樣式了。
#kit.to_pdf # inline PDF
#kit.to_file('/path/pdf.pdf')
send_data(kit.to_pdf, :filename => "mypdf.pdf", :type => "application/pdf")
注: kit = PDFKit.new(url, cookie: {"cookie_name"=>"cookie_content"}),如果需要登錄的話,可以用cookie。cookie可以自己獲取。
另外,如果你的頁面里有js需要運行,最好在設置文件里設置如下:
javascript_delay: 1000
它的默認值是200毫秒。把加大一些,以便讓js運行完成。
這樣就可以用了。