Как вернуть PDF с помощью iText - PullRequest
1 голос
/ 18 февраля 2020

Я пытаюсь вернуть PDF с простым текстом, но получаю следующую ошибку при загрузке документа: Не удалось загрузить PDF документ. Любые идеи о том, как решить эту проблему приветствуется.

MemoryStream ms = new MemoryStream();

PdfWriter writer = new PdfWriter(ms);
PdfDocument pdfDocument = new PdfDocument(writer);
Document document = new Document(pdfDocument);

document.Add(new Paragraph("Hello World"));

//document.Close();
//writer.Close();

ms.Position = 0;

string pdfName = $"IP-Report-{DateTime.Now.ToString("yyyyMMddHHmmssfff")}.pdf";

return File(ms, "application/pdf", pdfName);

1 Ответ

4 голосов
/ 18 февраля 2020

Вы должны закрыть устройство записи, не закрывая основной поток, который будет sh его внутренним буфером. Таким образом, документ не записывается в поток памяти полностью. Все, кроме мс, также должно быть в using.

Вы можете убедиться, что это происходит, проверив длину ms в вашем коде по сравнению с кодом ниже.

Когда using (PdfWriter writer =...) закрывает, закрывает программу записи, что приводит к гриппу sh ожидающие записи в основной поток ms.

MemoryStream ms = new MemoryStream();

using (PdfWriter writer = new PdfWriter(ms))
using (PdfDocument pdfDocument = new PdfDocument(writer))
using (Document document = new Document(pdfDocument))
{
    /*
     * Depending on iTextSharp version, you might instead use:
     *     writer.SetCloseStream(false);
     */
    writer.CloseStream = false; 
    document.Add(new Paragraph("Hello World"));
}

ms.Position = 0;

string pdfName = $"IP-Report-{DateTime.Now.ToString("yyyyMMddHHmmssfff")}.pdf";

return File(ms, "application/pdf", pdfName);
...