在ASP-Net中利用iTextSharp实现报表输出功能_第1页
在ASP-Net中利用iTextSharp实现报表输出功能_第2页
在ASP-Net中利用iTextSharp实现报表输出功能_第3页
在ASP-Net中利用iTextSharp实现报表输出功能_第4页
在ASP-Net中利用iTextSharp实现报表输出功能_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

在ASP_Net中利用iTextSharp实现报表输出功能########2012-1#0#-#2#9####2012-10-29################2012-10-292010年第4期信息时代82TIANJINSCIENCE&TECHNOLOGY刘振鹏,天津市科技创业服务中心天津30019,2在ASP.Net中利用iTextSharp实现报表输出功能【摘要】报表输出模块是信息管理系统的重要组成部分,通过生成PDF格式的文档来让B/S开发结构的信息管理系统实现报表输出功能是个可行的思路。来自第三方的开源组件iText#可以很好地实现PDF文件的生成,用iText#能够很方便地制作出精美的PDF报表文件,通过实例对iText#的应用方法进行了讲解。iText#【关键词】信息管理系统ASP.NET报表PDF文档随着互联网应用的发展,以B/S结构模式开发的信息管来存放我们系统已经生成的PDF文档,在项目MyApp“”中再理系统显示了很强的优越性,浏览器承担了客户端的执行任新建一个文件夹,命名为images,用来存放我们准备好的图像务,使得网络信息系统的维护升级更加容易,对客户端的要求一个im01.jpg文件,分辨率为素材,在本实例中我们放入。因此很多信息管也更低,对各种操作系统有着很强的兼容性400×230。B/S架构来开发的。理系统都是以第五,添加一个新的Web窗体,命名为run.aspx,在run.在ASP.Net信息管理系统的开发过程中,经常会遇到数aspx.cs中添加如下引用,。由于浏览器本身控制打印机的能力很有据报表打印的问题usingSystem.IO;。通过客户端的浏限,不同浏览器的打印结果也存在很大差异usingICSharpCode.SharpZipLib;览器控制打印机完成精确的打印结果,实现起来是相对困难usingiTextSharp;usingPDF。所以系统生成一个文档发送给客户端,是一个很好的的iTextSharp.text;using。经过各种尝试,我最终选择了可以实现精美报表输出的办法iTextSharp.text.pdf;PDF报表输出的第三方组件iText#。在这里简单介精确控制第六,在run.aspx页面中添加一个ID为Button1的按iText#是如何实现报表输出功能的。绍一下钮,TEXT属性为生成PDF,在设计页面双击这个按钮“”iText#,iTextSharp,是开源软件开发网。为它编写代码的一个项目,这个组件包含两个类库,ICSharpCode.SharpZi-第七,接下来我们开始进行PDF相关代码的编写,将生成和itextsharp.dll,它们的作用就是提供一系列生成pLib.dll、表格、图像的PDF输出样张。以下是完整一个包含标题文字PDF文档的类供我们使用。。的源代码,我将通过注释详细解释代码的含义实例操作如下,protectedvoidButton1_Click(objectsender,EventArgse)首先,打开MSVisualStudio,建立一个新的C#{ASP.NETWeb应用程序项目,命名为M“”“//开始生成一个PDF文档,首先要对PDF文档的页面大小、yApp。”文件名和服务器端存储路径进行设置iText#的2其次,将个控件文件复制到新项目的//创建一个A4幅面的PDF文件,并设置左右上下的页边距BIN文件夹下,在项目中添加对这两个控件的引用,右击“”=newDocumentdocumentDocument(PageSize.A4,30,“引用”,单击“添加引用”,在“添加引用”窗口30,65,66);Text#浏览标签,找到i-的两个文件,选定后单击“”中选择//获得default.aspx的绝对路径。确定,stringbpath=MapPath("default.aspx");第三,在项目“MyApp”中新建一文件夹,命名为//获得没有文件名的绝对路径font,用来存放我们在生成PDF时需要用到的中英文字库。bpath=bpath.Remove(bpath.Length-12,12);接下来我们到Windows\fonts的目录中找到我们要用的字//定义PDF存放的包含文件名的绝对路径MyApp中的font文件夹中。例“”库文件,将他们复制到stringbpath1=bpath+"pdf/demo.pdf";SIMHEI.TTF、宋体字库文件simkai.ttf、幼如黑体字库文件//定义我们将要用到的黑体字库的存放路径SIMYOU.TTF等。stringbpath2=bpath+"font/SIMHEI.TTF";圆字库收稿日期,2010-07-09第四,在项目“MyApp”中新建一个文件夹,命名为//定义我们将要用到的宋体字库的存放路径########2012-1#0#-#2#9####2012-10-29################2012-10-29pdf,用########2012-1#0#-#2#9####2012-10-29###########2012-10-292010年第4期信息时代83TIANJINSCIENCE&TECHNOLOGYstringbpath3=bpath+"font/simkai.ttf";Table_1.DefaultVerticalAlignment=Element.ALIGN_MID-//定义我们将要用到的幼园体字库的存放路径DLE;stringbpath4=bpath+"font/SIMYOU.TTF";//表格的第1行内容,合并整行为1个单元格//实例化我们将要用到的黑体字库cell=newiTextSharp.text.Cell(newPhrase("1、这里的文字将BaseFontHei=BaseFont.CreateFont(bpath2,BaseFont.I-占用1行,4列,左对齐",font_a2));BEDDED);cell.Colspan=4;//设定这个单元格将横跨4列,占满1行DENTITY_H,BaseFont.NOT_EM//实例化我们将要用到的宋体字库//如果需要让文字实现垂直居中或者垂直居顶等格式,必须设BaseFontst=BaseFont.CreateFont(bpath3,BaseFont.I-置UseAscender属性为trueBEDDED);cell.UseAscender=true;DENTITY_H,BaseFont.NOT_EMcell.HorizontalAlignment=Element.ALIGN_LEFT;//设置将文//实例化我们将要用到的幼园体字库BaseFontyy=BaseFont.CreateFont(bpath4,BaseFont.I-字按左对齐方式填入单元格BEDDED);cell.BorderColor=newColor(255,255,255);//设置不显示单DENTITY_H,BaseFont.NOT_EM//定义我们本实例中可以使用的字体20点黑体字元格的边框颜色cell.BackgroundColor=newColor(244,249,156);//设置单Fontfont_t=newFont(Hei,20);//定义我们本实例中可以使用的字体12点宋体字元格的背景色Fontfont_a1=newFont(st,12);//将单元格装入表格,这个过程很像搭积木//定义我们本实例中可以使用的字体10点幼园体字Table_1.AddCell(cell);//表格的第2行内容,合并前3列为1个单元格Fontfont_a2=newFont(yy,10);//开始建立我们的PDF文档cell=newiTextSharp.text.Cell(newPhrase("2、这里的文字占",font_a2));PdfWriter.GetInstance(document,newFileStream(bpath1,用一行,3列,左对齐FileMode.Create));cell.Colspan=3;//设定这个单元格将横跨3列document.Open();cell.UseAscender=true;cell.HorizontalAlignment=Element.ALIGN_LEFT;//实例化一个文本段落,用来实现我们文档的主标题=newColor(255,255,255);strs=newParagraph("PDF输出样张",font_t);cell.BorderColorParagraph=newColor(241,231,251);cell.BackgroundColorstrs.SetAlignment("CENTER");//设置段落为居中对齐PDF文件中Table_1.AddCell(cell);document.Add(strs);//将标题段落加入",font_t));//根据排版的需//表格的第2行最后1个单元格document.Add(newParagraph("cell=newiTextSharp.text.Cell(newPhrase("3、一行1列,右要输出一个空行对齐",font_a2));//重新生成1个文本段落,用来显示1行正文strs=newParagraph("这里我们开始制作我们的PDF文档,cell.Colspan=1;//设定这个单元格占用1列。cell.UseAscender=true;这里是一段文字,下面将利用表格来定位一些文字块",font_a1);cell.HorizontalAlignment=Element.ALIGN_RIGHT;=newColor(255,255,255);strs.SetAlignment("CENTER");//设置段落为居中对齐cell.BorderColordocument.Add(strs);//将标题段落加入PDF文件中=newColor(241,231,251);cell.BackgroundColor//接下来我们建立1个表格,通过这个表格来格式化文字的显Table_1.AddCell(cell);//表格的第3、4行,这里把2行3列合并为一个单元格示cell=newiTextSharp.text.Cell(newPhrase("4、这里的文字占iTextSharp.text.TableTable_1;//实例化1个PDF表格,名为Table_1",font_a2));用两行,3列,垂直居中左对齐iTextSharp.text.Cellcell;//实例化1个单元格对象,名为cellcell.UseAscender=true;//初始化Table_1表格对象这个表格有4列cell.Colspan=3;//设定这个单元格将横跨3列Table_1=newiTextSharp.text.Table(4);span=2;//设定这个单元格将横跨2行cell.Row//这里要设置表格的填距为2,表格的填距就是单元格边界和=Element.ALIGN_MIDDLE;cell.VerticalAlignment=Element.ALIGN_LEFT;内容间一定数量的空间,设置填距就是为了避免文字紧贴表cell.HorizontalAlignment=newColor(255,255,255);cell.BorderColor格底线=newColor(238,167,175);Table_1.Cellpadding=2;cell.BackgroundColor//表格边框的颜色,这里设定为白色,达到不显示表格线的效Table_1.AddCell(cell);//表格的第3行最后1个单元格果Table_1.BorderColor=newColor(255,255,255);cell=newiTextSharp.text.Cell(newPhrase("5、一行1列,右//设置了单元格的纵向对齐为垂直居中对齐",font_a2));########2012-1#0#-#2#9####2012-10-29###########2012-10-29########2012-1#0#-#2#9####2012-10-29###########2012-10-292010年第4期信息时代84TIANJINSCIENCE&TECHNOLOGYcell.UseAscender=true;//第1行,作为标题行,在表格被分页的时候标题行能够自动cell.Colspan=1;//设定这个单元格占用1列被重复=Element.ALIGN_RIGHT;cell=newiTextSharp.text.Cell(newPhrase("标题一",cell.HorizontalAlignment=new255,Color(255,255);1个单元格的内容cell.BorderColorfont_a1));//定义第=new167,Color(238,175);cell.UseAscender=true;cell.BackgroundColorcell.BackgroundColor=newColor(244,249,156);Table_1.AddCell(cell);//表格的第4行最后1个单元格=Element.ALIGN_CENTER;cell.HorizontalAlignmentcell=newiTextSharp.text.Cell(newPhrase("6、一行1列,右Table_1.AddCell(cell);对齐",font_a2));cell=newiTextSharp.text.Cell(newPhrase("标题二",cell.UseAscender=true;font_a1));//定义第2个单元格的内容cell.Colspan=1;//设定这个单元格占用1列cell.UseAscender=true;=Element.ALIGN_RIGHT;cell.BackgroundColor=newColor(244,249,156);cell.HorizontalAlignment=newColor(255,255,255);=Element.ALIGN_CENTER;cell.BorderColorcell.HorizontalAlignment=newColor(238,167,175);cell.BackgroundColorTable_1.AddCell(cell);Table_1.EndHeaders();//可以定义多行为标题行,这里表示标Table_1.AddCell(cell);//将这个表格加入PDF文件中题行到此结束。document.Add(Table_1);//这里为表格添加多行内容,其中第二列为图形IM1//接下来我们将一个图像放入PDF文档IM1.RotationDegrees=0;//设定图像无旋转角度IMiTextSharp.text.ImageIM1;//实例化一个图形对象,名为IM11.ScaleAbsolute(50,13);//设定图像的宽度和高度int//定义图像对象IM1的文件名和路径k;IM1=iTextSharp.text.Image.GetInstance(Server.MapPathfor(k=1;k<=16;k++)//生成16行的表格内容("images")+"/im01.jpg");{IM1.ScaleAbsolute(400,230);//设定图像的宽度和高度IM//内容行的第1列1.Alignment=iTextSharp.text.Image.ALIGN_MIDDLE;//图cell=newiTextSharp.text.Cell(newPhrase(k.ToString().Trim()+"、表格内容第1列",font_a1));像要居中显示//将这个图像加入PDF文件中cell.UseAscender=true;//如果需要让文字实现垂直居document.Add(IM1);中或者垂直居顶等格式,必须设置UseAscender属性为true//现在我们再将刚才的图像缩小到30%并逆时针旋转90?Table_1.AddCell(cell);作为其他后续文本的背景//内容行的第2列,放入图片IM1.ScalePercent(30);//设定图像缩小到30%Table_1.AddCell(newCell(IM1));//将单元格装入表格//设定图像将作为文字的背景并且居中对齐}IM1.Alignment=iTextSharp.text.Image.UNDERLYING|i-document.Add(Table_1);//将这个表格加入PDF文件中IDDLE;IM//完成了PDF文档的内容,关闭文档TextSharp.text.Image.ALIGN_M1.RotationDegrees=90;//设定图像的逆时针旋转角度document.Close();//将这个图像加入PDF文件中//支持客户端下载的功能代码document.Add(IM1);stringfilePath=bpath1;//重新初始化一个段落,这段内容将不会绕过刚才的图片if(File.Exists(filePath)==false)strs=newParagraph("\n\n这些文字将不会绕过图片。\n\n",{//服务器上没有这个文件font_t);strs.SetAlignment("CENTER");//设置段落为居中对齐return;//将这个浮在图像上面的段落加入PDF文件中}document.Add(strs);//设定字符集和编码方式,为了充分支持中文文件名,必须进//接下来我们将尝试建立一个带有标题行的表格,还会在表格行以下设定Page.Response.Clear();Page.Response.Charset="gb2312";中使用图片Table_1=newiTextSharp.text.Table(2);=System.Text.Encoding.//初始化Page.Response.ContentEncodingTable_1对象这个表格有2列UTF8;Table_1.Cellpadding=2;//设置了表格的填距Table_1.DefaultVerticalAlignment=Element.ALIGN_MID-Page.Response.AddHeader("Content-Type","applica-DLE;//设置了单元格的纵向对齐tion/pdf");########2012-1#0#-#2#9####2012-10-29###########2012-10-29########2012-1#0#-#2#9####2012-10-29###########2012-10-292010年第4期信息时代85TIANJINSCIENCE&TECHNOLOGYStringfilenamestr="PDF输出样张";//设定下载时默认的以上我们通过一个实例,了解了如何使用iText#来生成PDF文件名一个PDF文档,在这个PDF样文档中,我们使用了文字段落、Page.Response.AddHeader("Content-Disposition","attach-图像、表格等元素,并对这些元素进行属性控制,实现我们对报"+System.Web.HttpUtility.UrlEncode(file-。通过灵活使用这些元素我们可以实现ment;filename=表精细控制输出的功能+".PDF");namestr,System.Text.Encoding.UTF8)很丰富的报表功能,例如通过表格的嵌套可以实现很复杂的格

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论