Вы пытаетесь вернуть сгенерированный PDF-файл, написав объект document
:
Response.Write(document);
Это неверно, потому что iText 7 Document
является просто фасадом для добавления содержимого в PdfDocument
( ваш объект pdf
), который, в свою очередь, также не содержит PDF, но записывает его через свой PdfWriter
в вашем коде в файл по адресу
path+ "\\Appointments" + DateTime.Now.ToString("ddMMyyyy") + ".pdf"
Таким образом, что вы должны написать в ответ является содержимым этого файла.
Поскольку DateTime.Now
тем временем был изменен, вы должны сначала сгенерировать этот путь в переменной и использовать эту переменную в обоих местах.
Кроме того, как сказал Альберт Д. Каллал уже прокомментирован, он должен быть записан как двоичный, используя BinaryWrite
.
В качестве альтернативы, если вам действительно не нужны результаты pdf в файловой системе, вы можете использовать MemoryStream
вместо фактического файла системный файл.
В комментариях и ответах вы указали, что файл в файловой системе вас действительно совсем не интересует. Таким образом, вы должны использовать MemoryStream
. Вы уже нашли пример кода для использования MemoryStream
с iText 5. Соответствующий пример для iText 7 будет выглядеть так:
using (MemoryStream stream = new MemoryStream())
{
using (PdfWriter writer = new PdfWriter(stream))
using (PdfDocument pdf = new PdfDocument(writer))
using (Document document = new Document(pdf, PageSize.A4))
{
Paragraph header = new Paragraph("MyTurns.in")
.SetTextAlignment(TextAlignment.CENTER)
.SetFontSize(20);
// New line
Paragraph newline = new Paragraph(new Text("\n"));
document.Add(newline);
document.Add(header);
// Add sub-header
Paragraph subheader = new Paragraph("Appointment List Date : " + DateTime.Now.ToString("dd/mm/yyyy"))
.SetTextAlignment(TextAlignment.CENTER)
.SetFontSize(15);
document.Add(subheader);
}
Response.Buffer = false;
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment;filename=Appointments" + DateTime.Now.ToString("dd/MM/yyyy") + ".pdf");
Response.BinaryWrite(stream.ToArray());
}
Кстати, что касается вашей строки
Response.End();
, вам, вероятно, следует прочитать ASP. NET документацию по нему
Это Метод предоставляется только для совместимости с ASP, то есть для совместимости с технологией веб-программирования на основе COM, которая предшествовала ASP. NET. Если вы хотите перейти к событию EndRequest
и отправить ответ клиенту, обычно предпочтительнее вместо этого позвонить CompleteRequest
.
и пересмотреть его использование.