利用iTextSharp把DataTable导出为PDF和RTF(Rich Text Format)文件
2007-01-18 13:31
405 查看
利用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()来实现:
BaseFont baseFont =
BaseFont.CreateFont(
"C://WINDOWS//FONTS//SIMHEI.TTF",
BaseFont.IDENTITY_H,
BaseFont.NOT_EMBEDDED);
Font font = new Font(baseFont, 9);
这里有一个缺点,就是必须指定字体路径,而Environment.SpecialFolder却不包含字体路径,其它获取方法也是有不少的,如用Win32 API等,也可以来点野蛮的:
Environment.GetFolderPath(Environment.SpecialFolder.System) + @"/../Fonts/"
PDF函数:
public static bool ConvertDataTableToPDF(DataTable Data, string PDFFile, string FontPath, float FontSize)
{
Document document = new Document();
PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(PDFFile, FileMode.Create));
document.Open();
BaseFont baseFont =
BaseFont.CreateFont(
FontPath,
BaseFont.IDENTITY_H,
BaseFont.NOT_EMBEDDED);
Font font = new Font(baseFont, FontSize);
PdfPTable table = new PdfPTable(Data.Columns.Count);
for (int i = 0; i < Data.Rows.Count; i++)
{
for (int j = 0; j < Data.Columns.Count; j++)
{
table.AddCell(new Phrase(Data.Rows[i][j].ToString(), font));
}
}
document.Add(table);
document.Close();
writer.Close();
return true;
}
PDF调用:
ConvertDataTableToPDF(Table, @"./test.pdf", "C://WINDOWS//FONTS//SIMSUN.TTC,1", 9); //这里使用宋体,大小9pt。
RTF函数:
public static bool ConvertDataTableToRtf(DataTable Data, string RtfFile, string FontPath, float FontSize)
{
Document document = new Document();
RtfWriter2 writer = RtfWriter2.GetInstance(document, new FileStream(RtfFile, FileMode.Create));
document.Open();
BaseFont baseFont =
BaseFont.CreateFont(
FontPath,
BaseFont.IDENTITY_H,
BaseFont.NOT_EMBEDDED);
Font font = new Font(baseFont, FontSize);
Table table = new Table(Data.Columns.Count);
for (int i = 0; i < Data.Rows.Count; i++)
{
for (int j = 0; j < Data.Columns.Count; j++)
{
table.AddCell(new Phrase(Data.Rows[i][j].ToString(), font));
}
}
document.Add(table);
document.Close();
//writer.Close();
return true;
}
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
相信每个业务系统都有报表输出的需要,一般采用第三方报表工具,如水晶报表等等。我们也可以直接采用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()来实现:
BaseFont baseFont =
BaseFont.CreateFont(
"C://WINDOWS//FONTS//SIMHEI.TTF",
BaseFont.IDENTITY_H,
BaseFont.NOT_EMBEDDED);
Font font = new Font(baseFont, 9);
这里有一个缺点,就是必须指定字体路径,而Environment.SpecialFolder却不包含字体路径,其它获取方法也是有不少的,如用Win32 API等,也可以来点野蛮的:
Environment.GetFolderPath(Environment.SpecialFolder.System) + @"/../Fonts/"
PDF函数:
public static bool ConvertDataTableToPDF(DataTable Data, string PDFFile, string FontPath, float FontSize)
{
Document document = new Document();
PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(PDFFile, FileMode.Create));
document.Open();
BaseFont baseFont =
BaseFont.CreateFont(
FontPath,
BaseFont.IDENTITY_H,
BaseFont.NOT_EMBEDDED);
Font font = new Font(baseFont, FontSize);
PdfPTable table = new PdfPTable(Data.Columns.Count);
for (int i = 0; i < Data.Rows.Count; i++)
{
for (int j = 0; j < Data.Columns.Count; j++)
{
table.AddCell(new Phrase(Data.Rows[i][j].ToString(), font));
}
}
document.Add(table);
document.Close();
writer.Close();
return true;
}
PDF调用:
ConvertDataTableToPDF(Table, @"./test.pdf", "C://WINDOWS//FONTS//SIMSUN.TTC,1", 9); //这里使用宋体,大小9pt。
RTF函数:
public static bool ConvertDataTableToRtf(DataTable Data, string RtfFile, string FontPath, float FontSize)
{
Document document = new Document();
RtfWriter2 writer = RtfWriter2.GetInstance(document, new FileStream(RtfFile, FileMode.Create));
document.Open();
BaseFont baseFont =
BaseFont.CreateFont(
FontPath,
BaseFont.IDENTITY_H,
BaseFont.NOT_EMBEDDED);
Font font = new Font(baseFont, FontSize);
Table table = new Table(Data.Columns.Count);
for (int i = 0; i < Data.Rows.Count; i++)
{
for (int j = 0; j < Data.Columns.Count; j++)
{
table.AddCell(new Phrase(Data.Rows[i][j].ToString(), font));
}
}
document.Add(table);
document.Close();
//writer.Close();
return true;
}
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
相关文章推荐
- 利用iTextSharp把DataTable导出为PDF和RTF(Rich Text Format)文件
- 利用itextsharp.dll 导出pdf格式文件
- 利用iTextSharp加密PDF文件
- 利用程序将.jrxml导出为.jasper文件并用PDF显示(2)
- RTF(rich textformat)富文本格式
- RTF(rich textformat)富文本格式
- Rich Text Format (RTF) 中文版规范,版本 1.6 (http://blog.csdn.net/slobber/)
- Qt下利用Qprinter或者QPdfWriter导出文件为PDF
- Rich Text Format (RTF) 中文版规范,版本 1.6
- Java程序员从笨鸟到菜鸟之(一百零四)java操作office和pdf文件(二)利用POI实现数据导出excel报表
- .NET动态生成PDF文件(利用iTextSharp)
- .NET动态生成PDF文件(利用iTextSharp)
- 利用iTextSharp创建/修改/转换/加密PDF文件
- 利用Ireport和JasperReport实现导出RTF等文件
- Java程序员从笨鸟到菜鸟之(一百零四)java操作office和pdf文件(二)利用POI实现数据导出excel报表
- 利用itextSharp(v4.1版本)导出 pdf不能打开问题
- RTF(rich textformat)富文本格式
- 利用iText导出pdf文件
- Rich Text Format (RTF) 中文版规范,版本 1.6 (分章——介绍)
- 每日学习心得:Linq解决DataTable按照某一列的值排序问题/DataTable 导出CSV文件/巧用text-overflow解决数据绑定列数据展示过长问题