`
wuhuizhong
  • 浏览: 684563 次
  • 性别: Icon_minigender_1
  • 来自: 中山
社区版块
存档分类
最新评论

rails 3 中 生成pdf

    博客分类:
  • ROR
 
阅读更多

基于 wkhtmltopdf (http://code.google.com/p/wkhtmltopdf/) 库的比较常见的有pdfkit 和 wicked_pdf 这2个插件。

pdfkit 配置很简单,适合用于快速给每个页面加上pdf版本输出,样式跟html页面完全一样。

三步实现:

1.设置gem

# HTML+CSS to PDF using wkhtmltopdf

# 官方当前最新版本(0.5.0)有BUG,需要使用一个fork版本

# https://github.com/jdpace/PDFKit/issues/66

# January 10, 2011

# gem "pdfkit", :git => "git://github.com/huerlisi/PDFKit.git"

2. 设置mime

# config/initializers/mime_types.rb

# for pdfkit

Mime::Type.register_alias "application/pdf", :pdf

3.设置middleware

# config/application.rb

config.middleware.use "PDFKit::Middleware", :print_media_type => true

这样访问任何一个页面在url的最后加上.pdf,即可得到一个与html版本内容完全一样的pdf输出。

 

wicked_pdf 的可调整的地方就比较多,比较适合于需要可以任意定制pdf版本页面的需求

跟pdfkit差不多,2-3步可以实现

1. 配置gem

# PDF generator (from HTML) plugin for Ruby on Rails

gem 'wicked_pdf', '0.6.0'

 

2.render,有很多可选参数,其中: show_as_html 这个参数很有用,可以切换为html输出,方便开发时调整页面的样式

# app/controllers/invoices_controller.rb

def show

  show! do |format|

    # 如果模板引擎用的是haml,layout必须使用完整的文件名,如“pdf.html.haml”,不能用简写“pdf”

    format.pdf { render :pdf => "invoice_#{@invoice.id}", :layout => "pdf.html.haml", :show_as_html => params[:debug].present? }

  end

end

 

3.设置layout,不是必须,但一般都会需要定制下页头页尾的。

# app/views/layouts/pdf.html.haml

!!!

%html{:lang => "en", "xml:lang" => "en", :xmlns => "http://www.w3.org/1999/xhtml"}

  %head

    %meta{:content => "text/html; charset=UTF-8", "http-equiv" => "Content-Type"}/

    = wicked_pdf_stylesheet_link_tag "pdf.css"

    = yield :stylesheet

  %body

    #content

      = yield

 

一些tips:

如果要动态为某个action 插入css,需要用它提供的helper: wicked_pdf_stylesheet_link_tag,如为invoics#show插入invoice.css

# app/views/invoices/show.pdf.haml

- content_for :stylesheet, wicked_pdf_stylesheet_link_tag("invoice.css")

= render "invoice.html.haml"


因为使用show_as_html模式会把css/js文件转化成本地路径,因此在wicked_pdf_stylesheet_link_tag中要用完整的文件名。

 

pdfkit 也可以不使用middleware,而使用 format.pdf { render ...}来达到定制的页面内容的目的,参考这里 ,或者直接用一个专门的action如/invoices/123/print 或者/invoices/123/pdf 来做内容定制。

 

 

install wkhtmltopdf on linux

  wget http://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.10.0_rc2-static-amd64.tar.bz2

  tar xvjf wkhtmltopdf-0.10.0_rc2-static-amd64.tar.bz2

  which wkhtmltopdf

  /usr/bin/wkhtmltopdf

 

  # backup the old version

  sudo mv /usr/bin/wkhtmltopdf /usr/bin/wkhtmltopdf.old

  sudo mv wkhtmltopdf-amd64 /usr/bin/wkhtmltopdf

 

  wkhtmltopdf -V

  Name:

    wkhtmltopdf 0.10.0 rc2

 

links:

http://railscasts.com/episodes/220-pdfkit

https://github.com/huerlisi/PDFKit

http://snikt.net/index.php/2010/03/03/generating-pdfs-from-ruby-on-rails

https://github.com/mileszs/wicked_pdf

http://www.ruby-forum.com/topic/218049

分享到:
评论
1 楼 clark1231 2013-03-18  
我照railscast用了下pdfkit,但是css总是加载不起来,照https://github.com/pdfkit/PDFKit/issues/119修改了下,也没起作用。你在使用过程中有遇到这样的问题不?怎么解决的?

相关推荐

    ruby on rails 3 tutorial.pdf

    在Rails中,ERB(Embedded Ruby)模板允许你在HTML中嵌入Ruby代码,动态生成页面内容。 本书还会详细讲解Rails的路由系统,它是应用中URL和控制器动作之间的映射,确保用户请求能够正确地到达目的地。此外,你还将...

    Ruby On Rails中文教材(PDF)

    3. **路由(Routes)**:Rails的路由系统定义了URL与控制器方法之间的映射,它是用户请求与应用交互的关键部分。 4. **ActiveRecord**:这是Rails中的ORM(对象关系映射)库,它允许开发者用Ruby代码操作数据库,...

    RestFul_Rails_Dev_pdf_v_0.1.zip

    本资料“RestFul_Rails_Dev_pdf_v_0.1.zip”包含了《RESTful Rails Development》的翻译版,将深入探讨如何在Rails中实现RESTful的设计模式。 首先,RESTful设计的核心概念是资源(Resources)。在Rails中,资源...

    ruby on rails 敏捷开发,3.1 pdf and epub format

    在Rails 3.1版本中,引入了许多重要更新和改进,使得这个框架更加高效且功能丰富。 首先,让我们深入了解Rails 3.1在资产管道(Asset Pipeline)方面的重要变革。资产管道是一种整合和优化应用程序中CSS、...

    Ruby-RailsErd为Rails应用程序生成实体关系图

    生成的图表通常是PDF或PNG格式,方便在各种环境中查看和分享。 Rails Erd还支持一些可选参数来定制生成的ERD,例如: - `--attributes`: 包含模型的属性信息。 - `--file`: 指定输出文件的路径和名称。 - `--...

    在rails中 使用RSpec生产CHM文档

    标题 "在Rails中使用RSpec生产CHM文档" 暗示了这个话题是关于如何在Ruby on Rails(简称Rails)框架中使用RSpec测试工具来创建帮助文档,特别是以CHM(Microsoft Compiled HTML Help)格式。CHM文件是一种常见的...

    rails框架指南.pdf

    Rails框架中,各个组件的位置和命名通常遵循一定的标准模式。比如,模型(Model)通常放置在`app/models`目录中,控制器(Controller)放置在`app/controllers`目录中,视图(View)则放在`app/views`目录下相应控制...

    使用RSpec 测试Rails 程序.pdf

    1. **Gemfile配置**:在Rails项目的`Gemfile`中添加`gem 'rspec-rails'`。 2. **测试数据库配置**:确保`.env`或`database.yml`文件中包含用于测试的数据库配置。 3. **RSpec配置**:编辑`spec_helper.rb`来配置...

    java基础之rails命令大全.pdf

    - `rake doc:rails`: 生成 Rails 框架本身的 API 文档。 - `rake doc:plugins`: 为已安装的所有插件生成文档。 - **文档清理**: - `rake doc:clobber_app`: 删除应用程序的 API 文档。 - `rake doc:clobber_...

    Ruby on Rails的PDF生成器(来自HTML)插件-Ruby开发

    Wicked PDF Wicked PDF Ruby on Rails的PDF生成插件Wicked PDF使用shell实用程序wkhtmltopdf从HTML向用户提供PDF文件。 换句话说,而不是处理某种PDF生成的DSL Wicked PDF Ruby on Rails的PDF生成插件Wicked PDF使用...

    rails22cn.pdf

    - **内容概述**:本书深入探讨了 Ruby on Rails 框架的设计原理及其在实际应用中的最佳实践。 - **《Design Patterns in Ruby》** - **作者**:Russ Olsen - **ISBN**:9780321490452 - **出版年份**:2008 - ...

    wicked_pdf:Ruby on Rails的PDF生成器(来自HTML)插件

    Ruby on Rails的PDF生成插件 Wicked PDF使用shell实用程序从HTML向用户提供PDF文件。 换句话说,您无需像通常那样处理PDF生成的DSL,而是只需像通常那样编写HTML视图,然后让Wicked PDF处理繁琐的工作。 Wicked PDF...

    Ruby+for+Rails

    通过阅读"Ruby for Rails.pdf"和"Ruby on Rails 初体验.ppt",你可以深入了解Ruby on Rails的各个方面,包括其哲学、核心概念以及如何构建实际的Web应用程序。随着对Rails的理解加深,你将能够高效地开发出功能丰富...

    Rails 4 Test Prescriptions.pdf

    1. **测试在 Rails 应用中的重要性** 2. **选择合适的测试策略** 3. **理解模拟(Mocking)与存根(Stubbing)的区别** 4. **构建高效测试套件的最佳实践** 5. **Rails 4 特定的测试技术和工具** #### 测试的重要性 ...

    Agile Web Development with Rails (PDF)

    ActionPack是Rails框架中的另一个关键组件,它包含了处理HTTP请求和响应的所有工具,以及生成HTML视图的模板引擎。ActionPack使得开发者能够轻松地创建和管理Web页面,实现动态内容的生成。 #### 5. 安装与配置 书...

    ruby on rails最新版

    在压缩包子文件的文件名称列表中仅列出“rails”,这可能是Rails框架的核心库文件,或者是包含了Rails框架的安装包。在实际的开发环境中,这样的压缩包通常还会包含数据库连接器(如pg或mysql2)、开发工具(如...

    Ruby on Rails Guides_ A Guide to Testing Rails Applications.pdf

    在《Ruby on Rails Guides_ A Guide to Testing Rails Applications.pdf》这一指南中,开篇即强调了为Rails应用编写测试的重要性。Rails框架设计之初就充分考虑了测试的需求,它在后台自动生成骨架测试代码,当你...

    Ruby on Rails Bible.pdf

    根据提供的文件信息,“Ruby on Rails Bible.pdf”这本书涵盖了Ruby on Rails框架的基础知识、核心概念以及高级功能等内容。接下来,我们将从书中的章节标题入手,详细阐述各章节所涉及的重要知识点。 ### 引言 ...

    中文版rails教程

    1. **生成资源(Generating Resources)**:使用`rails generate`命令可以快速创建模型、控制器、视图等文件,如`rails generate scaffold Post title:string content:text`会生成一个名为Post的资源,包含相关的...

    ruby on rails社区网站开发源码

    3. **数据库配置**:Rails默认使用SQLite数据库,但也可以配置为使用MySQL、PostgreSQL等其他数据库。在`config/database.yml`文件中进行配置。 4. **模型(Model)**:模型代表数据和业务逻辑,一般与数据库表对应...

Global site tag (gtag.js) - Google Analytics