2017-11-28 7 views
1

MVCを使用してPDFを生成しようとしていますが、問題が表示されたり、最後に動作するかどうかわからない場合は、ActionResultストアドプロシージャを実行し、後でPDFジェネレータで使用するように結果をデータテーブルに書き込んでください。これまではうまくいきました。問題はビューに結果を送信するときです。それを解決する方法を知っている、これは人生の状況ですので、私があなたを助けることができれば非常に感謝したい、私の悪い英語のために申し訳ありません。MVCを使用してPDFファイルを生成する

のActionResult:

public ActionResult PDFGenerator(string id 
     ) 

    { 
     using (Document document = new Document()) 
     { 
      string idpago = "2"; 
      //while (id != null) 
      int identificacionpago = Convert.ToInt32(idpago); 
      DataTable dt = new DataTable(); 
      Database conex = Conexion.getInstancia(); 
      dt = conex.ExecuteDataSet("Usp_TraerPago", identificacionpago).Tables[0]; 
      string pago = dt.Rows[0]["ValorPago"].ToString(); 
      string aniopago = dt.Rows[0]["AnioPago"].ToString(); 
      DateTime fechapago = Convert.ToDateTime(dt.Rows[0]["FechaPago"]); 
      //int pag = Convert.ToInt32(ViewBag.datos); 
      int idusuario = Convert.ToInt32(dt.Rows[0]["IdUsuario"].ToString()); 

      DataTable dt1 = new DataTable(); 
      dt1 = conex.ExecuteDataSet("Usp_UsuarioPago", idusuario).Tables[0]; 
      string Numid = dt1.Rows[0]["NumIdentificacion"].ToString(); 
      string Tipoid = dt1.Rows[0]["TipoIdentificacion"].ToString(); 
      string Nombre = dt1.Rows[0]["NombresUsuario"].ToString(); 
      string apellidos = dt1.Rows[0]["ApellidosUsuario"].ToString(); 
      MemoryStream workStream = new MemoryStream(); 
      // Document document = new Document(); 
      PdfWriter.GetInstance(document, workStream).CloseStream = false; 

      document.Open(); 

      document.Add(new Paragraph("                              " + DateTime.Now.ToString())); 
      document.Add(new Paragraph("Certificado de participación")); 
      document.Add(new Paragraph(" ")); 
      document.Add(new Paragraph(" ")); 

      document.Add(new Paragraph("        por el año " + aniopago)); 
      document.Add(new Paragraph("El suscrito a " + Nombre + " " + apellidos + " identificado con " + Tipoid + " " + Numid + " " + " En la fecha " + fechapago.Year + "/" + fechapago.Month + "/" + fechapago.Day + aniopago)); 
      document.Add(new Paragraph(" ")); 
      document.Add(new Paragraph(" ")); 
      document.Add(new Paragraph(" ")); 
      document.Add(new Paragraph(" ")); 
      document.Add(new Paragraph(" ")); 
      document.Add(new Paragraph(" ")); 
      document.Add(new Paragraph(" ")); 
      document.Add(new Paragraph(" ")); 
      document.Add(new Paragraph("___________________________ ")); 
      document.Add(new Paragraph("Firma del Revisor Fiscal ")); 

      //document.SaveAs(workStream); 
      document.Close(); 

      byte[] byteInfo = workStream.ToArray(); 
      workStream.Write(byteInfo, 0, byteInfo.Length); 
      workStream.Position = 0; 

      return File(workStream, "application/pdf"); 
     } 
    } 

部分図:

 function generarpdf(value) { 

    $.ajax({ 
     url: '@Url.Action("PDFGenerator", "Home")', 
     type: 'POST', 
     async: false, 
     data: { "id": value }, 
     dataType: "application/pdf", 
     success: function (data) { 
      var file = new Blob([data], { type: 'application/pdf' }); 
      var fileURL = URL.createObjectURL(file); 
      window.open(fileURL); 
     } 
    }); 

};

このURLアクションによって呼び出されます。

jqueryの-3.2.1.min.js:

<a id="libro" href='@Url.Action("PDFGenerator","Home")'></a> 

私はそれを実行

は、コンソールは、このエラーを示す4 [廃止]同期のXMLHttpRequestは、メインスレッドであるために、その有害な作用の廃止されエンドユーザーの経験詳細については、 https://xhr.spec.whatwg.org/を確認してください。

+3

これは、ajax呼び出しで 'async:false'を設定しているからです。その警告は、将来のバージョンのjQueryではこれをサポートしないことを伝えています。あなたはその設定を使用している特別な理由はありますか? – jmoerdyk

+0

問題は、最後に*部分ビュー*がActionResultからFile(workStream、 "application/pdf")を受け取らないため、何も表示されないことです。 – Aceman

答えて

0

私は最終的にこれを行うことによって、それをやった:

idは私がにHomeController内のActionResultに送信する必要があるパラメータである
<a href='Home/PDFGenerator/'+ id+' "><img src="/Content/ImagesOwner/if_pdf_3745.png"/></a> 

。私はそれが最後に非常にばかげていたと思う。

関連する問題