rails new app --skip-bundleweb
完成後修改Gemfile文件:vim Gemfilevim
把source 修改爲taobao或者ruby-china的源。ruby
在這個文件里加入:gem 'phantomjs'cookie
而後運行:bundle installsession
這樣項目就新建完成了。app
phantomjs須要單獨下載,若是不下載,這個gem運行的時候會自動下載,可能會比較慢。dom
建立一個controller在頭部加上require 'phantomjs'ui
在format.pdf的代碼塊裏中入以下代碼:url
scheme = "#{request.scheme}" # 獲取協議
url = "#{scheme}://webdomain/path" #這是要生成pdf的頁面url,能夠動態獲取,這裏只作簡單的說明
name = "#{Time.now.to_date.to_s(:db)}_#{Digest::MD5.hexdigest('pdf'+Time.now.to_i.to_s)}.pdf"
path = Rails.root.join("public","download", "#{name}").to_s #生成pdf後存放的路徑
Phantomjs.base_dir = Rails.root.join('public','js', 'phantomjs').to_s # 這裏是下載phantomjs文件的存放路徑,若是不指定這個,它會自動下載phantomjs。rest
https_protocol = "--ignore-ssl-errors=yes" if scheme == "https" # phantomjs的一項配置
Phantomjs.run(https_protocol.to_s, Rails.root.join('public','js','rasterize.js').to_s, url, path, "", request.host, cookies["_your_session"]) #resterize.js存入在public/js下, _your_session是你的項目的session名稱。
send_file(path)
這裏使用的是resterize.js,須要對源碼進行修改:
"use strict";var page = require('webpage').create(), system = require('system'), address, output, size;phantom.addCookie({ 'name' : '_your_session', /* 你的session 名稱 */ 'value' : system.args[5], /* session ,傳入的參數*/ 'domain' : system.args[4], /* 你的域名,傳入的參數 */ 'path' : '/', /* required property */ 'httponly' : true, 'secure' : false, 'expires' : (new Date()).getTime() + (1000 * 60 * 60) /* <-- expires in 1 hour */});if (system.args.length < 3 || system.args.length > 7) { console.log('Usage: rasterize.js URL filename [paperwidth*paperheight|paperformat] [zoom]'); console.log(' paper (pdf output) examples: "5in*7.5in", "10cm*20cm", "A4", "Letter"'); console.log(' image (png/jpg output) examples: "1920px" entire page, window width 1920px'); console.log(' "800px*600px" window, clipped to 800x600'); phantom.exit(1);} else { address = system.args[1]; output = system.args[2]; page.viewportSize = { width: 600, height: 600 }; // if (system.args.length > 4) { // page.zoomFactor = 0.1; // } page.open(address, function (status) { if (status !== 'success') { console.log('Unable to load the address!'); phantom.exit(1); } else { window.setTimeout(function () { page.render(output); phantom.exit(); }, 1000); } });}本例主要是生成pdf,去掉了一些沒用的代碼,加入了addCookie的代碼。