почему не генерируется PDF при вызове из контроллера в mvc4? - PullRequest
1 голос
/ 03 февраля 2020

Я пытаюсь создать счет, используя ITextSharp, и я написал функцию, и она отлично работает при нажатии кнопки. Но когда я вызываю другой метод в том же контроллере, он не работает. Вот код:

Контроллер

 [HttpPost]
        public void Success(SampleModel model)
        {
            int[] matids = Array.ConvertAll(model.mid, int.Parse);
            int[] mcounts = Array.ConvertAll(model.count, int.Parse);
            int[] mprizes = Array.ConvertAll(model.iprizes, int.Parse);

            string companyName = "Bombay Botique";
            string orderNo = model.oid;
            string address=model.address;
            DataTable dt = new DataTable();
            dt.Columns.AddRange(new DataColumn[5] {
                            new DataColumn("ProductId", typeof(string)),
                            new DataColumn("Product", typeof(string)),
                            new DataColumn("Price", typeof(string)),
                            new DataColumn("Quantity", typeof(int)),
                            new DataColumn("Total", typeof(int))});
            for (int i = 0; i < matids.Length; i++)
            {
                dt.Rows.Add(matids[i], model.inames[i], mprizes[i], mcounts[i],mprizes[i]*mcounts[i]);
            }


                    StringBuilder sb = new StringBuilder();

                    //Generate Invoice (Bill) Header.
                    sb.Append("<table width='100%' cellspacing='0' cellpadding='2'>");
                    sb.Append("<tr><td align='center' style='background-color: #18B5F0' colspan = '2'><b>Order Sheet</b></td></tr>");
                    sb.Append("<tr><td colspan = '2'></td></tr>");
                    sb.Append("<tr><td><b>Order No: </b>");
                    sb.Append(orderNo);
                    sb.Append("</td><td align = 'right'><b>Date: </b>");
                    sb.Append(DateTime.Now);
                    sb.Append(" </td></tr>");
                    sb.Append("<tr><td colspan = '2'><b>Company Name: </b>");
                    sb.Append(companyName);
                    sb.Append("</td></tr>");
                    sb.Append("<tr><td colspan = '2'><b>Delivery Address: </b>");
                    sb.Append(address);
                    sb.Append("</td></tr>");
                    sb.Append("</table>");
                    sb.Append("<br />");

                    //Generate Invoice (Bill) Items Grid.
                    sb.Append("<table border = '1'>");
                    sb.Append("<tr>");
                    foreach (DataColumn column in dt.Columns)
                    {
                        sb.Append("<th style = 'background-color: #D20B0C;color:#ffffff'>");
                        sb.Append(column.ColumnName);
                        sb.Append("</th>");
                    }
                    sb.Append("</tr>");
                    foreach (DataRow row in dt.Rows)
                    {
                        sb.Append("<tr>");
                        foreach (DataColumn column in dt.Columns)
                        {
                            sb.Append("<td>");
                            sb.Append(row[column]);
                            sb.Append("</td>");
                        }
                        sb.Append("</tr>");
                    }
                    sb.Append("<tr><td align = 'right' colspan = '");
                    sb.Append(dt.Columns.Count - 1);
                    sb.Append("'>Total</td>");
                    sb.Append("<td>");
                    sb.Append(dt.Compute("sum(Total)", ""));
                    sb.Append("</td>");
                    sb.Append("</tr></table>");
                    HtmlDocument doc = new HtmlDocument();
                    doc.OptionWriteEmptyNodes = true;
                    //doc.OptionFixNestedTags = true;
                    doc.LoadHtml(sb.ToString());
                 string   htmls = doc.DocumentNode.OuterHtml;
using (MemoryStream stream = new System.IO.MemoryStream())
                 {

                     StringReader sr = new StringReader(htmls);
                     Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 100f, 0f);
                     PdfWriter writer = PdfWriter.GetInstance(pdfDoc, stream);
                     XMLWorkerHelper worker = XMLWorkerHelper.GetInstance();
                     pdfDoc.Open();
                     iTextSharp.text.Image addLogo = default(iTextSharp.text.Image);
                     addLogo = iTextSharp.text.Image.GetInstance(Server.MapPath("~") + "/images/bblogo.png");
                     string strFileShortName = "Invoice" + DateTime.Now.Ticks + ".pdf";
                     addLogo.ScaleToFit(128, 37);
                     pdfDoc.Add(addLogo);
                     pdfDoc.Add(new Chunk(""));
                     //      XMLWorkerHelper.GetInstance().ParseXHtml(writer, pdfDoc, sr);
                     worker.ParseXHtml(writer, pdfDoc, sr);
                     pdfDoc.Close();
                     return File(stream.ToArray(), "application/pdf", "Invoice_" + orderNo + ".pdf");
                 }

не знаю, почему он не работает при вызове функции из контроллера, а не из представления

...