Невозможно создать iTextSharp PDF из контроллера, но работает нормально, когда из View вызывается то же действие - PullRequest
0 голосов
/ 24 апреля 2020

В моем контроллере у меня есть подобное действие для генерации PDF с использованием iTextSharp:

public FileResult Print(int id)
{
    string fileName = "something.pdf";
    Document document = new Document(PageSize.A4, 18, 18, 36, 36);
    MemoryStream stream = new MemoryStream();
    PdfWriter writer = PdfWriter.GetInstance(document, stream);
    HeaderFooter.Title = "Something";
    HeaderFooter.Box = "box";
    HeaderFooter tevent = new HeaderFooter();
    writer.SetBoxSize(HeaderFooter.Box, new Rectangle(18, 72, 577, 770));
    writer.PageEvent = tevent;
    document.Open();
    .
    .
    .
    document.Close();
    return File(stream.ToArray(), "application/pdf", fileName);
}

После создания документа (счета-фактуры) я могу напечатать его из вида: <a href="@Url.Action("Print", new { id = Model.InvoiceID })"> и работает нормально. Но то, что я действительно хочу, это распечатать его в конце процесса создания до возврата, и там документ не печатается (без каких-либо сообщений об ошибках):

// POST: /Invoice/Create
[HttpPost]
public JsonResult Create(Invoice invoice)
{
    try
    {
        if (ModelState.IsValid)
        {
            .
            .
            .
            unitOfWork.InvoiceRepository.Insert(invoice);
            unitOfWork.Save();
            Print(invoice.invoiceID);
        }
        return Json(new { Success = 1, InvoiceID = invoice.InvoiceID, ex = "" });
    }
    catch {...}
}

Я проверил, что каждый шаг действие Print выполнено, но pdf не возвращается. Что я делаю не так?

...