diff --git a/Myshipping.Report/Controllers/ReportController.cs b/Myshipping.Report/Controllers/ReportController.cs index dd2ccafe..b3629a20 100644 --- a/Myshipping.Report/Controllers/ReportController.cs +++ b/Myshipping.Report/Controllers/ReportController.cs @@ -13,6 +13,8 @@ using Myshipping.Report.DB; using Myshipping.Application.Entity; using System.Text; using Myshipping.Core.Entity; +using System.Management; +using Microsoft.Ajax.Utilities; namespace Myshipping.Report.Controllers { @@ -135,6 +137,131 @@ namespace Myshipping.Report.Controllers return Json(resp); } + /// + /// 打印报表文件 + /// + /// + [HttpPost] + public ActionResult PrintReport() + { + var resp = new RespCommonData(); + + var printType = Request.Form["printType"]; + if (printType != "pdf" + && printType != "xlsx" + && printType != "docx") + { + resp.Success = false; + resp.Message = $"打印类型不正确:{printType},应该为pdf、xlsx、docx中的一个"; + return Json(resp); + } + + var dicJson = new Dictionary(); + Request.Form.AllKeys + .Where(x => x.StartsWith("dataJson")) + .ForEach(x => + { + dicJson.Add(x.Replace("dataJson", ""), Request.Form[x]); + }); + + + if (Request.Files.Count > 0) + { + try + { + var savePath = ConfigurationManager.AppSettings["ReportFileSavePath"]; + if (string.IsNullOrEmpty(savePath)) //未配置保存路径时,使用当前目录 + { + savePath = Server.MapPath("~/ReportFiles"); + } + + if (!Directory.Exists(savePath)) + { + Directory.CreateDirectory(savePath); + } + + var fileExt = Path.GetExtension(Request.Files[0].FileName).ToLower(); + if (fileExt != ".frx") + { + resp.Success = false; + resp.Message = $"文件类型不正确:{fileExt}"; + return Json(resp); + } + + var tmpFile = Path.Combine(savePath, $"{Guid.NewGuid()}{fileExt}"); + Request.Files[0].SaveAs(tmpFile); + + log.Debug($"临时保存模板文件:{tmpFile}"); + + //生成报表 + FastReport.Report report = new FastReport.Report(); + report.Load(tmpFile); + + foreach (FastReport.Data.JsonConnection.JsonDataSourceConnection conn in report.Dictionary.Connections) + { + if (dicJson.ContainsKey(conn.Name)) + { + conn.ConnectionString = $"Json={Convert.ToBase64String(Encoding.UTF8.GetBytes(dicJson[conn.Name]))};Encoding=utf-8"; + } + } + + report.Prepare(); + + if (printType == "pdf") //pdf + { + var fileName = $"{DateTime.Now.Ticks}.pdf"; + var saveFile = Path.Combine(savePath, fileName); + PDFExport pdfExport = new PDFExport(); + pdfExport.Export(report, saveFile); + resp.Success = true; + resp.Message = "生成成功"; + resp.Data = fileName; + } + else if (printType == "xlsx") // + { + var fileName = $"{DateTime.Now.Ticks}.xlsx"; + var saveFile = Path.Combine(savePath, fileName); + Excel2007Export excelExport = new Excel2007Export(); + excelExport.Export(report, saveFile); + resp.Success = true; + resp.Message = "生成成功"; + resp.Data = fileName; + } + else if (printType == "docx") // + { + var fileName = $"{DateTime.Now.Ticks}.docx"; + var saveFile = Path.Combine(savePath, fileName); + Word2007Export excelExport = new Word2007Export(); + excelExport.Export(report, saveFile); + resp.Success = true; + resp.Message = "生成成功"; + resp.Data = fileName; + } + else + { + resp.Success = false; + resp.Message = "类型参数不正确"; + } + + return Json(resp); + } + catch (Exception ex) + { + resp.Success = false; + resp.Message = ex.Message; + log.Error(ex.Message); + log.Error(ex.StackTrace); + } + } + else + { + resp.Success = false; + resp.Message = "未上传模板文件"; + } + + return Json(resp); + } + /// /// 根据文件名获取文件 ///