利用iTextSharp把DataTable导出为PDF和RTF(Rich Text Format)文件
相信每个业务系统都有报表输出的需要,一般采用第三方报表工具,如水晶报表等等。我们也可以直接采用PDF生成类库类实现,不过代码要写多些。
使用.NET开发的生成PDF文件的类库不少,我之前也介绍过开源代码2004/1220-PDF格式/文件相关。其中最具有代表性的,我认为是iTextSharp,它来自JAVA开发的iText,已经相当稳定了,同样移植自iText的iTextDotNet(J#),但我偏好C#,所以这次采用iTextSharp。
相比其它PDF生成类库,iTextSharp有一个优势:它还能生成RTF(Rich Text Format,一些人翻译作富文本,这种是Windows的写字板专用的,也可以给Office Word正确识别和打开)、XML、HTML和Markup。而且代码非常类似,差别就在于Writer类型不一样,足见作者对OO的理解和掌握能力;
我的需求很简单,把一个DataTable(DataSet也可)导出为一个PDF文件。大家可以想像到:这个“映射”是很直接的,因为DataTable的Rows和Columns就对应PDF中的Cells(Rows)。所以可以估计,这个代码也就2个循环,10行代码左右。
关键点在于:中文的支持。iTextSharp支持中文,但来得不直接,要通过BaseFont.CreateFont()来实现:
BaseFontbaseFont=
BaseFont.CreateFont(
"C:\\WINDOWS\\FONTS\\SIMHEI.TTF",
BaseFont.IDENTITY_H,
BaseFont.NOT_EMBEDDED);
Fontfont=newFont(baseFont,9);
这里有一个缺点,就是必须指定字体路径,而Environment.SpecialFolder却不包含字体路径,其它获取方法也是有不少的,如用Win32 API等,也可以来点野蛮的:
Environment.GetFolderPath(Environment.SpecialFolder.System)+@"\..\Fonts\"
PDF函数:
publicstaticboolConvertDataTableToPDF(DataTableData,stringPDFFile,stringFontPath,floatFontSize)
{
Documentdocument=newDocument();
PdfWriterwriter=PdfWriter.GetInstance(document,newFileStream(PDFFile,FileMode.Create));
document.Open();
BaseFontbaseFont=
BaseFont.CreateFont(
FontPath,
BaseFont.IDENTITY_H,
BaseFont.NOT_EMBEDDED);
Fontfont=newFont(baseFont,FontSize);
PdfPTabletable=newPdfPTable(Data.Columns.Count);
for(inti=0;i<Data.Rows.Count;i++)
{
for(intj=0;j<Data.Columns.Count;j++)
{
table.AddCell(newPhrase(Data.Rows[i][j].ToString(),font));
}
}
document.Add(table);
document.Close();
writer.Close();
returntrue;
}
PDF调用:
ConvertDataTableToPDF(Table,@".\test.pdf","C:\\WINDOWS\\FONTS\\SIMSUN.TTC,1",9); //这里使用宋体,大小9pt。
RTF函数:
publicstaticboolConvertDataTableToRtf(DataTableData,stringRtfFile,stringFontPath,floatFontSize)
{
Documentdocument=newDocument();
RtfWriter2writer=RtfWriter2.GetInstance(document,newFileStream(RtfFile,FileMode.Create));
document.Open();
BaseFontbaseFont=
BaseFont.CreateFont(
FontPath,
BaseFont.IDENTITY_H,
BaseFont.NOT_EMBEDDED);
Fontfont=newFont(baseFont,FontSize);
Tabletable=newTable(Data.Columns.Count);
for(inti=0;i<Data.Rows.Count;i++)
{
for(intj=0;j<Data.Columns.Count;j++)
{
table.AddCell(newPhrase(Data.Rows[i][j].ToString(),font));
}
}
document.Add(table);
document.Close();
//writer.Close();
returntrue;
}
RTF调用:
ConvertDataTableToRtf(Table,@".\test.rtf","C:\\WINDOWS\\FONTS\\SIMSUN.TTC,1",9);
生成PDF和RTF的代码是不是很类似?代码很直接,大家根据自己的实际需要改造吧。
生成出来的PDF和RTF在大小上差异很大:6个字段*2000条记录,PDF为200k左右,RTF竟然达到5.5M左右。大家衡量使用什么吧。
btw.
iTextSharp刚推出了3.0.7版本:
New release iTextSharp 3.0.7 (2005-08-24) 参考:
1、itext官方教程字体部分:
http://itextdocs.lowagie.com/tutorial/fonts/index.html 2、iTextSharp全攻略:
http://www.zzchina.net/article/17/16571.htm 3、iTextSharp官方教程代码:
iTextSharp (iText#) tutorial update version
分享到:
相关推荐
C#版本Itextsharp根据模板导出pdf报表
简单的iTextSharp导出PDF文件
net版本Itextsharp根据模板导出pdf报表--(201903)
.net版本Itextsharp根据模板导出pdf报表(0515).rar
.net版本Itextsharp根据模板导出pdf报表
net版本Itextsharp根据模板导出pdf报表--最低分分享
net版本Itextsharp根据模板导出pdf报表
.net版本Itextsharp根据模板导出pdf报表(0520_).rar
iTextSharp转换为pdf,不依赖于office的COM组件,解决的转pdf中中文字符不显示的问题。
net版本Itextsharp根据模板导出pdf报表__0525).rar
net版本Itextsharp根据模板导出pdf报表__0525.
利用iTextSharp组件创建、操作PDF,简单、方便、快捷
.net版本Itextsharp根据模板导出pdf报表2019
用itextsharp输出PDF文档,支持用XML定义文档,可定义多个数据源,简单的表达式
.net版本Itextsharp根据模板导出pdf报表实例源码
C#利用iTextSharp 5.5 对PDF文件进行电子盖章,可读取USB电子证书,项目用VS2017打开,需要.net 2.0支持; 项目运行后盖章时弹出对话框,可选择本机上所有证书,包括USB电子证书。
2、PDF文件在目前来说是比较流行的电子文档格式,在.Net framework 中身并不包含可以和pdf打交道的方法,也没有很好操作PDF的类库,所以我们需要对pdf进行编辑,加密,模板打印等操作不得不去找可用的第三方组件,...
通过使用itextsharp插件生成pdf文件