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/を確認してください。
これは、ajax呼び出しで 'async:false'を設定しているからです。その警告は、将来のバージョンのjQueryではこれをサポートしないことを伝えています。あなたはその設定を使用している特別な理由はありますか? – jmoerdyk
問題は、最後に*部分ビュー*がActionResultからFile(workStream、 "application/pdf")を受け取らないため、何も表示されないことです。 – Aceman