Ruby Ruport實踐—中文PDF報表之PRAWN

來源:互聯網
上載者:User

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)

 

示範效果:

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.