Как сохранить PDF на пути к карте сервера, используя iTextsharp
Я использую следующий код для генерации PDF, и это прекрасно работает:
string strQuery = "select * from userdata";
SqlCommand cmd = new SqlCommand(strQuery);
DataTable dt = GetData(cmd);
//Create a dummy GridView
GridView GridView1 = new GridView();
GridView1.AllowPaging = false;
GridView1.DataSource = dt;
GridView1.DataBind();
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment;filename=GridViewExport.pdf");
Response.Cache.SetCacheability(HttpCacheability.NoCache);
StringWriter sw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
GridView1.RenderControl(hw);
StringReader sr = new StringReader(sw.ToString());
Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f);
HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
pdfDoc.Open();
htmlparser.Parse(sr);
pdfDoc.Close();
Response.Write(pdfDoc);
Response.End();
это работает хорошо. но я могу сохранить этот PDF-файл на пути к карте сервера.
я написал ниже после pdfDoc.Close();
String path = Server.MapPath("~/mypdf.pdf");
Но это не сохранение PDF на пути к карте сервера.
Как я могу это сделать?
1 ответ
Решение
В настоящее время вы записываете документ в следующий поток вывода: Response.OutputStream
Как только вы делаете pdfDoc.Close();
, PDF-байты исчезли.
Если вы хотите сохранить PDF на сервер, вам необходимо заменить следующую строку:
PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
С этой строкой:
PdfWriter.GetInstance(pdfDoc, new FileStream(context.Server.MapPath("~") + "mypdf.pdf");
Теперь ваши байты не будут отправлены в браузер, но PDF будет создан на вашем сервере.