HomePageSplitDialogModel.cs 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336
  1. using PDF_Master.CustomControl;
  2. using Prism.Mvvm;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Text.RegularExpressions;
  8. using System.Threading.Tasks;
  9. namespace PDF_Master.Model.HomePageToolsDialogs
  10. {
  11. public class HomePageSplitDialogModel : BindableBase
  12. {
  13. /// <summary>
  14. /// 拆分模式
  15. /// </summary>
  16. public SplitMode Mode = SplitMode.AveragePages;
  17. /// <summary>
  18. /// 页面范围形式
  19. /// </summary>
  20. public PageRangeMode PageMode = PageRangeMode.OddPage;
  21. /// <summary>
  22. /// 拆分模式份数或者页数
  23. /// </summary>
  24. public int GetModeCount = 1;
  25. /// <summary>
  26. /// 页面信息
  27. /// </summary>
  28. public string PageRange = "";
  29. private int pageSelectedIndex = 1;
  30. public int PageSelectedIndex
  31. {
  32. get { return pageSelectedIndex; }
  33. set
  34. {
  35. SetProperty(ref pageSelectedIndex, value);
  36. switch (value)
  37. {
  38. case 1:
  39. PageMode = PageRangeMode.OddPage;
  40. break;
  41. case 2:
  42. PageMode = PageRangeMode.EvenPage;
  43. break;
  44. case 3:
  45. PageMode = PageRangeMode.CustomPage;
  46. break;
  47. default:
  48. break;
  49. }
  50. }
  51. }
  52. private double pageNum = 1;
  53. /// <summary>
  54. /// 平均页数
  55. /// </summary>
  56. public double PageNum
  57. {
  58. get { return pageNum; }
  59. set
  60. {
  61. SetProperty(ref pageNum, value);
  62. GetModeCount = (int)value;
  63. }
  64. }
  65. private double filesCount = 1;
  66. /// <summary>
  67. /// 平均文件数
  68. /// </summary>
  69. public double FilesCount
  70. {
  71. get { return filesCount; }
  72. set
  73. {
  74. SetProperty(ref filesCount, value);
  75. GetModeCount = (int)value;
  76. }
  77. }
  78. private bool isAveragePages = true;
  79. /// <summary>
  80. /// 平均按页拆分 是否选中
  81. /// </summary>
  82. public bool IsAveragePages
  83. {
  84. get { return isAveragePages; }
  85. set
  86. {
  87. SetProperty(ref isAveragePages, value);
  88. if (value)
  89. {
  90. Mode = SplitMode.AveragePages;
  91. }
  92. }
  93. }
  94. private bool isAveragePDF = false;
  95. /// <summary>
  96. /// 平均按PDF拆分 是否选中
  97. /// </summary>
  98. public bool IsAveragePDF
  99. {
  100. get { return isAveragePDF; }
  101. set
  102. {
  103. SetProperty(ref isAveragePDF, value);
  104. if (value)
  105. {
  106. Mode = SplitMode.AverageFiles;
  107. }
  108. }
  109. }
  110. private bool isCustomRange = false;
  111. /// <summary>
  112. /// 自定义页面范围,是否选中
  113. /// </summary>
  114. public bool IsCustomRange
  115. {
  116. get { return isCustomRange; }
  117. set
  118. {
  119. SetProperty(ref isCustomRange, value);
  120. if (value)
  121. {
  122. Mode = SplitMode.CustomPageRange;
  123. }
  124. }
  125. }
  126. /// <summary>
  127. /// 文件名标签
  128. /// </summary>
  129. private string fileNameLabel = "part";
  130. public string FileNameLabel
  131. {
  132. get { return fileNameLabel; }
  133. set
  134. {
  135. SetProperty(ref fileNameLabel, value);
  136. RefreshFileName();
  137. }
  138. }
  139. private bool hasLabel = true;
  140. /// <summary>
  141. /// 是否含有标签
  142. /// </summary>
  143. public bool HasLabel
  144. {
  145. get { return hasLabel; }
  146. set
  147. {
  148. SetProperty(ref hasLabel, value);
  149. RefreshFileName();
  150. }
  151. }
  152. /// <summary>
  153. /// 文件名与标签分隔符
  154. /// </summary>
  155. private string fileNameDeimiter = "-";
  156. public string FileNameDeimiter
  157. {
  158. get { return fileNameDeimiter; }
  159. set
  160. {
  161. SetProperty(ref fileNameDeimiter, value);
  162. // 拆分 分割符 特殊字符判断
  163. if (string.IsNullOrEmpty(fileNameDeimiter) == false)
  164. {
  165. string pattern = @"[\\\/:*?""<>|.]"; // 定义不允许出现的字符的正则表达式模式
  166. Regex regex = new Regex(pattern);
  167. //if (regex.IsMatch(fileName))
  168. //{
  169. char[] invalidChars = { '\\', '/', ':', '*', '?', '"', '<', '>', '|', '.' };
  170. //英文
  171. if (fileNameDeimiter.IndexOfAny(invalidChars) != -1)
  172. {
  173. fileNameDeimiter = string.Empty;
  174. Console.WriteLine("文件名包含不允许的字符");
  175. // 进行报错处理的代码逻辑
  176. AlertsMessage alertsMessage = new AlertsMessage();
  177. string illegalChars = @"\ /<>:|""?*";
  178. alertsMessage.ShowDialog($"{App.MainPageLoader.GetString("PageEdite_SplitErroTitle")}", $"{App.MainPageLoader.GetString("PageEdite_SplitErroContent")}{illegalChars}", App.ServiceLoader.GetString("Text_ok"), IconType.Tip);
  179. }
  180. }
  181. RefreshFileName();
  182. }
  183. }
  184. private bool hasDeimiter = true;
  185. /// <summary>
  186. /// 是否含有分隔符
  187. /// </summary>
  188. public bool HasDeimiter
  189. {
  190. get { return hasDeimiter; }
  191. set
  192. {
  193. SetProperty(ref hasDeimiter, value);
  194. RefreshFileName();
  195. }
  196. }
  197. /// <summary>
  198. /// 文件名与标签分隔符
  199. /// </summary>
  200. public bool FrontFileName = true;
  201. /// <summary>
  202. /// 页码 存入页码范围;
  203. /// </summary>
  204. public List<int> PageParm = new List<int> { };
  205. /// <summary>
  206. /// 文件名;
  207. /// </summary>
  208. private string fileName = "";
  209. public string FileName
  210. {
  211. get { return fileName; }
  212. set
  213. {
  214. SetProperty(ref fileName, value);
  215. }
  216. }
  217. private bool isSourceNameFront = true;
  218. /// <summary>
  219. /// 原始文档名前置
  220. /// </summary>
  221. public bool IsSourceNameFront
  222. {
  223. get { return isSourceNameFront; }
  224. set
  225. {
  226. SetProperty(ref isSourceNameFront, value);
  227. RefreshFileName();
  228. }
  229. }
  230. private string sourceName;
  231. /// <summary>
  232. /// 原始文件名
  233. /// </summary>
  234. public string SourceFileName
  235. {
  236. get { return sourceName; }
  237. set
  238. {
  239. SetProperty(ref sourceName, value);
  240. RefreshFileName();
  241. }
  242. }
  243. /// <summary>
  244. /// 刷新文件名
  245. /// </summary>
  246. public void RefreshFileName()
  247. {
  248. string label = HasLabel ? FileNameLabel : "";
  249. string deimiter = HasDeimiter ? FileNameDeimiter : "";
  250. if (isSourceNameFront)
  251. {
  252. FileName = SourceFileName + deimiter + label + "1" + ".pdf";
  253. }
  254. else
  255. {
  256. FileName = label + "1" + deimiter + SourceFileName + ".pdf";
  257. }
  258. }
  259. public enum SplitMode
  260. {
  261. /// <summary>
  262. /// 按页平均拆分
  263. /// </summary>
  264. AveragePages,
  265. /// <summary>
  266. /// 按文件平均拆分
  267. /// </summary>
  268. AverageFiles,
  269. /// <summary>
  270. /// 自定义页码范围拆分
  271. /// </summary>
  272. CustomPageRange
  273. }
  274. public enum PageRangeMode
  275. {
  276. /// <summary>
  277. /// 奇数页
  278. /// </summary>
  279. OddPage,
  280. /// <summary>
  281. /// 偶数页
  282. /// </summary>
  283. EvenPage,
  284. /// <summary>
  285. /// 自定义页面范围
  286. /// </summary>
  287. CustomPage
  288. }
  289. }
  290. }