我见网上大部分都是document.execCommand("SaveAs");这个方法是保存HTML页面的。
我现在做的是将页面数据导出PDF,由用户来选择所生成的PDF文件保存路径。就像是WinFowm里面的另存为一样。
其实我只是需要它返回给我一个路径,好让我知道用户要把生成的PDF文件保存在哪个文件夹里面。语文学的不好,描述不清楚请见谅。

解决方案 »

  1.   

    namespace WebApplication1
    {
      public partial class _Default : System.Web.UI.Page
      {   
      public static string[] ColumnTableName = new string[] { "StuNo", "Name", "Age", "Address" };
      protected void Page_Load(object sender, EventArgs e)
      {
      if (!IsPostBack)
      {
      Repeater1.DataSource = GetStudentInfo();
      Repeater1.DataBind();
      }
      }  public static System.Data.DataTable GetStudentInfo()
      {
      System.Data.DataTable table = new System.Data.DataTable();
      foreach (string str in ColumnTableName)
      {
      table.Columns.Add(str);
      }  DataRow row = table.NewRow();
      row[0] = "S001";
      row[1] = "张三";
      row[2] = "22";
      row[3] = "上海市";
      table.Rows.Add(row);  row = table.NewRow();
      row[0] = "S002";
      row[1] = "李四";
      row[2] = "29";
      row[3] = "北京市";
      table.Rows.Add(row);  row = table.NewRow();
      row[0] = "S003";
      row[1] = "赵五";
      row[2] = "29";
      row[3] = "武汉市";
      table.Rows.Add(row);  return table;
      }  protected void btnPdf_Click(object sender, EventArgs e)
      {   
      WebApplication1.ExportPDF.CreateProductPDF("StudentInfo", "StudentInfo", _Default.ColumnTableName, _Default.GetStudentInfo());
      }
      }namespace WebApplication1
    {
      public class ExportPDF
      {
      public static void CreateProductPDF(string fileName, string title, string[] columnName, System.Data.DataTable dataTable)
      {
      //创建Document
      Document document = null;
      //为该Document创建一个Writer实例
      PdfWriter writer = null;
      //段
      Paragraph p = null;
      try
      {   
      //字体
      BaseFont baseFont = BaseFont.CreateFont(System.Web.HttpContext.Current.Server.MapPath("/App_Data/SIMYOU.TTF"), BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
      Font font = new Font(baseFont, 10, Font.NORMAL);
      //内存流
      MemoryStream memoryStream = new MemoryStream();
      document = new Document(PageSize.A4, 10, 10, 10, 10);
      //页脚   
      HeaderFooter footer = new HeaderFooter(new Phrase("footertxt"), true);
      footer.Border = Rectangle.NO_BORDER;
      document.Footer = footer;
      //为该Document创建一个Writer实例
      writer = PdfWriter.GetInstance(document, memoryStream);
      writer.CloseStream = false;
      //打开
      document.Open();   
      //添加表信息
      if (dataTable != null)
      {
      Table table = new Table(dataTable.Columns.Count);
      table.Width = 100;   
      table.AutoFillEmptyCells = true;
      table.BorderWidth = 1;
      table.DefaultHorizontalAlignment = 1;
      table.DefaultVerticalAlignment = 1;
      table.Alignment = Element.ALIGN_MIDDLE;
      table.BorderColor = new Color(0, 0, 0);
      table.Padding = 1;
      table.Spacing = 0.1F;
      Cell cell = null;
      //表头
      for (int i = 0; i < columnName.Length; i++)
      {
      cell = new Cell();
      cell.Header = true;
      cell.BackgroundColor = new Color(221, 217, 195);
      cell.Colspan = 1;
      cell.Add(new Phrase(columnName[i], font));
      table.AddCell(cell);
      cell = null;
      }
      //表中数据   
      for (int i = 0; i < dataTable.Rows.Count; i++)
      {
      for (int j = 0; j < dataTable.Columns.Count; j++)
      {
      table.AddCell(new Phrase(dataTable.Rows[i][j].ToString(), font));
      }
      }
        
      //添加Table
      document.Add(table);
      }
      // 重置页面数量  
      document.ResetPageCount();
      //关闭目标文件  
      document.Close();
      //关闭写入流  
      writer.Close();
      //输出
      System.Web.HttpContext.Current.Response.ContentType = "application/pdf";
      System.Web.HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
      System.Web.HttpContext.Current.Response.AddHeader("Content-disposition", string.Format("attachment; filename={0}", fileName));
      System.Web.HttpContext.Current.Response.OutputStream.Write(memoryStream.GetBuffer(), 0, memoryStream.GetBuffer().Length);
      System.Web.HttpContext.Current.Response.OutputStream.Flush();
      System.Web.HttpContext.Current.Response.OutputStream.Close();
      }
      catch (Exception e)
      {
      string ee = e.Message;
      //关闭目标文件  
      document.Close();
      //关闭写入流  
      writer.Close();
      document = null;
      writer = null;
      p = null;
      }
      }  }
    }
    理解一下
      

  2.   

    你 输出到客户端 就会自动 弹出那个ie下载, 然后用户选择保存啊就是默认ie下载啊不需要什么代码的。
      

  3.   

    打开的文件 另存的话,那就是客户端的事情了客户端是否能打开下载的pdf文件,你还不知道呢。
      

  4.   

    哦,原来这样啊。恩,请问生成PDF文件的那个类库 iTextSharp.dll  里面是不是有一楼里面  Table table = new Table(dataTable.Columns.Count);我下载的 iTextSharp.dll  引用只有,为什么没有这个Table  而是 System.Web.UI.WebControls.Table没有包含一个参数的构造啊。
      

  5.   

    也就是那个 iTextSharp.dll  类库里面也应该有个Table类,我下载的这个里面没有不知道我说的对不对。