Spread for ASP.NET产品中提供了前台的Print方法,用户只需点击命令栏上的 Print 按钮便可打印Spread文档,不过Spread for ASP.NET并没有提供打印预览功能,本文就讲解如何实现Spread for ASP.NET的打印预览功能。
打印预览的主要是重写Spread的默认打印方法,并借助jQuery中的Ajax和Spread提供的SavePdf方法来实现,通过Ajax请求后台将Spread以PDF的形式导出到客户端,从而实现打印预览功能。
前台代码:
<script type="text/javascript" language="javascript" src="Script/jquery-1.4.1.min.js"></script> <script language="javascript" type="text/javascript"> function myprint() { var image = document.getElementById("Image1"); image.style.visibility = "visible"; image.style.height = "100%"; image.style.width = "100%"; document.getElementById("Image1").style.visibility = "visible"; document.getElementById("Image1").style.visibility = "visible"; $.ajax({ url: 'WebForm1.aspx?command=pdfexport', success: function (data) { image.style.visibility = "hidden"; image.style.height = "0px"; image.style.width = "0px"; mywindow = window.open("WebForm1.aspx?command=showpdf", "_blank", "width=1024px,resizable=yes,location=no"); } }); } </script>
后台代码:
protected override void Render(HtmlTextWriter writer) { WebControl print = (WebControl)FpSpread1.FindControl("Print"); if (print != null) { // 修改默认的打印行为 print.Attributes.Add("onclick", "return myprint();"); } base.Render(writer); }
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { FpSpread1.OpenExcel(Server.MapPath(@"Resource\金牌用户电话回访记录表.xlsx")); FpSpread1.ActiveSheetView.GridLineColor = System.Drawing.Color.Black; FpSpread1.ActiveSheetView.AllowPage = false; } if (Request["command"] != null) { if (Request["command"].ToString() == "pdfexport") { // 设置打印参数 PrintInfo pi = new PrintInfo(); pi.Margin = new PrintMargin(); pi.Margin.Top = 50; pi.Margin.Left = 100; pi.ShowRowHeader = PrintHeader.Hide; pi.ShowColumnHeader = PrintHeader.Hide; pi.ShowBorder = true; FpSpread1.ActiveSheetView.PrintInfo = pi; // 将Spread文件保存到Sess中 Session.Add("pdfdata", null); System.IO.MemoryStream m_stream = new System.IO.MemoryStream(); FpSpread1.SavePdf(FpSpread1.ActiveSheetView, m_stream); m_stream.Position = 0; Session["pdfdata"] = m_stream; } if (Request["command"].ToString() == "showpdf") { if (Session["pdfdata"] != null) { System.IO.MemoryStream m_stream = new System.IO.MemoryStream(); m_stream = (System.IO.MemoryStream)Session["pdfdata"]; Response.ContentType = "application/pdf"; Response.AddHeader("content-disposition", "inline;filename=金牌用户电话回访记录表.pdf"); Response.BinaryWrite(m_stream.ToArray()); Response.End(); } } } }
运行截图:
源码下载:VS2010 + Spread .NET 6.0 + jQuery