生成支持中文的的pdf

[color=olive]             生成 支持 中文的的 pdf
    
    最近有家 家具公司 叫我开发一个 B/S模式的管理软件,我使用的 ruby on rails
  
  大家都知道 管理软件 使用频率最大 的 是 报表的打印 生成 excel表等操作,我对于delphi比较精通,delphi做起这些工作 就是把控件设置一下,属性设置,十几分钟就搞定,但是公司要求B/S模式.所以 就用 ruby喽 ,ruby on rails 做表格报表就不是那么简单,我google了很久找到一个 ruby report 的 插件,这个插件很好使用,很快我就能把报表打印出来,保存为csv格式有 excel打开,很好使用.但是很快就发现不支持中文,我本想在插件的源代码里面修改支持中文,结果折腾了半天还是不行,算了还是使用其他方法把.这个 ruport 不支持中文问的帖子不少可是没有几个人能给与解答的.如果想打印报表还是使用这个方法吧,生成的也是 pdf格式的.
   
  首先下载,这个文件 http://brian.imxcc.com/fpdf/rfpdf153c.tar.gz. Extract  ,
解压后把 fpdf.br的文件放在lib目录下面,在controller中调用就是了,下面的代码不用做任何修改,你就可以直接使用.

 app/controllers/reports_controller.rb:

class ReportsController < ApplicationController

  require 'fpdf'
  require 'chinese'

  def index
  end

  def pdf_report

    # Data
    col_sizes = [40,20,20,20]
       data = [['编号','名称','邮箱','地址'],
    ['编号101','笋凤城','cheng','北京'],
    ['编号 5A','97','100','南昌'],
    ['编号 2','98','91','石家庄'],
    ['编号','89','84','九江'],
    ['编号 110','91','81','廊坊']]

    send_data pdf_report_card(col_sizes, data),
              :filename => "report.pdf", 
              :type => "application/pdf" 
  end

  private
    def pdf_report_card(col_sizes, data)

      pdf = FPDF.new

      pdf.AddPage
      ic = Iconv.new("GB2312","utf-8")
      pdf.AddPage
      pdf.AddGBFont   
      pdf.SetFont('GB','',18)
      pdf.SetFontSize(10)
      pdf.SetFillColor(50,50,50)
      pdf.SetTextColor(255)
      pdf.SetDrawColor(0)
      pdf.SetLineWidth(0.2)

      # Table Header
      i = 0   
      col_sizes.each do
         pdf.Cell(col_sizes[i],7,ic.iconv(data[0][i]),1,0,'C',1)
        i += 1
      end
      pdf.Ln()

      pdf.SetFillColor(218,206,255)
      pdf.SetTextColor(0)
      pdf.SetFont('GB')

      fill = 0
      # Table Data
      data[1..-1].each do |row|
         pdf.Cell(col_sizes[0],6,ic.iconv(row[0]),'LR',0,'L',fill)
         pdf.Cell(col_sizes[1],6,ic.iconv(row[1]),'LR',0,'L',fill)
         pdf.Cell(col_sizes[2],6,ic.iconv(row[2]),'LR',0,'L',fill)
         pdf.Cell(col_sizes[3],6,ic.iconv(row[3]),'LR',0,'C',fill)
          pdf.Ln()
          fill = (fill-1).abs % 2
      end

      # Bottom Table Border
      total = 0
      col_sizes.each {|x| total += x}
      pdf.Cell(total,0,'','T');

      pdf.Output
    end
end

在你想打印的地方写上这个链接就 OK了.
app/views/reports/index.rhtml:

<h1>Report</h1>

<%= link_to 'Make PDF', :action => 'pdf_report' %>

当你下载这个插件的时候你重启一下 服务器. 这个方法绝对可以解决 不支持中文的问题.

对了你要是 重启服务器的时候,在 chinese.br 的
   def GetMBStringWidth(s)
        # Multi-byte version of GetStringWidth()
        l=0
        cw=@CurrentFont['cw']
        nb=s.length
        i=0
        while i<nb
            c=s[i]
#            pp c
#            if c.ord < 128    #这是源代码 他会报错 没有ord方法 那你就干脆不用
             if c < 128
                l += cw[c]
                i += 1
            else
                l += 1000
                i += 2
            end
        end
        l*@FontSize/1000
    end

一定要记住  "解压后把example目录外的文件放到项目的lib目录下 "

如果有什么问题,可以在这里留言,这个我折腾了好几个小时,算是弄明白了,希望能给同行同仁带来方便.
[/color]
如果你们下不到的话,就是用下面我的附加中已经全部整理好的文件了.下载了直接使用就是了.

你可能感兴趣的:(Excel,C#,Ruby,Rails,Delphi)