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();

        }

    }

}

  

你可能感兴趣的:(itext)