生成动态的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 的重要思想。
我来说两句
内容:
验证:
发表评论