ruby版fpdf的两处bug修改

阅读更多

前一段时间有一个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')

你可能感兴趣的:(Ruby,C,C++,C#)