none
Generar archivos PDF con Rotativa RRS feed

  • Pregunta

  • Estoy generando archivos PDF con Rotativa y funciona, pero lo que no consigo es indicarle una ubicación para los archivos que genera, mi código es:

    public ActionResult Index()  {
           string filePath = "C:\\PDF_Curri\\";
           string fileName = "PruebaPdf3.pdf";
           Empleado E = new Empleado { Nombre = "Juan", Apellidos = "Novales" };
           return new Rotativa.ViewAsPdf("GeneraPDF", E) { SaveOnServerPath = filePath, FileName = fileName };

         }

    Me dice que mi ASP .Net no tiene derechos de acceso al directorio C:\\PDF_Curri  y por más que accedo al directorio y le asigno permisos, incluido el TODOS con Control total, no me deja grabar y solo graba si no indica la ruta y entonces por defecto graba en el directorio de descargas, me olvidaba mi S.O.  es Windows 7 Ultimate

    un saludo

    jueves, 12 de mayo de 2016 15:32

Respuestas

  • Ya lo he solucionado, os pongo el código completo por si alguien tiene el mismo problema

    public ActionResult Index()  {
        string filePath = Server.MapPath("~/Datos/PruebaPdf3.pdf"); ;
        string fileName = "PruebaPdf3.pdf";
        Empleado E = new Empleado { Nombre = "Juan", Apellidos = "Novales" };
        var actionPDF = new Rotativa.ActionAsPdf("GeneraPDF", E)    {
            FileName = fileName,
            PageOrientation = Rotativa.Options.Orientation.Landscape,
            PageMargins = { Left = 1, Right = 1 }
        };
        byte[] applicationPDFData = actionPDF.BuildPdf(ControllerContext);

        var fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write);
        fileStream.Write(applicationPDFData, 0, applicationPDFData.Length);
        fileStream.Close();
        return actionPDF;
    }

    public ActionResult GeneraPDF(Empleado E){
        return View("Index", E);

    }

    Notas: hay que hacer referencia a System.IO, y esto graba en disco directamente y presenta en la parte inferior de la pantalla el PDF por si lo quieres ver.

    un saludo 

    • Marcado como respuesta fjjcent viernes, 13 de mayo de 2016 12:36
    viernes, 13 de mayo de 2016 12:35

Todas las respuestas

  • hola

    es que no puedes escribir en cualquier sitio si desarrollas web, debes hacerlo dentro de la estructura del sitio

    para eso usarias

    string filePath = Server.MapPath("~/PDF_Curri");

    esto te dara una ruta fisica pero dentro de la estructura de carpeta del sitio web

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 12 de mayo de 2016 17:19
  • Siguiendo tus indicaciones he creado un directorio Datos dentro de la carpeta del proyecto y he cambiado la ruta para que apun

    te al mismo. ahora el código es el siguiente:

    public ActionResult Index() {
        string filePath = Server.MapPath("~/Datos"); ;
        string fileName = "PruebaPdf3.pdf";
        Empleado E = new Empleado { Nombre = "Juan", Apellidos = "Novales" };
        return new Rotativa.ViewAsPdf("Index", E) {
            SaveOnServerPath = filePath, FileName = fileName
        };
    }

    Y a pesar de todo sigue dando el mismo error, el texto  del error es el siguiente:

      Acceso denegado a la ruta de acceso 'E:\Proyecto_Infocenturion\MvcPruebaPDF\MvcPruebaPDF\Datos

    mi duda es si no habrá que darle permiso a algún usuario  específico de ASP .Net dentro de IIS 7, porque le he dado a nivel de carpeta control total a Todos y sigue dando el error.

    un saludo

    viernes, 13 de mayo de 2016 11:54
  • Ya lo he solucionado, os pongo el código completo por si alguien tiene el mismo problema

    public ActionResult Index()  {
        string filePath = Server.MapPath("~/Datos/PruebaPdf3.pdf"); ;
        string fileName = "PruebaPdf3.pdf";
        Empleado E = new Empleado { Nombre = "Juan", Apellidos = "Novales" };
        var actionPDF = new Rotativa.ActionAsPdf("GeneraPDF", E)    {
            FileName = fileName,
            PageOrientation = Rotativa.Options.Orientation.Landscape,
            PageMargins = { Left = 1, Right = 1 }
        };
        byte[] applicationPDFData = actionPDF.BuildPdf(ControllerContext);

        var fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write);
        fileStream.Write(applicationPDFData, 0, applicationPDFData.Length);
        fileStream.Close();
        return actionPDF;
    }

    public ActionResult GeneraPDF(Empleado E){
        return View("Index", E);

    }

    Notas: hay que hacer referencia a System.IO, y esto graba en disco directamente y presenta en la parte inferior de la pantalla el PDF por si lo quieres ver.

    un saludo 

    • Marcado como respuesta fjjcent viernes, 13 de mayo de 2016 12:36
    viernes, 13 de mayo de 2016 12:35