`
sunfengcheng
  • 浏览: 183871 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

生成支持中文的的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]
如果你们下不到的话,就是用下面我的附加中已经全部整理好的文件了.下载了直接使用就是了.
  • 大小: 16.9 KB
  • 大小: 16.3 KB
4
2
分享到:
评论
4 楼 seemoon 2008-11-17  
好。excel做报表可以用spreadsheet。
3 楼 dayang2001911 2008-10-20  
学习学习  
2 楼 sunfengcheng 2008-10-13  
呵呵! redmine 没有使用过, ruby 打印报表这是比较麻烦!
1 楼 chaoqun2003 2008-10-13  
redmine中也是用的rfpdf,不过由于那个项目没人更新,redmine似乎自己改过,他做的稍微完善些,可以支持多语言

相关推荐

    PHP生成PDF完美支持中文简体和繁体

    在项目中遇到PHP生成PDF的工作 寻找再三,终于找到可用的代码,现分析整理打包共享给大家 chinese-unicode.php -----支持简体中文的测试chinese文件 test-unicode.php -----测试简体繁体都可以用的调试文件 fpdf....

    delphi下pdf生成控件,已经进行修改,支持中文显示,完整源码

    在这个特定的案例中,我们关注的是一个经过修改的Delphi PDF生成控件,它已经解决了中文显示的乱码问题。这个控件的名称为llPDFLib,版本为v3.6,并且包含了完整的源代码,这对于开发者来说非常有价值,因为源码可以...

    Android用itext库生成中文PDF文档

    总之,通过适当地修改和注册字体,我们可以使iText库在Android环境下支持中文PDF的生成。这是一个关键的技巧,对于那些需要在应用中创建多语言文档的开发者来说尤其有用。记住,处理字体和编码问题时要小心,以确保...

    asciidoctorj-pdf支持中文生成

    使用Swagger2Markup、asciidoctor-maven-plugin和asciidoctorj-pdf插件能生成pdf格式的文档,但是对于中文支持太差了,很多中文字符是空白。这个jar包可以解决这个问题。 在pom.xml中加入 &lt;groupId&gt;org....

    Qt上位机利用libharu库生成pdf,可生成中文

    确保下载的是支持中文的版本,如libharu_CNS,这个名称表明它包含了对中文的支持。解压后,将头文件放入你的项目包含路径,将库文件添加到链接器设置中。 在Qt项目中,你需在.pro文件中添加libharu的相关库链接。...

    Java生成PDF完整示例,解决中文乱码

    但是,iText默认并不支持中文字符集,因此我们需要引入iTextAsian.jar和iTextAsianCmaps.jar这两个扩展包。iTextAsian.jar包含了对亚洲文字(包括中文)的支持,而iTextAsianCmaps.jar则包含了字符映射表,使得iText...

    java生成PDF字体库包+PDF包亲测成功

    Java是一种广泛使用的跨平台编程语言,拥有丰富的类库和框架,支持各种应用程序的开发,包括生成PDF文档。在Java中,我们可以使用像iText这样的第三方库来简化PDF的创建过程。 iText是一个开源Java库,它提供了一...

    IText Html生成PDF支持中文、英文和数字换行

    经过大牛修改后的core-renderer.jar,当把HTML转化成PDF时支持table的td中的中文、英文和数字自动换行,table必须添加样式table-layout:fixed;word-break:break-strict;

    SpringMVC:生成Excel和PDF

    iTextAsian.jar是针对亚洲语言(如中文)的支持包,使得在PDF中正确显示和处理中文字符成为可能。开发者可以通过创建Document对象,添加Paragraph、Table等元素,设置字体和样式,然后输出到OutputStream来构建PDF...

    asciidoctor-pdf生成pdf文件时需要的中文字体文件

    在生成中文PDF时,Swagger2会调用Asciidoctor PDF进行转换,此时就需要确保系统中已经安装了支持中文的字体。 中文字体是解决中文显示问题的关键。PDF格式支持多种字体,但不是所有字体都包含中文字符集。因此,当...

    flying-saucer-pdf 生成pdf解决图片问题 解决中文问题

    在IT行业中,生成PDF...通过正确处理图片路径和使用支持中文的字体,我们可以生成包含丰富图片和多语言内容的专业PDF文档。在实际操作中,开发者需要结合具体的项目需求和环境进行适当的调整,以确保最佳的转换效果。

    使用iText生成PDF.doc

    基础的iText.jar提供了基本的PDF生成功能,但如果你需要处理中文、日文或韩文字符,还需下载并引入iTextAsian.jar包。 2. **环境配置**: 在Java项目中,将下载的.jar文件添加到项目的类路径中,以便在代码中引用...

    易语言 pdf 制作支持库

    易语言PDF制作支持库是一款专为易语言编程环境设计的扩展工具,它允许开发者通过编程方式轻松创建PDF文档。PDF(Portable Document Format)格式是一种通用的文件格式,广泛用于电子文档的交换,因为它可以保留原始...

    JAVA生成PDF,支持中文

    本文将深入探讨如何使用Java实现PDF的生成,并特别关注支持中文字符的处理。 首先,我们需要一个库来帮助我们处理PDF的生成。在Java世界中,iText和Apache PDFBox是两个非常流行的库。对于本例,考虑到"JAVA PDF"的...

    解决Itext生成PDF中文不换行的jar

    1. **设置字体和编码**:确保使用支持中文的字体,如SimSun、Arial Unicode MS等,并正确设置PDF的编码为UTF-8。Itext中的`Font`类可以用来创建字体对象,通过`setEncoding()`方法设置编码,`setBaseFont()`方法设置...

    FPDF,php生成PDF

    FPDF是一个PHP类,它允许纯PHP生成PDF文件,也就是说没有使用PDFlib库。FPDF中的F意味着自由:你可以使用它的任何一种使用和修改它以适合你的需要。 FPDF还有其它优点:高水平的功能。这里是一个列表,它的主要特点...

    java生成pdf

    由于描述中提到的`iTextAsian.jar`是针对亚洲语言(如中文)优化的版本,这意味着这个例子可能包含了处理中文字符集的支持。通常,我们需要在代码中引入iText的类,比如`com.itextpdf.text.Document`,`...

    pdf 创建生成 pdf打印 中文不乱码 亲测

    8. **解决打印问题**:在打印PDF时,确保打印机驱动程序也支持中文字符。有时问题可能出现在打印环节,而非创建环节,所以打印设置同样关键。 通过以上步骤,你应该能够成功创建和打印含有中文字符的PDF文件,避免...

Global site tag (gtag.js) - Google Analytics