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? p>
{?
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 param >>
///?
public?byte[]?ExportTicket(string?addmissionFormId,?string?reportPath, ?out?string?mimeType)?
{?
Lista
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 {? 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 ?=?" 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 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 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));"