用C#创建PDF表格:iTextSharp的应用

来源:互联网 发布:工业网络交换机厂家 编辑:程序博客网 时间:2024/05/21 09:49
最近学校有项目需要用C#创建PDF文件,输出程序中的表格。在网上搜索后发现C#确实没有原生的解决办法,大多都是用到了一个第三方的库:iTextSharp。这个库的核心组件可以在http://sourceforge.net/projects/itextsharp/这里下载,压缩文件itextsharp-all-core.zip中的iTestSharp.dll便是我们要用到的组件,我下载的时候组件更新到了版本5.5.0,其中删除了之前版本中的table类,但网上流传最广的iTextSharp使用手册中仍然使用的是Table来创建表格,这个方法只适用于之前的版本。因此这里使用另一个类PdfPTable来创建表格:


首先在visual studio 2010中引用iTextSharp.dll库,右键单击“解决方案资源管理器”中的“引用”,选择“添加引用”,用“浏览”找到你存放iTestSharp.dll的文件夹,点击确定便将iTextSharp添加到了你的解决方案中。


接下来在代码中添加命名空间如下:

using System.IO;using iTextSharp.text;using iTextSharp.text.pdf;


其中IO用来保存文件,后面两个是要用来创建和编辑PDF文档的类。


以下代码是在点击一个按钮之后,让用户选择保存的位置,创建一个PDF文档,将tablelayoutpanel控件中的内容做成一个表格保存到PDF文件中:

private void button3_Click(object sender, EventArgs e)          //“保存数据”按钮,保存为PDF文件{Stream myStream;            //文件流SaveFileDialog savefile = new SaveFileDialog();                 savefile.Filter = "pdf files (*.pdf)|*.pdf|All files (*.*)|*.*";    //保存文件的格式        savefile.FilterIndex = 1;                   //默认保存文件格式索引,默认为第一种pdf格式        savefile.RestoreDirectory = true;               //记忆上次打开目录        if (savefile.ShowDialog() == DialogResult.OK)  //点保存之后        {string localFilePath = savefile.FileName.ToString(); //获得保存文件路径              string fileNameExt = localFilePath.Substring(localFilePath.LastIndexOf("\\") + 1); //获取文件名,不带路径             myStream = savefile.OpenFile();         //打开文件并赋给IO流myStream             Document document = new Document(PageSize.A4.Rotate());         //创建A4纸、横向PDF文档             PdfWriter writer = PdfWriter.GetInstance(document,myStream);//将PDF文档写入创建的文件中     document.Open(); //要在PDF文档中写入中文必须指定中文字体,否则无法写入中文                BaseFont bftitle = BaseFont.CreateFont("C:\\Windows\\Fonts\\SIMHEI.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);   //用系统中的字体文件SimHei.ttf创建文件字体                iTextSharp.text.Font fonttitle = new iTextSharp.text.Font(bftitle, 30);     //标题字体,大小30                BaseFont bf1 = BaseFont.CreateFont("C:\\Windows\\Fonts\\SIMSUN.TTC,1", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);     //用系统中的字体文件SimSun.ttc创建文件字体                iTextSharp.text.Font CellFont = new iTextSharp.text.Font(bf1, 12);          //单元格中的字体,大小12                iTextSharp.text.Font fonttitle2 = new iTextSharp.text.Font(bf1, 15);        //副标题字体,大小15                //添加标题                Paragraph Title = new Paragraph("示例文件", fonttitle);//添加段落,第二个参数指定使用fonttitle格式的字体,写入中文必须指定字体否则无法显示中文                Title.Alignment = iTextSharp.text.Rectangle.ALIGN_CENTER;//设置居中                document.Add(Title);//将标题段加入PDF文档中                //空一行                Paragraph nullp = new Paragraph(" ", fonttitle2);                nullp.Leading = 10;                document.Add(nullp);                PdfPTable table = new PdfPTable(int)numericUpDown2.Value);         //numericUpDown2为用户设置的列数,创建Value列的表格,行会根据写入数据自动扩展//不同单元格对应tablelayoutpanel添加不同文本for (int j = 0; j < tableLayoutPanel1.RowCount; j++)//j为行标 {      for (int i = 0; i < tableLayoutPanel1.ColumnCount; i++)//i为列表      {          if (i == 0 && j == 0) //左上角为空          {             table.AddCell(" ");//向表格的单元格添加数据,此处为空白             continue;         }          if (j == 0) //第一行标号          {             table.AddCell(i + "#");             continue;          }          if (i == 0 && j > 0) //tablelayoutpanel第一列为textbox控件,读取用户输入的文本          {             Control c = tableLayoutPanel1.GetControlFromPosition(i, j);//获取tablelayoutpannel容器中第i列、第j行的控件             if (c is TextBox)//判定控件的类型如果为textbox则将文本内容写入PDF文档             {                 table.AddCell(new Paragraph(c.Text, CellFont));//用CellFont字体将textbox中的内容写入PDF文档的单元格中             }             continue;          }          if (i > 0 && j > 0) //单元格数据          {            Control c = tableLayoutPanel1.GetControlFromPosition(i, j);            if (c is Label)            {                 table.AddCell(c.Text);           }            else            {                 table.AddCell(" ");            }            continue;          }                  table.AddCell(" "); //如果tablelayoutpanel单元格中不存在控件则写入空单元格      } } document.Add(table); //将表格加入PDF文档中 document.Close(); myStream.Close(); }}


代码都有注释,应该都看得懂,有问题请提出~

0 0
原创粉丝点击