From 68a5595b9faf431c9464689f3878465af6bdf25b Mon Sep 17 00:00:00 2001
From: whm <86whm@163.com>
Date: Fri, 14 Apr 2023 14:07:24 +0800
Subject: [PATCH] =?UTF-8?q?=E9=80=9A=E7=94=A8json=E6=89=93=E5=8D=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Controllers/ReportController.cs | 127 ++++++++++++++++++
1 file changed, 127 insertions(+)
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);
+ }
+
///
/// 根据文件名获取文件
///