Дополнительный pdf загружается при экспорте pdf в C# .net
При экспорте один PDF-файл загружается в нужное место, а другой дополнительный PDF-файл загружается в папку загрузок.
Как перестать скачивать лишний 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();
1 ответ
Эта линия
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
,