Red de conocimiento informático - Aprendizaje de programación - Cómo exportar páginas web a PDF en MVC

Cómo exportar páginas web a PDF en MVC

Recientemente creé una función para exportar tablas de páginas a PDF y ahora la arreglaré para emergencias.

La plantilla PDF utiliza un archivo de informe .net (.rdlc). El principio es llenar el archivo de informe con datos y utilizar el método de la clase Microsoft.Reporting.WebForms.LocalReport para generar el byte PDF. stream. Luego, al definir la definición del encabezado HTTP de la respuesta, el archivo PDF se genera en el navegador.

La siguiente es la parte clave del código:

1. Primero, prepare un método para generar un flujo de bytes PDF: usando?Sistema;

usando? System.Colecciones.Genérico;

usando?ATA.Toeic.Models;

usando?ATA.Toeic.DAL;

usando?System.IO;

usando?Microsoft.Reporting.WebForms;

espacio de nombres?ATA.Toeic.BLL

{?

¿clase?pública?AdmissionTicketBLL?

{?

privado?RegistrationDAL?dal?=?new?RegistrationDAL();?

///?

///?『Exportación única』?

///?¿Exportar un archivo pdf que contenga un boleto de admisión?

///?

?

///?Número de boleto de admisión?

///?Ruta de la plantilla de informe>

///?flujo de bytes de archivos pdf?

public?byte[]?ExportTicket(string?addmissionFormId,?string?reportPath, ?out?string?mimeType)?

{?

Lista?arrId?=?new?List();?

arrId.Add(addmissionFormId);?

return?ExportTicket(arrId,?reportPath,?out?mimeType);?

}?

/// ?

?

///?『Exportación por lotes』?

///?¿Exportar múltiples archivos pdf de boletos de admisión?

// / ?

?

///?El número de boleto de admisión que debe exportarse?

/// ?< return>flujo de bytes de archivo pdf?

public?byte[]?ExportTicket(List?arrAddmissionFormId,?string?reportPath,?out?string?mimeType)?

{?

LocalReport?localReport?=?new?LocalReport();?

localReport.ReportPath?=?reportPath;?

/ /?¿La ruta al archivo de plantilla del objeto de informe?

//?¿La fuente de datos del objeto de informe?

ReportDataSource?reportDataSource?=?new?ReportDataSource(" dsList",?GetAdmission

TicketList(arrAddmissionFormId.ToArray())?

//?¿Este método devuelve un objeto IList?);?

localReport.DataSources.Add(reportDataSource);?

string?reportType?=?"PDF";?

string?encoding;?

string?fileNameExtension;?

// ¿La configuración?DeviceInfo?debe?cambiarse?según?el?reportType?

///en-us/library/ms155397.aspx?

string?deviceInfo ?=?"PDF";?Warning[]?warnings;?string[]?streams;?byte[]?renderedBytes;?//Renderizar?el?informe ?

renderedBytes?=?localReport.Render(?reportType,?deviceInfo,?out?mimeType,?out?encoding,?out?fileNameExtension,?out?streams,?out?warnings);?

return?renderedBytes;?

}?

}

}

2.?En acción Definir Encabezados HTTP y archivos PDF de salida. Aquí no hay diferencia entre lote y único. La diferencia está contenida en el flujo de bytes de byte[].

[CheckServiceExpire]?

¿público?ActionResult?GetAdmissionForms(int?serviceid,?string?Condition)?

{?

Lista?list?=?new?RegistrationBLL().GetExamineeByCondi(serviceid,?Condition);?

if?(list?==?null?||?list.Count?== ?0)?

return?Alert("¡Actualmente no hay información sobre el boleto de admisión!",?"~/Views/ExamService/SaveSuccess.aspx",?new?{?action?=?"GetExamineeByPage ", ?controlador?=?"Registro",?serviceid?=?serviceid?});?

Lista?sl?=?new?List();?

foreach?(RegistrationEn?ren?in?list)?

sl.Add(ren.fAdmissionFormId);?

¿probar?

{?

AdmissionTicketBLL?bll?=?new?AdmissionTicketBLL();?

string?rdlcPath?=?Server.MapPath("~/Resources/AdmissionTicket.rdlc"); ?

cadena?mimeType;?

byte[]?renderedBytes?=?bll.ExportTicket(sl,?rdlcPath,?out?mimeType);?

Respuesta .AddHeader("content-disposition",?"attachment;?filename=AdmissionTicket.pdf");?

return?File(renderedBytes,?mimeType);?

}? catch?{?

return?Alert("¡Error al obtener la información del boleto de admisión!",?"~/Views/ExamService/SaveSuccess.aspx",?new?{?action?=?" GetExamineeByPage", ?controller?=?"Registration",?serviceid?=?serviceid?});?

}?

}

De esta manera Puede exportar archivos PDF normalmente.

Suplemento:

Si desea abrir el PDF directamente en la página (requiriendo que la máquina tenga instalado Adobe Reader), solo necesita modificar los parámetros del encabezado HTTP:

Reemplace "Response.AddHeader("content-disposition", "attachment; filename=AdmissionTicket.pdf");" por "Response.AddHeader("content-disposition", string.Format("inline; nombre de archivo={0}. pdf", admisionFormId));"