Ruby Ruport实践—中文PDF报表之PRAWN

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" 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 def pdf_writer unless @pdf_writer @pdf_writer = ::Prawn::Document.new @pdf_writer.font"#{::Prawn::BASEDIR}/data/fonts/simkai.ttf" end return @pdf_writer end def render_pdf output<<pdf_writer.render end end class Pdf<Ruport::Formatter::PRAWN renders :pdf, :for => ReportOutputController build :data_sheet do eval(options[:outputContent]) end end

五、保存repoert_templates

对于template_content的内容保存为如下:

pdf_writer.text ("产品列表", :align=>:center,:size=>15) pdf_writer.image ("public/images/ruport.jpg", :at => [0,730], :height=>50, :width=>100) pheader=%w[类别 名称 价格] pdata=[] for i in 0..data.length-1 do temp=[data[i].description,data[i].title,data[i].price.to_s] pdata[i]=temp end pdf_writer.table (pdata, :font_size => 10, :headers =>pheader, :vertical_padding => 2, :horizontal_padding => 5, :position => :center)

演示效果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值