FPDF能支援PDF的中文列印,然而卻存在不少的不如意之處,據我目前的使用,總結出幾點:
1)FPDF提供的Pdf_Chinese字型,將GB這種字型寫入了代碼中,若我們希望引入其他的中文字型,則不能方便地使用
2)FPDF輸出的數字並不美觀,不如Ruport::Formatter::PDF內建的字型
3)FPDF提供的方法並不多,對於一般的報表列印,用的最多的也許是 Cell方法,但如果連一個普通的報表列印都需要能過代碼控制換行、畫直線、寫儲存格,那就太不方便了
Prawn也是呼聲叫高的一種Ruby PDF報表工具,對於它和 FPDF 到底誰更優秀,這就要因人而異了,FPDF是用PHP編寫的PDF庫的移植,而PRAWN則不是 Prawn:使用Ruby產生PDF更簡捷 中有簡單的介紹
下面來看看PRAWN是如何?PDF的列印的(基本的實現參考 Ruby Ruport實踐—簡單報表系統)
一、安裝Prawn
gem install prawn
二、修改enviroment.rb
添加如下引用:
require "prawn"<br />require 'prawn/layout'
三、引入合適的中文字型
Prawn支援外部引入中文字型,例如“楷體”
從C:/Windows/Fonts下將本機支援的字型檔(*.ttf)複製到
%RUBY_HOME%/lib/ruby/gems/1.8/gems/prawn-core-0.8.4/data/fonts
在代碼中通過
@pdf_writer.font"#{::Prawn::BASEDIR}/data/fonts/simkai.ttf"
指定需要引用的字型
四、修改ReportOutputController.rb
替換Pdf<Ruport::Formatter::PDF為如下代碼:
class Ruport::Formatter::PRAWN< Ruport::Formatter::PDF<br /> def pdf_writer<br /> unless @pdf_writer<br /> @pdf_writer = ::Prawn::Document.new<br /> @pdf_writer.font"#{::Prawn::BASEDIR}/data/fonts/simkai.ttf"<br /> end<br /> return @pdf_writer<br /> end<br /> def render_pdf<br /> output<<pdf_writer.render<br /> end<br /> end</p><p> class Pdf<Ruport::Formatter::PRAWN<br /> renders :pdf, :for => ReportOutputController<br /> build :data_sheet do<br /> eval(options[:outputContent])<br /> end<br /> end
五、儲存repoert_templates
對於template_content的內容儲存為如下:
pdf_writer.text ("產品列表",<br />:align=>:center,:size=>15)<br />pdf_writer.image ("public/images/ruport.jpg",<br />:at => [0,730],<br />:height=>50,<br />:width=>100)<br />pheader=%w[類別 名稱 價格]<br />pdata=[]<br />for i in 0..data.length-1 do<br /> temp=[data[i].description,data[i].title,data[i].price.to_s]<br /> pdata[i]=temp<br />end<br />pdf_writer.table (pdata,<br />:font_size => 10,<br />:headers =>pheader,<br />:vertical_padding => 2,<br />:horizontal_padding => 5,<br />:position => :center)
示範效果: