技术开发 频道

利用iTextSharp把DataTable导出为PDF和RTF


【IT168技术文档】

  相信每个业务系统都有报表输出的需要,一般采用第三方报表工具,如水晶报表等等。我们也可以直接采用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; }
0
相关文章