0

Its posible open print dialog when is open in memorystram? Actually I save the pdf in "~/App_Data/Rep_PDF/" and after show a pdf in an iframe but I cant do it because I recive a message :

"Not allowed to load local resource: file:///C:/Users/andres.martinez/Documents/TFS%20Monterrey%20Gob/InterfaceMonterrey%20PROD/Interface%20Monterrey%20PROD/InterfaceMonterrey/App_Data/Rep_PDF/Copia_C_Administrativa%2030-04-2019.pdf"

Could you help me How to print a pdf in asp mvc?

this is part of my code:

 public ActionResult ImprimeReporte()
    {
        //Indicamos donde vamos a guardar el documento
        string directorioRaiz = "~/App_Data/Rep_PDF/";
        string NombreArchivoPDF = "C_Administrativa " + DateTime.Today.ToString("dd-MM-yyyy") + ".pdf";
        string path_Original=Server.MapPath(directorioRaiz+NombreArchivoPDF);
        string path_Copia = Server.MapPath(directorioRaiz + "Copia_"+NombreArchivoPDF);

        if (System.IO.File.Exists(path_Original))
        {
            //SI EXISTE EL ARCHIVO EN LA CARPETA, LO MANDA A IMPRIMIR
            Inicia_PrintScript(path_Original, path_Copia);
            ViewData["path_Copia"] = path_Copia;
            //Elimina los archivos , despues de que se imprimio
            // System.IO.File.Delete(path_Original);
            //System.IO.File.Delete(path_Copia);
        }
        else
        {
            //SI NO EXISTE MANDA LLAMAR AL METODO PARA DESCARGAR EL ARCHIVO Y DESPUES IMPRIMIRLO
            Genera_Pdf_Administrativo();
            Inicia_PrintScript(path_Original, path_Copia);
            ViewData["path_Copia"] = path_Copia;
            //Elimina los archivos , despues de que se imprimio
            //System.IO.File.Delete(path_Original);
            //System.IO.File.Delete(path_Copia);
        }
        return View();
    }

second part

public static void Inicia_PrintScript(string Original, string Copia)
    {
        PdfReader reader = new PdfReader(Original);
        PdfStamper stamper = new PdfStamper(reader, new FileStream(Copia, FileMode.Create));
        AcroFields fields = stamper.AcroFields;
        stamper.JavaScript = "this.print(true);\r";
        stamper.FormFlattening = true;
        stamper.Close();
        reader.Close();

View

<iframe src="@ViewData["path_Copia"].ToString()" id="myFrame" frameborder="0" style="border:0;" width="700" height="300"></iframe>
andres martinez
  • 281
  • 1
  • 4
  • 12
  • This seems relevant: https://stackoverflow.com/questions/39007243/cannot-open-local-file-chrome-not-allowed-to-load-local-resource – Brian Apr 30 '19 at 16:39
  • You're trying to load a local resource. That won't work at all once deployed at the server. You need to route the PDF through a controller action. – CodeCaster Apr 30 '19 at 17:57

1 Answers1

1

Well, it's possible to open a PDF with print dialog in another tab.

In your controller you need to get the file in memory just to return it, or generate the file on fly.

public FileResult PDFToReturn()
{
    string filePath = Server.MapPath("Path_to_PDF");
    return File(System.IO.File.ReadAllBytes(filePath), System.Web.MimeMapping.GetMimeMapping(filePath));
}

javascript does the magic.

function printPDF() {
    let link = 'javascript:w=window.open("/Controller/PDFToReturn"); w.print();';
    location.href = link;
}
karritos
  • 344
  • 2
  • 9