在内存流中打开PDF时可以打印PDF吗?

时间:2019-04-30 16:11:05

标签: c# html asp.net-mvc pdf printing

在memorystram中打开时可能的打开打印对话框? 实际上,我将pdf保存在“〜/ App_Data / Rep_PDF /” 中,并在iframe中显示了pdf后,但由于我收到一条消息而无法这样做:

“不允许加载本地资源: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“

您能帮我如何在asp mvc中打印pdf?

这是我的代码的一部分:

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

第二部分

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();

查看

<iframe src="@ViewData["path_Copia"].ToString()" id="myFrame" frameborder="0" style="border:0;" width="700" height="300"></iframe>

1 个答案:

答案 0 :(得分:1)

好吧,可以在另一个选项卡中打开带有打印对话框的PDF。

在您的控制器中,您需要将文件保存在内存中以将其返回,或动态生成文件。

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

javascript发挥了魔力。

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