2012-07-19 35 views
5

¿Cuál es la mejor forma de generar páginas html a partir de los datos a la vista? Tengo una plantilla html con todas las tablas, etc. No quiero usar plantillas como JqueryTemplate.Devolver documento PDF de Asp.net controlador MVC

+0

¿Por qué no quieres usar build en mvc synrax razor? O tienes que hacerlo al lado del cliente? –

+0

¿por qué necesita hacerlo del lado del cliente? ¿Por qué no generar el lado del servidor PDF y devolver el pdf listo como bytes? –

Respuesta

2

Basta con crear el lado del servidor de PDF y devolver el archivo en lugar de la vista html. Ni qué tipo de proveedor de PDF no se utiliza, pero esto una solución para iTextSharp:

How to return PDF to browser in MVC?

+0

Bueno, me encasillaste. Vamos a empezar desde el principio. ¿Cuál es tu verdadero caso? ¿Qué quieres hacer? Hay muchos diferentes enviar cualquier tipo de datos desde el controlador a la página html con o sin controlador –

6

probar este enfoque mediante el hiqpdf html to pdf converter, un producto comercial:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     ViewBag.Message = "Welcome to ASP.NET MVC!"; 
     Session["MySessionVariable"] = "My Session Variable Value assigned in Index"; 

     return View(); 
    } 

    public ActionResult About() 
    { 
     return View(); 
    } 

    public string RenderViewAsString(string viewName, object model) 
    { 
     // create a string writer to receive the HTML code 
     StringWriter stringWriter = new StringWriter(); 

     // get the view to render 
     ViewEngineResult viewResult = ViewEngines.Engines.FindView(ControllerContext, viewName, null); 
     // create a context to render a view based on a model 
     ViewContext viewContext = new ViewContext(
       ControllerContext, 
       viewResult.View, 
       new ViewDataDictionary(model), 
       new TempDataDictionary(), 
       stringWriter 
       ); 

     // render the view to a HTML code 
     viewResult.View.Render(viewContext, stringWriter); 

     // return the HTML code 
     return stringWriter.ToString(); 
    } 

    [HttpPost] 
    public ActionResult ConvertThisPageToPdf() 
    { 
     // get the HTML code of this view 
     string htmlToConvert = RenderViewAsString("Index", null); 

     // the base URL to resolve relative images and css 
     String thisPageUrl = this.ControllerContext.HttpContext.Request.Url.AbsoluteUri; 
     String baseUrl = thisPageUrl.Substring(0, thisPageUrl.Length - "Home/ConvertThisPageToPdf".Length); 

     // instantiate the HiQPdf HTML to PDF converter 
     HtmlToPdf htmlToPdfConverter = new HtmlToPdf(); 

     // hide the button in the created PDF 
     htmlToPdfConverter.HiddenHtmlElements = new string[] { "#convertThisPageButtonDiv" }; 

     // render the HTML code as PDF in memory 
     byte[] pdfBuffer = htmlToPdfConverter.ConvertHtmlToMemory(htmlToConvert, baseUrl); 

     // send the PDF file to browser 
     FileResult fileResult = new FileContentResult(pdfBuffer, "application/pdf"); 
     fileResult.FileDownloadName = "ThisMvcViewToPdf.pdf"; 

     return fileResult; 
    } 

    [HttpPost] 
    public ActionResult ConvertAboutPageToPdf() 
    { 
     // get the About view HTML code 
     string htmlToConvert = RenderViewAsString("About", null); 

     // the base URL to resolve relative images and css 
     String thisPageUrl = this.ControllerContext.HttpContext.Request.Url.AbsoluteUri; 
     String baseUrl = thisPageUrl.Substring(0, thisPageUrl.Length - "Home/ConvertAboutPageToPdf".Length); 

     // instantiate the HiQPdf HTML to PDF converter 
     HtmlToPdf htmlToPdfConverter = new HtmlToPdf(); 

     // render the HTML code as PDF in memory 
     byte[] pdfBuffer = htmlToPdfConverter.ConvertHtmlToMemory(htmlToConvert, baseUrl); 

     // send the PDF file to browser 
     FileResult fileResult = new FileContentResult(pdfBuffer, "application/pdf"); 
     fileResult.FileDownloadName = "AboutMvcViewToPdf.pdf"; 

     return fileResult; 
    } 
} 

Fuente de este código de ejemplo: How to convert HTML to PDF using HiQPDF

+0

estaba buscando mostrando el archivo pdf durante 3 días. Pero esta solución es mejor. Gracias – MustafaP

Cuestiones relacionadas