字体: | 推荐给好友 上一篇 | 下一篇

集成RFPDF软件包到中文Rails框架应用软件-Ruby开发者

发布: 2007-8-10 10:15 | 作者: skyover | 来源: | 查看: 28次

  生成动态的pdf文件是企业应用软件的一个必备的功能。虽然在Rails框架应用软件中实现这一功能方法是相对地丰富[ 1 ]。但是对于中文支持的软件却很有限,而相关的技术文档更是稀少。本文将说明如何在Rails框架应用软件中动态地生成的中文pdf文件及其如何有效地集成软件包RFPDF到Rails框架应用软件。我们将分两部分说明这些内容。这个问题常常使得我们伤透脑筋,相信本文能够给你带来愉快的心情。本文需要的软件Ruby语言版本1.8.6Rails框架版本1.2.3上述软件相关的详细安装方法说明数据库Sqlite3 Windows安装方法说明 和 Ubuntu安装方法说明软件包RFPDF作为Rails插件:RailsRFPDF插件

  软件包 RFPDF 的全称是Ruby FPDF。FPDF 是PHP语言的软件包。而Ruby FPDF软件包是纯Ruby语言类似的实现,所以你可以使用相关的 FPDF技术手册 。

  通过下面的链接,我们可以下载软件包RFPDF:

http://zeropluszero.com/software/fpdf/rfpdf153f.tar.gz

在解压它之后,在该软件包中我们需要下面五个文件:

bookmark.rb

chinese.rb

fpdf_eps.rb

fpdf.rb

makefont.rb

在Rails

框架应用软件的根目录下,我们创建两个目录vendor/plugins/railsrfpdf/ 和

vendor/plugins/railsrfpdf/lib,把上面五个文件存放到后面的一个目录下,而在前面的目录下创建一个Ruby语言文件

init.rb,其内容是:

require 'fpdf'

require 'chinese'

require 'bookmark'

require 'fpdf_eps'

或者简单地安装方法如下命令:

ruby script/plugin install http://cnruby.googlecode.com/svn/trunk/rails-projects/infoq_rfpdf/vendor/plugins/railsrfpdf/一个具体Rails框架实例

  创建一个Rails框架应用软件infoq_rfpdf,并且按照上面的说明把RFPDF软件包作为Rails框架的插件安装到该应用软件中。下面利用Rails框架的迁移技术(Migration[ 2 ]),生成一个数据库infoq_rfpdf.db和一个表pages,该表的字段是id和name。在我们进行了相关文件的编辑工作之后,我们执行下面的命令,这样形成了一个在Rails框架应用软件的根目录下新的数据库文件:

rake db:migrate

  为了可以访问我们的动态pdf文件,在Rails框架应用软件的环境配置文件environment.rb中需要增加下面的一行代码到该文件中:

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

 

 接着来利用Rails框架自动生成代码技术,产生基于REST技术的相关代码,其中需要完成最重要的是控制器代码。我们修改控制器文件

pages_controller.rb,在该文件的方法show中,把下面的代码替换进去,前面三行和最后一行都是已经存在的。这是动态生成一个中文

pdf文件最基本的代码。其中类Iconv 的作用是在各种字符代码体系之间进行字符串转换。

respond_to do |format|

format.html # show.rhtml

format.xml { render :xml => @page.to_xml }

format.pdf do

@time = Time.now.strftime("%y%m%d%H%M%S")

pdf = FPDF.new

pdf.extend(PDF_Chinese)

pdf.AddPage

ic = Iconv.new('GB2312', 'UTF-8')

pdf.AddGBFont("仿宋",ic.iconv("仿宋_GB2312"))

pdf.SetFont("仿宋",'B',18)

pdf.Cell(40,10,ic.iconv("#{@page.name}"))

send_data pdf.Output, :filename => "#{@page.id}-#{@time}.pdf", :type => "application/pdf"

end

end

为了能够输入我们表pages的字段name的内容,我们把页面new.rhtml增加输入框代码。在我们启动网络服务器之后,打开浏览器,并且按照下面给定的网址:

http://localhost:3000/pages/new

输入“世界,您好!”。再根据下面pdf文件资源的网址,我们将看到如下图所示的结果:

http://localhost:3000/pages/1.pdf

下面的内容是上面实例的完整命令以及该实例的完整代码下载链接。

rails infoq_rfpdf

cd infoq_rfpdf

ruby script/plugin install http://cnruby.googlecode.com/svn/trunk/rails-projects/infoq_rfpdf/vendor/plugins/railsrfpdf/

vi config/environment.rb

vi config/database.yml

ruby script/generate scaffold_resource Page

vi db/migrate/001_create_pages.rb

vi app/controllers/pages_controller.rb

vi app/views/pages/new.rhtml

ruby script/server

http://localhost:3000/pages/new

http://localhost:3000/pages/1.pdf

该实例代码的Google代码库链接:

svn co http://cnruby.googlecode.com/svn/trunk/rails-projects/infoq_rfpdf后记

  软件包RFPDF除了对中文有很好的支持以外,还有三个主要特点:一是使用比较简单;二是不使用Adobe Font Metrics文件;三是能够很好利用你自己的中文字库。关于FPDF也有很好的技术文档,这些内容基本上适用于Ruby FPDF软

件包。通过上面的实例,我们看到,把RFPDF软件包集成到Rails框架作为一个我们命名为RailsRFPDF插件,能够充分地利用该框架的REST

技术和它们相互结合的流技术,使得我们生成动态的pdf文件十分容易、自然和简洁。下一部分将完善我们的RailsRFPDF插件的功能,把控制器代码变

成为一个模板文件,这是Rails框架插件 railspdfplugin 的重要思想。

我来说两句

内容:

验证:

发表评论

 

评分:0

我来说两句

seccode