2017-11-28 6 views
1

Ich versuche, eine PDF mit MVC zu generieren, das Problem, das ich habe, ist, dass ich nicht sicher bin, wie es am Ende angezeigt wird oder funktioniert, ich verwende ein ActionResult wo ich Führe eine Stored Procedure aus und fülle eine Datentabelle mit dem Ergebnis, das ich später im PDF-Generator "ausprobieren" möchte, soweit es gut geht, ist das Problem, wenn ich das Ergebnis an die View sende, wo ich einen Fehler bekomme und don Ich weiß nicht, wie ich es lösen kann, das ist eine Lebenssituation, also wäre ich sehr dankbar, wenn du mir helfen könntest, Entschuldigung für mein schlechtes Englisch.Generieren einer PDF-Datei mit MVC

Action:

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"); 
     } 
    } 

Teilansicht:

 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); 
     } 
    }); 

};

Es wird von dieser URL-Aktion aufgerufen.

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

Als ich es auszuführen, zeigt die Konsole diesen Fehler:

jquery-3.2.1.min.js: 4 [Deprecation] Synchrone XMLHttpRequest auf dem Haupt-Thread aufgrund seiner nachteiligen Wirkungen auf veraltet die Erfahrung des Endbenutzers. Weitere Informationen finden Sie unter https://xhr.spec.whatwg.org/.

+3

Dies liegt daran, dass Sie 'async: false' in Ihrem Ajax-Anruf einstellen. Diese Warnung weist darauf hin, dass dies in einer zukünftigen Version von jQuery nicht unterstützt wird. Gibt es einen bestimmten Grund, warum Sie diese Einstellung verwenden? – jmoerdyk

+0

Das Problem ist, dass am Ende die * Teilansicht * nicht die Datei (workStream, "application/pdf") von ActionResult empfängt und daher nichts darauf zeigt. – Aceman

Antwort

0

Ich habe es schließlich durch dies zu tun:

<a href='Home/PDFGenerator/'+ id+' "><img src="/Content/ImagesOwner/if_pdf_3745.png"/></a> 

Wo id die Parameter I auf die Action im Homecontroller senden müssen sind. Ich denke, am Ende war es sehr albern.

Verwandte Themen