论坛首页 编程语言技术论坛

ruby版fpdf的两处bug修改

浏览 2524 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-09-11  

前一段时间有一个ROR的小项目,需要输出PDF文件,于是到网上搜了一圈儿,最后选定了ruby版的fpdf(1.53d),特点:短小,实用。
但是使用过程中也碰到了一些小问题。中文问题,如果使用'GB'字体,中文可以正常显示,但是如果混入了数字或英文,格式很难看。
我发现在chinese.rb中还有一种叫'GB-hw'的字体,拿来一试,效果很好,只是chinese.rb中有两处bug需要修改。
第一处在87行后追加 cw = {},第二处在113行,原文是 l += cw[c],改成 l += cw[c.chr]就可以了。
再举一个使用的例子,首先在app\models目录下建一个gpdf.rb文件用来写页头和页脚的内容。
 
class Gpdf < FPDF

  attr_accessor :title

  # Page header
  def Header

    ic = Iconv.new('GBK', 'UTF-8')
    # GB-hw bold 16
    SetFont('GB-hw','',16)
    # Title
    Cell(0, 10, ic.iconv(@title), 0, 0, 'C')

    # Line break
    Ln(12)
  end

  # Page footer
  def Footer
    # Position at 1.5 cm from bottom
    SetY(-15)
    ic = Iconv.new('GBK', 'UTF-8')
    # GB-hw italic 8
    SetFont('GB-hw','',8)
    # Page number
    Cell(0, 10, ic.iconv('页 ') + PageNo().to_s + '/{nb}', 0, 0, 'C')
  end
end

然后在Controller里像下面这么用就可以了。

      pdf = Gpdf.new
      pdf.title = '销售产品'
      pdf.extend(PDF_Chinese)
      pdf.AddGBhwFont
      pdf.AliasNbPages
      pdf.AddPage
      ic = Iconv.new('GBK', 'UTF-8')
      pdf.SetFont('GB-hw','',10)
      pdf.Cell(55, 7, ic.iconv('金额123'), 1, 0, 'C')

   发表时间:2008-09-12  
我推荐你试试Prawn,在我看来,是最好用的,暂时,其原来有些对中文自动换行的处理不是很好,我提给作者已经修复了。

参考我当时写的:
Prawn:Ruby生成PDF更简捷的选择
http://iceskysl.1sters.com/?action=show&id=355
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics