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

來源:互聯網
上載者:User

Ruport中pdf_writer對中文的支援並不好,輸出的中文顯示的是亂碼。上網查了很多資料,也沒有找到好的解決方案,無奈只好查看原始碼,到底為什麼Ruport內建的PDF工具不支援中文輸出。

Ruport::Formatter::PDF::Writer中找到以下代碼

   metrics = load_font_metrics(font)

   metrics = PDF::Writer::FontMetrics.open(font)

   PDF::Writer::FontMetrics::METRICS_PATH = [ File.join(File.dirname(File.expand_path(__FILE__)), 'fonts') ]

 

原來METRICS_PATH=%RUBY_HOME%/lib/ruby/gems/1.8/gems/pdf-writer-1.1.8/lib/pdf/writer/fonts

在此路徑下存在的afm字型檔均不支援中文,於是開始將目標轉向添加一個支援中文的 *.afm字型檔。無奈檔案找到了,放到該路徑下,運行竟報錯了(也許是PDF_WRITER不支援該檔案)

 

放棄了此方法,把目標轉向FPDF

1)下載fpdf http://download.csdn.net/source/5608

2)解壓到Rails項目的lib下

3)按Ruby Roport實踐—簡單報表系統完成Ruport應用

4)接下來,修改ReportOutputController.rb

將 class Ruport::Formatter::PDF修改為如下內容

class Ruport::Formatter::FPDF < Ruport::Formatter::PDF<br /> def pdf_writer<br /> unless @pdf_writer<br /> @pdf_writer = ::FPDF.new<br /> @pdf_writer.extend(PDF_Chinese)<br /> @pdf_writer.AddPage<br /> @pdf_writer.AddGBFont<br /> @pdf_writer.SetFont('GB','', options[:font_size] || 16)<br /> end<br /> return @pdf_writer<br /> end</p><p> def render_pdf<br /> output << pdf_writer.Output<br /> end</p><p>end<br /> class Pdf < Ruport::Formatter::FPDF<br /> renders :pdf, :for => BaseSqlController<br /> build :data_sheet do<br /> eval(options[:pdfContent])<br /> end<br /> end

 

5)修改資料表report_templates中template_content內容為

pdf_writer.SetFont('GB','B',10)<br /> pdf_writer.SetLeftMargin(80)<br /> pdf_writer.Cell(40,10,Iconv.conv('GB2312','UTF-8','產品報表2'))<br /> pdf_writer.Ln()<br /> pdf_writer.SetFont('GB','',8)<br /> pdf_writer.Cell(40,5,Iconv.conv('GB2312','UTF-8','名稱'),1,0,'C')<br /> pdf_writer.Cell(40,5,Iconv.conv('GB2312','UTF-8','類別'),1,0,'C')<br /> pdf_writer.Cell(40,5,Iconv.conv('GB2312','UTF-8','價格'),1,0,'C')<br /> pdf_writer.Ln()<br /> data.each do |p|<br /> pdf_writer.Cell(40,5,Iconv.conv('GB2312','UTF-8',p.title),1)<br /> pdf_writer.Cell(40,5,Iconv.conv('GB2312','UTF-8',p.description),1)<br /> pdf_writer.Cell(40,5,p.price.to_s,1)<br /> pdf_writer.Ln()<br /> end

 

報表效果:

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.