visualizar visualizador que puedo online navegador hacer descargar cómo chrome celular archivos archivo abrir abra c#-4.0 asp.net-mvc-4 pdfsharp

c#-4.0 - que - visualizador de pdf de chrome



¿Cómo puedo visualizar un PDF usando PdfSharp en ASP.Net MVC? (2)

estamos creando una aplicación ASP.Net MVC que debe ser capaz de generar un PDF y mostrarlo en la pantalla o guardarlo en un lugar fácil de acceder para el usuario. Estamos usando PdfSharp para generar el documento. Una vez que está terminado, ¿cómo permitimos que el usuario guarde el documento o lo abra en un lector? Estoy especialmente confundido porque el PDF se genera en el lado del servidor, pero queremos que aparezca en el lado del cliente.

Aquí está el controlador MVC para crear el informe que hemos escrito hasta ahora:

public class ReportController : ApiController { private static readonly string filename = "report.pdf"; [HttpGet] public void GenerateReport() { ReportPdfInput input = new ReportPdfInput() { //Empty for now }; var manager = new ReportPdfManagerFactory().GetReportPdfManager(); var documentRenderer = manager.GenerateReport(input); documentRenderer.PdfDocument.Save(filename); //Returns a PdfDocumentRenderer Process.Start(filename); } }

Cuando esto se ejecuta, obtengo una UnauthorizedAccessException en documentRenderer.PdfDocument.Save(filename); que dice, se deniega el Access to the path ''C:/Program Files (x86)/Common Files/Microsoft Shared/DevServer/10.0/report.pdf'' is denied. Tampoco estoy seguro de qué pasará cuando la línea Process.Start(filename); es ejecutado.

Este es el código en manager.GenerateReport(input) :

public class ReportPdfManager : IReportPdfManager { public PdfDocumentRenderer GenerateReport(ReportPdfInput input) { var document = CreateDocument(input); var renderer = new PdfDocumentRenderer(true, PdfSharp.Pdf.PdfFontEmbedding.Always); renderer.Document = document; renderer.RenderDocument(); return renderer; } private Document CreateDocument(ReportPdfInput input) { //Put content into the document } }


No estoy familiarizado con PDF sharp, pero para MVC se realiza principalmente a través de la funcionalidad incorporada. Debe obtener su documento PDF representado como una matriz de bytes. Luego, simplemente debe usar el método de archivo de MVC para devolverlo al navegador y dejar que maneje la descarga. ¿Hay algún método en su clase para hacer eso?

public class PdfDocumentController : Controller { public ActionResult GenerateReport(ReportPdfInput input) { //Get document as byte[] byte[] documentData; return File(documentData, "application/pdf"); } }


Usando la sugerencia de Yarx y el tutorial del equipo de PDFsharp, este es el código con el que terminamos:

Controlador:

[HttpGet] public ActionResult GenerateReport(ReportPdfInput input) { using (MemoryStream stream = new MemoryStream()) { var manager = new ReportPdfManagerFactory().GetReportPdfManager(); var document = manager.GenerateReport(input); document.Save(stream, false); return File(stream.ToArray(), "application/pdf"); } }

ReportPdfManager:

public PdfDocument GenerateReport(ReportPdfInput input) { var document = CreateDocument(input); var renderer = new PdfDocumentRenderer(true, PdfSharp.Pdf.PdfFontEmbedding.Always); renderer.Document = document; renderer.RenderDocument(); return renderer.PdfDocument; } private Document CreateDocument(ReportPdfInput input) { //Creates a Document and puts content into it }