[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
分享到:
相关推荐
在项目中遇到PHP生成PDF的工作 寻找再三,终于找到可用的代码,现分析整理打包共享给大家 chinese-unicode.php -----支持简体中文的测试chinese文件 test-unicode.php -----测试简体繁体都可以用的调试文件 fpdf....
总之,通过适当地修改和注册字体,我们可以使iText库在Android环境下支持中文PDF的生成。这是一个关键的技巧,对于那些需要在应用中创建多语言文档的开发者来说尤其有用。记住,处理字体和编码问题时要小心,以确保...
在这个特定的案例中,我们关注的是一个经过修改的Delphi PDF生成控件,它已经解决了中文显示的乱码问题。这个控件的名称为llPDFLib,版本为v3.6,并且包含了完整的源代码,这对于开发者来说非常有价值,因为源码可以...
使用Swagger2Markup、asciidoctor-maven-plugin和asciidoctorj-pdf插件能生成pdf格式的文档,但是对于中文支持太差了,很多中文字符是空白。这个jar包可以解决这个问题。 在pom.xml中加入 <groupId>org....
确保下载的是支持中文的版本,如libharu_CNS,这个名称表明它包含了对中文的支持。解压后,将头文件放入你的项目包含路径,将库文件添加到链接器设置中。 在Qt项目中,你需在.pro文件中添加libharu的相关库链接。...
但是,iText默认并不支持中文字符集,因此我们需要引入iTextAsian.jar和iTextAsianCmaps.jar这两个扩展包。iTextAsian.jar包含了对亚洲文字(包括中文)的支持,而iTextAsianCmaps.jar则包含了字符映射表,使得iText...
Java是一种广泛使用的跨平台编程语言,拥有丰富的类库和框架,支持各种应用程序的开发,包括生成PDF文档。在Java中,我们可以使用像iText这样的第三方库来简化PDF的创建过程。 iText是一个开源Java库,它提供了一...
经过大牛修改后的core-renderer.jar,当把HTML转化成PDF时支持table的td中的中文、英文和数字自动换行,table必须添加样式table-layout:fixed;word-break:break-strict;
iTextAsian.jar是针对亚洲语言(如中文)的支持包,使得在PDF中正确显示和处理中文字符成为可能。开发者可以通过创建Document对象,添加Paragraph、Table等元素,设置字体和样式,然后输出到OutputStream来构建PDF...
在生成中文PDF时,Swagger2会调用Asciidoctor PDF进行转换,此时就需要确保系统中已经安装了支持中文的字体。 中文字体是解决中文显示问题的关键。PDF格式支持多种字体,但不是所有字体都包含中文字符集。因此,当...
易语言PDF制作支持库是一款专为易语言编程环境设计的扩展工具,它允许开发者通过编程方式轻松创建PDF文档。PDF(Portable Document Format)格式是一种通用的文件格式,广泛用于电子文档的交换,因为它可以保留原始...
基础的iText.jar提供了基本的PDF生成功能,但如果你需要处理中文、日文或韩文字符,还需下载并引入iTextAsian.jar包。 2. **环境配置**: 在Java项目中,将下载的.jar文件添加到项目的类路径中,以便在代码中引用...
本文将深入探讨如何使用Java实现PDF的生成,并特别关注支持中文字符的处理。 首先,我们需要一个库来帮助我们处理PDF的生成。在Java世界中,iText和Apache PDFBox是两个非常流行的库。对于本例,考虑到"JAVA PDF"的...
FPDF是一个PHP类,它允许纯PHP生成PDF文件,也就是说没有使用PDFlib库。FPDF中的F意味着自由:你可以使用它的任何一种使用和修改它以适合你的需要。 FPDF还有其它优点:高水平的功能。这里是一个列表,它的主要特点...
由于描述中提到的`iTextAsian.jar`是针对亚洲语言(如中文)优化的版本,这意味着这个例子可能包含了处理中文字符集的支持。通常,我们需要在代码中引入iText的类,比如`com.itextpdf.text.Document`,`...
1. **设置字体和编码**:确保使用支持中文的字体,如SimSun、Arial Unicode MS等,并正确设置PDF的编码为UTF-8。Itext中的`Font`类可以用来创建字体对象,通过`setEncoding()`方法设置编码,`setBaseFont()`方法设置...
在IT行业中,生成PDF...通过正确处理图片路径和使用支持中文的字体,我们可以生成包含丰富图片和多语言内容的专业PDF文档。在实际操作中,开发者需要结合具体的项目需求和环境进行适当的调整,以确保最佳的转换效果。
8. **解决打印问题**:在打印PDF时,确保打印机驱动程序也支持中文字符。有时问题可能出现在打印环节,而非创建环节,所以打印设置同样关键。 通过以上步骤,你应该能够成功创建和打印含有中文字符的PDF文件,避免...