andres martinez
andres martinez

Reputation: 291

It's posible print PDF when PDF is open in memorystream?

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>

Upvotes: 0

Views: 762

Answers (1)

karritos
karritos

Reputation: 344

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;
}

Upvotes: 1

Related Questions