c# iTextSharp导出PDF
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Threading; using iTextSharp.text; using System.IO; using System.Windows.Forms; using iTextSharp.text.pdf; namespace Bmw.Web.BLL { public class OutPDF { private static System.Drawing.Bitmap bitmap; private static string url; private static int w = 760, h = 900; public static void setBitmap() { using (WebBrowser wb = new WebBrowser())//应该是new的问题?。。 { wb.Width = w; wb.Height = h; wb.ScrollBarsEnabled = false; wb.Navigate(url); //确保页面被解析完全 while (wb.ReadyState != WebBrowserReadyState.Complete) { System.Windows.Forms.Application.DoEvents(); } bitmap = new System.Drawing.Bitmap(w, h); wb.DrawToBitmap(bitmap, new System.Drawing.Rectangle(0, 0, w, h)); wb.Dispose(); } } public static void CreatPdf() { Document doc = new Document(PageSize.A4, 9, 18, 36, 36);//左右上下 MemoryStream ms = new MemoryStream(); try { PdfWriter writer = PdfWriter.GetInstance(doc, ms); writer.CloseStream = false; doc.Open(); url = "http://localhost:5026/Orders/SeeOneOrder?Order_Id=31"; Thread thread = new Thread(new ThreadStart(setBitmap)); thread.SetApartmentState(ApartmentState.STA); thread.Start(); while (thread.IsAlive) Thread.Sleep(100); bitmap.Save("t.bmp"); iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(bitmap, System.Drawing.Imaging.ImageFormat.Bmp); img.ScalePercent(75);//560 630 doc.Add(img); } catch (Exception err) { throw new Exception(err.Message); } finally { doc.Close(); //using (FileStream fs = new FileStream("out.pdf", FileMode.Create)) //{ ms.Position = 0; byte[] bit = new byte[ms.Length]; ms.Read(bit, 0, (int)ms.Length); //fs.Write(bit, 0, bit.Length); //} ViewPdf(ms); } } private static void ViewPdf(Stream fs) { HttpContext.Current.Response.Clear(); //中文名的话 //Response.AppendHeader("Content-Disposition", "attachment;filename=" + // HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8) + ";charset=GB2312"); HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;FileName=out.pdf"); HttpContext.Current.Response.AddHeader("Content-Length", fs.Length.ToString()); HttpContext.Current.Response.ContentType = "application/pdf"; long fileLength = fs.Length; int size = 10240;//10K一--分块下载,10K为1块 byte[] readData = new byte[size]; if (size > fileLength) size = Convert.ToInt32(fileLength); long fPos = 0; bool isEnd = false; while (!isEnd) { if ((fPos + size) >= fileLength) { size = Convert.ToInt32(fileLength - fPos); isEnd = true; } readData = new byte[size]; fs.Position = fPos; fs.Read(readData, 0, size); HttpContext.Current.Response.BinaryWrite(readData); HttpContext.Current.Response.OutputStream.Flush(); fPos += size; } fs.Close(); HttpContext.Current.Response.OutputStream.Close(); HttpContext.Current.Response.End();//非常重要,没有这句的话,页面的HTML代码将会保存到文件中 HttpContext.Current.Response.Close(); } } }