asp.Netmvc html PDF転送を実現

2984 ワード

説明:
  • 伝達されたパラメータ文字が多すぎる場合、getの要求を行うために圧縮する必要がある.
  • _domainはプロファイルの構成です:;
  • _hqPdfFilePathは同様にプロファイルのPDF保存パスである.
  • HtmlToPdf.exeはダウンロード、ダウンロードアドレスにアクセスできるプログラムです.https://download.csdn.net/download/qq_35481871/12197661
  • はasp.Netmvcでreturn Fileでダウンロードファイルを実現するには、ダウンロードファイル名をエンコードUrlに注意する必要がある.Encode(downName)エラーまたはファイル名の文字化けしが発生する可能性があります
  •         protected static readonly string _domain = ConfigurationManager.AppSettings["Domain"];
    
            /// 
            ///   Pdf   
            /// 
            /// 
            /// 
            /// 
            /// 
            [HttpPost]
            public ActionResult DownSchedulePdf(string RouteBase, string RouteList, string DownName)
            {
                var downName = DownName + ".pdf";//    
                var pdfname = "hq" + DateTime.Now.ToString("HHmmssffff") + ".pdf";//  pdf              
                var _pdfFilePath = _hqPdfFilePath + pdfname;//pdf    
                try
                {
                    #region      
                    byte[] b1 = Compress(RouteBase);
                    var routeBase = Convert.ToBase64String(b1);
    
                    byte[] b2 = Compress(RouteList);
                    var routeList = Convert.ToBase64String(b2);
                    #endregion
    
                    var pageUrl = "";
                    if (_mvcTest == "Y")
                    {
                        pageUrl = "http://localhost" + Url.Action("SchedulePdf", "DownLoad", new { RouteBase = routeBase, RouteList = routeList });
                    }
                    else
                    {
                        pageUrl = _domain + Url.Action("SchedulePdf", "DownLoad", new { RouteBase = routeBase, RouteList = routeList });
                    }
    
                    //              
                    if (!Directory.Exists(_hqPdfFilePath))
                    {
                        Directory.CreateDirectory(_hqPdfFilePath);
                    }
                    
                    #region   html pdf  
                    //  
                    string str = Server.MapPath("~/Exes/HtmlToPdf.exe");
                    //  
                    var arguments = " \"" + pageUrl + "\" " + _pdfFilePath;
                    Process p = Process.Start(str, arguments);
                    p.StartInfo.UseShellExecute = false;
                    p.StartInfo.RedirectStandardInput = true;
                    p.StartInfo.RedirectStandardOutput = true;
                    p.StartInfo.RedirectStandardError = true;
                    p.WaitForExit();//               
                    p.Close();
                    #endregion
                }
                catch (Exception e)
                {
                    Log.InfoFormat("error:{0}", e.Message);
                }
                return File(_pdfFilePath, "text/plain", Url.Encode(downName));
            }