Дополнительный 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,

Другие вопросы по тегам