AsposeHelper.cs 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. using Aspose.Words;
  2. using System.Data;
  3. using System.Web;
  4. using Ubiety.Dns.Core;
  5. namespace OASystem.API.OAMethodLib.File
  6. {
  7. /// <summary>
  8. /// asponse 文档操作
  9. /// </summary>
  10. public class AsposeHelper
  11. {
  12. #region DownWordToModel
  13. /// <summary>
  14. /// 根据Word模板进行数据的导出Word操作
  15. /// </summary>
  16. /// <param name="tempPath">模板路径</param>
  17. /// <param name="outputFileName">保存文件名称</param>
  18. /// <param name="dic">数据源 key 对应 value</param>
  19. /// <param name="listDt">需要循环的数据DataTable 多个注意DataTableName </param>
  20. /// <returns>返回的文档路径</returns>
  21. public static string ExpertWordToModel(string tempPath, string outputFileName, Dictionary<string,object> dic, List<DataTable>? listDt)
  22. {
  23. try
  24. {
  25. removeWatermark();//加载监听,用于去除水印
  26. List<string> fieldNames=new List<string>(); //字段名字符串数组
  27. List<object> fieldValues = new List<object>(); //字段值数组
  28. foreach (string key in dic.Keys)
  29. {
  30. fieldNames.Add(key);
  31. fieldValues.Add(dic[key]);
  32. }
  33. //载入模板
  34. Document doc = new Document(tempPath);
  35. doc.MailMerge.Execute(fieldNames.ToArray(), fieldValues.ToArray());
  36. //将我们获得的DataTable类型的数据:EduDataTable放入doc方法中做处理
  37. if (listDt != null && listDt.Count > 0)
  38. {
  39. foreach (DataTable dt in listDt)
  40. {
  41. if (dt != null && dt.Rows.Count > 0)
  42. {
  43. doc.MailMerge.ExecuteWithRegions(dt);
  44. }
  45. }
  46. }
  47. //合并模版,相当于页面的渲染
  48. doc.MailMerge.Execute(new[] { "PageCount" }, new object[] { doc.PageCount });
  49. //保存合并后的文档
  50. string outputPath = string.Format("C:\\Server\\File\\OA2023\\Office\\Word\\TencentOCR\\Save\\{0}", outputFileName);
  51. doc.Save(outputPath);
  52. return outputPath; //返回下载地址
  53. }
  54. catch (Exception er)
  55. {
  56. return er.Message;
  57. }
  58. }
  59. /// <summary>
  60. /// 加载监听,用于去除水印
  61. /// </summary>
  62. public static void removeWatermark()
  63. {
  64. 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=")));
  65. }
  66. #endregion
  67. #region DownExcelToModel
  68. /// <summary>
  69. /// 根据Word模板进行数据的导出Word操作
  70. /// </summary>
  71. /// <param name="tempPath">模板路径</param>
  72. /// <param name="outputPath">保存路径</param>
  73. /// <param name="dic">数据源 key 对应 value</param>
  74. /// <param name="listDt">需要循环的数据DataTable 多个注意DataTableName </param>
  75. /// <returns>返回的文档路径</returns>
  76. public static string ExpertExcelToModel(string tempPath, string outputFileName, Dictionary<string, object> dic, List<DataTable>? listDt)
  77. {
  78. try
  79. {
  80. removeWatermark();//加载监听,用于去除水印
  81. List<string> fieldNames = new List<string>(); //字段名字符串数组
  82. List<object> fieldValues = new List<object>(); //字段值数组
  83. foreach (string key in dic.Keys)
  84. {
  85. fieldNames.Add(key);
  86. fieldValues.Add(dic[key]);
  87. }
  88. //载入模板
  89. Document doc = new Document(tempPath);
  90. doc.MailMerge.Execute(fieldNames.ToArray(), fieldValues.ToArray());
  91. //将我们获得的DataTable类型的数据:EduDataTable放入doc方法中做处理
  92. if (listDt != null && listDt.Count > 0)
  93. {
  94. foreach (DataTable dt in listDt)
  95. {
  96. if (dt != null && dt.Rows.Count > 0)
  97. {
  98. doc.MailMerge.ExecuteWithRegions(dt);
  99. }
  100. }
  101. }
  102. //合并模版,相当于页面的渲染
  103. doc.MailMerge.Execute(new[] { "PageCount" }, new object[] { doc.PageCount });
  104. //保存合并后的文档
  105. doc.Save(outputFileName);
  106. return outputFileName; //返回下载地址
  107. }
  108. catch (Exception er)
  109. {
  110. return er.Message;
  111. }
  112. }
  113. #endregion
  114. }
  115. }