2015-05-28 2 views
-1

в то время как им экспорт, один PDF загружается в нужном месте, но еще один дополнительный PDF загружается в папке загрузкидополнительный PDF загружается при экспорте PDF в C# .NET

Как остановить загрузку дополнительного один PDF?

  Response.ContentType = "application/pdf"; 
      Response.AddHeader("content-disposition", "attachment;filename=" + Projname + ".pdf"); 
      Response.Cache.SetCacheability(HttpCacheability.NoCache); 
      System.IO.StringWriter stringWrite = new System.IO.StringWriter(); 
      System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite); 
      design.RenderControl(htmlWrite); 
      string myText = stringWrite.ToString().Replace("&", "&"); 
      StringReader sr = new StringReader(myText.ToString()); 
      Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 100f, 0f); 
      string strPath = "D:\\WeeklyReport of " + Projname + ".pdf"; 
      PdfWriter writer = PdfWriter.GetInstance(pdfDoc, new FileStream(strPath, FileMode.Create)); 
      pdfDoc.Open(); 
      XMLWorkerHelper.GetInstance().ParseXHtml(writer, pdfDoc, sr); 
      pdfDoc.Close(); 
      pdfDoc.Dispose(); 
+0

Первые три строки вашего кода инициализируют ответ (HTTP?) Для возврата PDF в качестве вложения, то есть для загрузки; остальное создает PDF-файл и сохраняет его на вашем диске D :. Если вы не скрываете что-то релевантное, вызывающий абонент должен загрузить пустой файл PDF в качестве загрузки. Если вы этого не хотите, не инициализируйте ответ таким образом. – mkl

+0

в локальном хосте im, способном экспортировать, но в реальном сервере получить ошибку - доступ к пути «D: \ WeeklyReport of Testing project.pdf» отрицается. @ Mkl –

+0

* Доступ ... отрицается * - Звучит естественно. Почему производственный сервер позволяет веб-приложению хранить что-то в папке D: \? – mkl

ответ

0

Эта линия

PdfWriter writer = PdfWriter.GetInstance(pdfDoc, new FileStream(strPath, FileMode.Create)); 

вашего кода требует PdfWriter записи в файл в файловой системе сервера.

Если вы этого не хотите, вы должны заменить new FileStream(strPath, FileMode.Create) на что-то еще, например. выходной поток ответа HTTP:

PdfWriter writer = PdfWriter.GetInstance(pdfDoc, Response.OutputStream); 

Это имеет потенциальные недостатки,

  • ответ HTTP, не имеет заголовок, содержащий размер полезной нагрузки. Известно, что некоторые версии браузера имеют проблемы в таком случае; и
  • в случае ошибки во время создания PDF клиент извлекает половину PDF и не является надлежащим сообщением об ошибке.

Если эти недостатки беспокоиться, вы, вероятно, может вместо этого хотите создать экземпляр MemoryStream, целевой PdfWriter к нему, строить PDF, извлекать byte[] из потока, создать содержимое заголовка для размера этого массива , и, наконец, напишите массив до Response.OutputStream.

 Смежные вопросы

  • Нет связанных вопросов^_^