单击页面上的按钮,然后就把页面上的数据导出到pdf文件中,该怎么实现?

解决方案 »

  1.   

    Asp.net mvc 导出数据至PDF .blog评论里有回复过你。
      

  2.   

    恩,你用了微软的报表了吧,现在我的情况是一个页面要保持登录状态,然后导出这个页面的局部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();
            }
        }
    }
    这是网上找的,问题是不能保持登录。。现在我的思路是 截图,然后把图片write到pdf里?js截图貌似js没这么强大。。没弄过。。头疼。。
    要么就是解决登录的问题