Browse Source

新增 AsposeHelper

leiy 3 năm trước cách đây
mục cha
commit
24b4c00699

+ 0 - 1
OASystem/OASystem.Api/Controllers/GroupsController.cs

@@ -1,7 +1,6 @@
 using Microsoft.AspNetCore.Mvc;
 using Newtonsoft.Json.Serialization;
 using OASystem.API.OAMethodLib;
-using OASystem.API.OAMethodLibs;
 using OASystem.Domain.Dtos.Groups;
 using OASystem.Domain.Entities.Groups;
 using OASystem.Domain.ViewModels.Groups;

+ 25 - 2
OASystem/OASystem.Api/Controllers/TencentOCRController.cs

@@ -1,8 +1,11 @@
-using OASystem.API.OAMethodLib.TencentCloudAPI;
+using OASystem.API.OAMethodLib.File;
+using OASystem.API.OAMethodLib.NPOI;
+using OASystem.API.OAMethodLib.TencentCloudAPI;
 using OASystem.Domain.Dtos.CRM;
 using OASystem.Domain.Dtos.Tencent;
 using OASystem.Domain.ViewModels.TencentOCR;
 using OASystem.Infrastructure.Repositories.CRM;
+using Org.BouncyCastle.Crypto;
 using StackExchange.Redis;
 using System.Net.NetworkInformation;
 using TencentCloud.Ocr.V20181119.Models;
@@ -107,7 +110,7 @@ namespace OASystem.API.Controllers
                     CerdAddress = idCardData.Data.Address,
                 });
 
-            IDCardOCRView iDCardOCRView = new IDCardOCRView()
+            IDCardOCRAndDownUrlView iDCardOCRView = new IDCardOCRAndDownUrlView()
             {
                 Status = cerdStatus,
                 Name = idCardData.Data.Name,
@@ -120,6 +123,26 @@ namespace OASystem.API.Controllers
                 ValidDate = idCardData.Data.ValidDate
             };
 
+            #region word生成 返回地址
+            string tempPath = string.Format("{0}", "C:\\Server\\File\\OA2023\\Office\\Word\\TencentOCR\\Template\\ocr_身份证(人像面).doc");
+
+            Dictionary<string, object> dic = new Dictionary<string, object>();
+            dic.Add("Name", iDCardOCRView.Name);
+            dic.Add("Sex", iDCardOCRView.Sex);
+            dic.Add("Nation", iDCardOCRView.Nation);
+            dic.Add("Birth", iDCardOCRView.Birth);
+            dic.Add("Address", iDCardOCRView.Address);
+            dic.Add("IdNum", iDCardOCRView.IdNum);
+            dic.Add("Authority", iDCardOCRView.Authority);
+            dic.Add("ValidDate", iDCardOCRView.ValidDate);
+
+            string downPath = string.Format("C:\\Server\\File\\OA2023\\Office\\Word\\TencentOCR\\Save\\{0}.doc",
+                dic["Name"].ToString() + "身份证(人像面)" + DateTime.Now.ToString("yyyyMMddHHmmss"));
+
+            string serverPathh = AsposeHelper.ExpertWordToModel(tempPath, downPath, dic, null);
+            iDCardOCRView.DownUrl = serverPathh.Replace("C:", "http:\\132.232.92.186");
+            #endregion
+
             return Ok(JsonView(iDCardOCRView));
         }
 

+ 77 - 0
OASystem/OASystem.Api/OAMethodLib/File/AsposeHelper.cs

@@ -0,0 +1,77 @@
+using Aspose.Words;
+using System.Data;
+using System.Web;
+using Ubiety.Dns.Core;
+
+namespace OASystem.API.OAMethodLib.File
+{
+    /// <summary>
+    /// asponse 文档操作
+    /// </summary>
+    public class AsposeHelper
+    {
+
+        #region downWordToModel
+
+        /// <summary>
+        /// 根据Word模板进行数据的导出Word操作
+        /// </summary>
+        /// <param name="tempPath">模板路径</param>
+        /// <param name="outputPath">保存路径</param>
+        /// <param name="dic">数据源 key 对应 value</param>
+        /// <param name="listDt">需要循环的数据DataTable  多个注意DataTableName </param>
+        /// <returns>返回的文档路径</returns>
+        public static string ExpertWordToModel(string tempPath, string outputPath, Dictionary<string,object> dic, List<DataTable>? listDt)
+        {
+            try
+            {
+                removeWatermark();//加载监听,用于去除水印
+
+                List<string> fieldNames=new List<string>();  //字段名字符串数组
+                List<object> fieldValues = new List<object>(); //字段值数组
+
+                foreach (string key in dic.Keys) 
+                {
+                    fieldNames.Add(key);
+                    fieldValues.Add(dic[key]);
+                }
+
+                //载入模板
+                Document doc = new Document(tempPath);
+                doc.MailMerge.Execute(fieldNames.ToArray(), fieldValues.ToArray());
+                //将我们获得的DataTable类型的数据:EduDataTable放入doc方法中做处理
+                if (listDt != null && listDt.Count > 0) 
+                {
+                    foreach (DataTable dt in listDt)
+                    {
+                        if (dt != null && dt.Rows.Count > 0)
+                        {
+                            doc.MailMerge.ExecuteWithRegions(dt);
+                        }
+                    }
+                }
+                
+                //合并模版,相当于页面的渲染
+                doc.MailMerge.Execute(new[] { "PageCount" }, new object[] { doc.PageCount });
+                //保存合并后的文档
+                doc.Save(outputPath); 
+                return outputPath; //返回下载地址
+            }
+            catch (Exception er)
+            {
+                return er.Message;
+            }
+        }
+        
+        /// <summary>
+        /// 加载监听,用于去除水印
+        /// </summary>
+        public static void removeWatermark()
+        {
+            new Aspose.Words.License().SetLicense(new MemoryStream(Convert.FromBase64String("PExpY2Vuc2U+CiAgPERhdGE+CiAgICA8TGljZW5zZWRUbz5TdXpob3UgQXVuYm94IFNvZnR3YXJlIENvLiwgTHRkLjwvTGljZW5zZWRUbz4KICAgIDxFbWFpbFRvPnNhbGVzQGF1bnRlYy5jb208L0VtYWlsVG8+CiAgICA8TGljZW5zZVR5cGU+RGV2ZWxvcGVyIE9FTTwvTGljZW5zZVR5cGU+CiAgICA8TGljZW5zZU5vdGU+TGltaXRlZCB0byAxIGRldmVsb3BlciwgdW5saW1pdGVkIHBoeXNpY2FsIGxvY2F0aW9uczwvTGljZW5zZU5vdGU+CiAgICA8T3JkZXJJRD4yMDA2MDIwMTI2MzM8L09yZGVySUQ+CiAgICA8VXNlcklEPjEzNDk3NjAwNjwvVXNlcklEPgogICAgPE9FTT5UaGlzIGlzIGEgcmVkaXN0cmlidXRhYmxlIGxpY2Vuc2U8L09FTT4KICAgIDxQcm9kdWN0cz4KICAgICAgPFByb2R1Y3Q+QXNwb3NlLlRvdGFsIGZvciAuTkVUPC9Qcm9kdWN0PgogICAgPC9Qcm9kdWN0cz4KICAgIDxFZGl0aW9uVHlwZT5FbnRlcnByaXNlPC9FZGl0aW9uVHlwZT4KICAgIDxTZXJpYWxOdW1iZXI+OTM2ZTVmZDEtODY2Mi00YWJmLTk1YmQtYzhkYzBmNTNhZmE2PC9TZXJpYWxOdW1iZXI+CiAgICA8U3Vic2NyaXB0aW9uRXhwaXJ5PjIwMjEwODI3PC9TdWJzY3JpcHRpb25FeHBpcnk+CiAgICA8TGljZW5zZVZlcnNpb24+My4wPC9MaWNlbnNlVmVyc2lvbj4KICAgIDxMaWNlbnNlSW5zdHJ1Y3Rpb25zPmh0dHBzOi8vcHVyY2hhc2UuYXNwb3NlLmNvbS9wb2xpY2llcy91c2UtbGljZW5zZTwvTGljZW5zZUluc3RydWN0aW9ucz4KICA8L0RhdGE+CiAgPFNpZ25hdHVyZT5wSkpjQndRdnYxV1NxZ1kyOHFJYUFKSysvTFFVWWRrQ2x5THE2RUNLU0xDQ3dMNkEwMkJFTnh5L3JzQ1V3UExXbjV2bTl0TDRQRXE1aFAzY2s0WnhEejFiK1JIWTBuQkh1SEhBY01TL1BSeEJES0NGbWg1QVFZRTlrT0FxSzM5NVBSWmJRSGowOUNGTElVUzBMdnRmVkp5cUhjblJvU3dPQnVqT1oyeDc4WFE9PC9TaWduYXR1cmU+CjwvTGljZW5zZT4=")));
+        }
+        #endregion
+
+       
+    }
+}

+ 146 - 0
OASystem/OASystem.Api/OAMethodLib/File/NPOIHelper.cs

@@ -0,0 +1,146 @@
+//using NPOI.XWPF.UserModel;
+
+namespace OASystem.API.OAMethodLib.NPOI
+{
+    /// <summary>
+    /// word / excel 
+    /// </summary>
+    public class NPOIHelper
+    {
+        //#region Word
+        ///// <summary>
+        ///// 输出模板docx文档(使用字典)
+        ///// </summary>
+        ///// <param name="tempFilePath">docx文件路径</param>
+        ///// <param name="outPath">输出文件路径</param>
+        ///// <param name="data">字典数据源</param>
+        //public static void Export(string tempFilePath, string outPath, Dictionary<string, string> data)
+        //{
+        //    try
+        //    {
+        //        using (FileStream stream = File.OpenRead(tempFilePath ))
+        //        {
+        //            XWPFDocument doc = new XWPFDocument(stream);
+        //            //遍历段落                  
+        //            foreach (var para in doc.Paragraphs)
+        //            {
+        //                ReplaceKey(para, data);
+        //            }
+
+        //            //遍历表格      
+        //            foreach (var table in doc.Tables)
+        //            {
+        //                foreach (var row in table.Rows)
+        //                {
+        //                    foreach (var cell in row.GetTableCells())
+        //                    {
+        //                        foreach (var para in cell.Paragraphs)
+        //                        {
+        //                            ReplaceKey(para, data);
+        //                        }
+        //                    }
+        //                }
+        //            }
+
+        //            //写文件
+        //            FileStream outFile = new FileStream(outPath, FileMode.Create);
+        //            doc.Write(outFile);
+        //            outFile.Close();
+        //        }
+        //    }
+        //    catch (Exception ex)
+        //    {
+
+        //        throw;
+        //    }
+            
+        //}
+        //private static void ReplaceKey(XWPFParagraph para, Dictionary<string, string> data)
+        //{
+        //    string text = "";
+        //    foreach (var run in para.Runs)
+        //    {
+        //        text = run.ToString();
+        //        foreach (var key in data.Keys)
+        //        {
+        //            //$$模板中数据占位符为$KEY$
+        //            if (text.Contains($"${key}$"))
+        //            {
+        //                text = text.Replace($"${key}$", data[key]);
+        //            }
+        //        }
+        //        run.SetText(text, 0);
+        //    }
+        //}
+
+        ///// <summary>
+        ///// 输出模板docx文档(使用反射)
+        ///// </summary>
+        ///// <param name="tempFilePath">docx文件路径</param>
+        ///// <param name="outPath">输出文件路径</param>
+        ///// <param name="data">对象数据源</param>
+        //public static void ExportObjet(string tempFilePath, string outPath, object data)
+        //{
+        //    using (FileStream stream = File.OpenRead(tempFilePath))
+        //    {
+        //        XWPFDocument doc = new XWPFDocument(stream);
+        //        //遍历段落                  
+        //        foreach (var para in doc.Paragraphs)
+        //        {
+        //            ReplaceKeyObjet(para, data);
+        //        }
+        //        //遍历表格      
+        //        foreach (var table in doc.Tables)
+        //        {
+        //            foreach (var row in table.Rows)
+        //            {
+        //                foreach (var cell in row.GetTableCells())
+        //                {
+        //                    foreach (var para in cell.Paragraphs)
+        //                    {
+        //                        ReplaceKeyObjet(para, data);
+        //                    }
+        //                }
+        //            }
+        //        }
+        //        //写文件
+        //        FileStream outFile = new FileStream(outPath, FileMode.Create);
+        //        doc.Write(outFile);
+        //        outFile.Close();
+        //    }
+        //}
+        //private static void ReplaceKeyObjet(XWPFParagraph para, object model)
+        //{
+        //    string text = "";
+        //    Type t = model.GetType();
+        //    PropertyInfo[] pi = t.GetProperties();
+        //    foreach (var run in para.Runs)
+        //    {
+        //        text = run.ToString();
+        //        foreach (PropertyInfo p in pi)
+        //        {
+        //            //$$模板中数据占位符为$KEY$
+        //            string key = $"${p.Name}$";
+        //            if (text.Contains(key))
+        //            {
+        //                try
+        //                {
+        //                    text = text.Replace(key, p.GetValue(model, null).ToString());
+        //                }
+        //                catch (Exception ex)
+        //                {
+        //                    //可能有空指针异常
+        //                    text = text.Replace(key, "");
+        //                }
+        //            }
+        //        }
+        //        run.SetText(text, 0);
+        //    }
+        //}
+        //#endregion
+
+
+
+
+    }
+}

+ 1 - 0
OASystem/OASystem.Api/OASystem.API.csproj

@@ -20,6 +20,7 @@
   </ItemGroup>
 
   <ItemGroup>
+    <PackageReference Include="Aspose.Words" Version="21.8.0" />
     <PackageReference Include="Autofac" Version="6.4.0" />
     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
     <PackageReference Include="AutoMapper" Version="12.0.0" />

+ 8 - 0
OASystem/OASystem.Domain/ViewModels/TencentOCR/IDCardOCRView.cs

@@ -57,4 +57,12 @@ namespace OASystem.Domain.ViewModels.TencentOCR
         /// </summary>
         public string ValidDate { get; set; }
     }
+
+    public class IDCardOCRAndDownUrlView : IDCardOCRView
+    {
+        /// <summary>
+        /// 下载文档地址
+        /// </summary>
+        public string DownUrl { get; set; }
+    }
 }

+ 1 - 0
OASystem/OASystem.Infrastructure/Tools/CommonFun.cs

@@ -234,4 +234,5 @@ public static class CommonFun
     }
 
     #endregion
+
 }