Генерация PDF в веб-API (ItextSharp 5.5.13) - PullRequest
0 голосов
/ 25 сентября 2018

Мне нужно создать PDF-файл в памяти в веб-интерфейсе и отправить его. Я создаю PDF-файл и веб-интерфейс отправляем его, но не могу открыть его, как только получу.

Я действительно создаюPDF в виде байтового массива с этим:

private byte[] createPDF()
    {
        MemoryStream memStream = new MemoryStream();
        byte[] pdfBytes;

        Document doc = new Document(iTextSharp.text.PageSize.LETTER);
        PdfWriter wri = PdfWriter.GetInstance(doc, memStream);
        doc.AddTitle("test");
        doc.AddCreator("I am");

        doc.Open();//Open Document to write
        Paragraph paragraph = new Paragraph("This is my first line using Paragraph.");
        Phrase pharse = new Phrase("This is my second line using Pharse.");
        Chunk chunk = new Chunk(" This is my third line using Chunk.");
        doc.Add(paragraph);
        doc.Add(pharse);
        doc.Add(chunk);
        pdfBytes = memStream.ToArray();
        doc.Close(); //Close 
        return pdfBytes;
    }

Этот метод вызывается методом в веб-интерфейсе, который отправляет PDF, и именно этот:

 [HttpGet]
    public HttpResponseMessage GetFiniquitopdf()
    {
        try
        {
            byte[] buffer = createPDF();

            response = new HttpResponseMessage();
            response.StatusCode = HttpStatusCode.OK;
            response.Content = new StreamContent(new MemoryStream(buffer));

            response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
            response.Content.Headers.ContentLength = buffer.Length;
            response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
            {
                FileName = "myFirstPDF.pdf"
            };

        }
        catch (Exception e)
        {
            response = Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e.Message);
        }

        return response;
    }

Проблема в , когда PDF загружается, он бесполезен, не может быть открыт, я не понимаю, почему PDF не может быть открыт, я думал, что это была безопасность Windows10, поэтому после загрузкиЯ проверяю его как защищенный файл, но он все равно не открывается. Я думаю, что-то не так в том, как я его отправляю, или, может быть, мне не хватает чего-то в создании PDF-файла

заранее спасибо

1 Ответ

0 голосов
/ 25 сентября 2018

Вы извлекаете байты из потока памяти перед закрытием документа:

    pdfBytes = memStream.ToArray();
    doc.Close(); //Close 
    return pdfBytes;

Но pdf в потоке памяти не завершен до закрытия документа.Таким образом, просто переключите порядок инструкций:

    doc.Close(); //Close 
    pdfBytes = memStream.ToArray();
    return pdfBytes;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...