HomePageBatesDialogViewModel.cs 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422
  1. using ComPDFKit.PDFDocument;
  2. using PDF_Office.CustomControl;
  3. using PDF_Office.Model.Dialog.HomePageToolsDialogs.HomePageBatchProcessing;
  4. using PDF_Office.Model;
  5. using Prism.Commands;
  6. using Prism.Mvvm;
  7. using Prism.Regions;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Data;
  11. using System.Diagnostics;
  12. using System.IO;
  13. using System.Linq;
  14. using PDF_Office.Helper;
  15. using System.Windows;
  16. using System.Windows.Forms;
  17. using ComPDFKitViewer.PdfViewer;
  18. using Prism.Events;
  19. using PDF_Office.EventAggregators;
  20. using PDFSettings;
  21. namespace PDF_Office.ViewModels.Dialog.HomePageToolsDialogs.HomePageBatchProcessing.HomePageBates
  22. {
  23. public class HomePageBatesDialogViewModel : BindableBase, INavigationAware
  24. {
  25. #region 参数和属性
  26. private List<string> fileNames;
  27. private CPDFDocument tempDocument;
  28. public string PageNumber = "";
  29. public IEventAggregator eventAggregator;
  30. public IRegionManager batesRegion;
  31. private CPDFViewer PDFViewer;
  32. private ViewContentViewModel viewContentViewModel;
  33. public string TemplateListName = "HomePageBatesTemplateListContent";
  34. public string CreateName = "HomePageBatesCreateContent";
  35. public string BatesDocumentName = "HomePageBatesDocumentContent";
  36. public string BatesType = "HomePageBatesType";
  37. public List<int> fileNamesView = new List<int>();
  38. private int fileNamesIndex = 0;
  39. private string _batesSettingsRegionName;
  40. /// <summary>
  41. /// 属性设置Region
  42. /// </summary>
  43. public string BatesSettingsRegionName
  44. {
  45. get { return _batesSettingsRegionName; }
  46. set { _batesSettingsRegionName = value; }
  47. }
  48. private Visibility _batesSettingsVisible = Visibility.Visible;
  49. /// <summary>
  50. /// 属性设置Region可见
  51. /// </summary>
  52. public Visibility BatesSettingsVisible
  53. {
  54. get { return _batesSettingsVisible; }
  55. set { _batesSettingsVisible = value; }
  56. }
  57. private string batesGridIsEnabled = "True";
  58. public string BatesGridIsEnabled
  59. {
  60. get
  61. {
  62. return batesGridIsEnabled;
  63. }
  64. set
  65. {
  66. SetProperty(ref batesGridIsEnabled, value);
  67. }
  68. }
  69. private string setBatesGridIsEnabled = "True";
  70. public string SetBatesGridIsEnabled
  71. {
  72. get
  73. {
  74. return setBatesGridIsEnabled;
  75. }
  76. set
  77. {
  78. SetProperty(ref setBatesGridIsEnabled, value);
  79. }
  80. }
  81. private DataTable pdfDataTable = new DataTable();
  82. public DataTable PDFDataTable
  83. {
  84. get { return pdfDataTable; }
  85. set
  86. {
  87. SetProperty(ref pdfDataTable, value);
  88. }
  89. }
  90. private string removeIsEnable = "False";
  91. public string RemoveIsEnable
  92. {
  93. get { return removeIsEnable; }
  94. set
  95. {
  96. SetProperty(ref removeIsEnable, value);
  97. }
  98. }
  99. private string selectFileName = "False";
  100. public string SelectFileName
  101. {
  102. get { return selectFileName; }
  103. set
  104. {
  105. SetProperty(ref selectFileName, value);
  106. }
  107. }
  108. private Visibility batesVisible = Visibility.Collapsed;
  109. public Visibility BatesVisible
  110. {
  111. get { return batesVisible; }
  112. set { SetProperty(ref batesVisible, value); }
  113. }
  114. private Visibility addFileVisibility = Visibility.Hidden;
  115. public Visibility AddFileVisibility
  116. {
  117. get { return addFileVisibility; }
  118. set
  119. {
  120. SetProperty(ref addFileVisibility, value);
  121. RaisePropertyChanged();
  122. }
  123. }
  124. #endregion
  125. #region 委托声明
  126. public DelegateCommand ADDPDFCommand { get; set; }
  127. public DelegateCommand RemovePDFFileCommand { get; set; }
  128. public DelegateCommand CreateCommand { get; set; }
  129. public DelegateCommand ADDPDFFilesCommand { get; set; }
  130. #endregion
  131. public string Unicode = null;
  132. public HomePageBatesDialogViewModel(IRegionManager batesRegion, IEventAggregator eventAggregator)
  133. {
  134. this.eventAggregator = eventAggregator;
  135. this.batesRegion = batesRegion;
  136. BatesSettingsRegionName = Guid.NewGuid().ToString();
  137. Unicode = App.mainWindowViewModel.SelectedItem.Unicode;
  138. PDFDataTable.Columns.Add("FileName");
  139. PDFDataTable.Columns.Add("FilePageRangeText");
  140. PDFDataTable.Columns.Add("FilePageRangeSelectIndex");
  141. PDFDataTable.Columns.Add("FileSize");
  142. PDFDataTable.Columns.Add("FileState");
  143. ADDPDFCommand = new DelegateCommand(addpicture);
  144. ADDPDFFilesCommand = new DelegateCommand(addpicturefiles);
  145. RemovePDFFileCommand = new DelegateCommand(removepdffile);
  146. CreateCommand = new DelegateCommand(create);
  147. eventAggregator.GetEvent<EditBatesHeaderFooterTemplateItemEvent>().Subscribe(EditBatesTemplateItem, e => e.Unicode == Unicode && e.Type == BatesType);
  148. eventAggregator.GetEvent<EnterTemplateListOrCreateEvent>().Subscribe(EnterTemplateListOrCreate, e => e.Unicode == Unicode);
  149. }
  150. #region 逻辑函数
  151. public void EditBatesTemplateItem(BatesHeaderFooterItemUnicode batesItemunicode)
  152. {
  153. BatesHeaderFooterItem batesItem = batesItemunicode.Status;
  154. NavigationParameters param = new NavigationParameters();
  155. param.Add(ParameterNames.PDFViewer, PDFViewer);
  156. param.Add("BatesItem", batesItem);
  157. batesRegion.RequestNavigate(BatesSettingsRegionName, CreateName, param);
  158. BatesSettingsVisible = Visibility.Visible;
  159. }
  160. public void EnterTemplateListOrCreate(EnumTemplateListOrCreateUnicode enumTemplateListOrCreateunicode)
  161. {
  162. EnumTemplateListOrCreate enumTemplateListOrCreate = enumTemplateListOrCreateunicode.Status;
  163. if (enumTemplateListOrCreate == EnumTemplateListOrCreate.StatusTemplate)
  164. {
  165. EnterSelectedContent(TemplateListName);
  166. }
  167. else
  168. {
  169. EnterSelectedContent(CreateName);
  170. }
  171. }
  172. public void EnterSelectedContent(string SelectedContentName)
  173. {
  174. NavigationParameters param = new NavigationParameters();
  175. param.Add(ParameterNames.PDFViewer, PDFViewer);
  176. batesRegion.RequestNavigate(BatesSettingsRegionName, SelectedContentName, param);
  177. BatesSettingsVisible = Visibility.Visible;
  178. }
  179. private void create()
  180. {
  181. fileNamesIndex = 0;
  182. BatesGridIsEnabled = "False";
  183. foreach (var filename in fileNames)
  184. {
  185. FileInfo fileinfo = new FileInfo(filename);
  186. string OutputPath = fileinfo.DirectoryName;
  187. char[] enumerationSeparator = new char[] { ',' };
  188. char[] rangeSeparator = new char[] { '-' };
  189. List<int> PageIndexLists = new List<int>();
  190. CPDFDocument document = CPDFDocument.InitWithFilePath(filename);
  191. if (document == null)
  192. {
  193. PDFDataTable.Rows[fileNamesIndex]["FileState"] = "文件出错";
  194. continue;
  195. }
  196. if (!CommonHelper.GetPagesInRange(ref PageIndexLists, "1-" + document.PageCount.ToString(), document.PageCount, enumerationSeparator, rangeSeparator))
  197. { //TODO
  198. Trace.WriteLine("输入不对");
  199. MessageBoxEx.Show("输入不对");
  200. return;
  201. }
  202. document.Release();
  203. PDFDataTable.Rows[fileNamesIndex]["FileState"] = "完成";
  204. fileNamesIndex++;
  205. }
  206. BatesGridIsEnabled = "True";
  207. }
  208. #endregion
  209. #region 批量处理逻辑函数
  210. /// <summary>
  211. /// 添加PDF文件
  212. /// </summary>
  213. private void addpicture()
  214. {
  215. System.Windows.Forms.OpenFileDialog dlg = new System.Windows.Forms.OpenFileDialog();
  216. dlg.Multiselect = true;
  217. dlg.Filter = "PDF|*.pdf;*.PDF;";
  218. if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
  219. {
  220. fileNames.AddRange(dlg.FileNames.ToList());
  221. RemoveExcess(ref fileNames);
  222. SetBatesGridIsEnabled = "True";
  223. AddFileVisibility = Visibility.Collapsed;
  224. updateListview("待确定");
  225. }
  226. }
  227. public void addPDFFiles(string filename)
  228. {
  229. fileNames.Add(filename);
  230. RemoveExcess(ref fileNames);
  231. SetBatesGridIsEnabled = "True";
  232. AddFileVisibility = Visibility.Collapsed;
  233. updateListview("待确定");
  234. }
  235. /// <summary>
  236. /// 删除重复的文件
  237. /// </summary>
  238. public void RemoveExcess(ref List<string> Filenames)
  239. {
  240. List<string> filenames = new List<string>();
  241. foreach (var fileName in Filenames)
  242. {
  243. if (!filenames.Contains(fileName))
  244. {
  245. filenames.Add(fileName);
  246. }
  247. }
  248. Filenames.Clear();
  249. Filenames = filenames;
  250. }
  251. /// <summary>
  252. /// 添加PDF文件夹
  253. /// </summary>
  254. private void addpicturefiles()
  255. {
  256. FolderBrowserDialog dialog = new FolderBrowserDialog();
  257. dialog.Description = "请选择文件路径";
  258. if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
  259. {
  260. string foldPath = dialog.SelectedPath;
  261. var apps = System.IO.Directory.GetFiles(foldPath);
  262. foreach (string app in apps)
  263. {
  264. var fi = new FileInfo(app);
  265. if (fi.Extension == ".pdf" || fi.Extension == ".PDF")
  266. {
  267. fileNames.Add(app);
  268. }
  269. }
  270. RemoveExcess(ref fileNames);
  271. updateListview("待确定");
  272. SetBatesGridIsEnabled = "True";
  273. AddFileVisibility = Visibility.Collapsed;
  274. }
  275. }
  276. /// <summary>
  277. /// 更新listview显示
  278. /// state 状态显示字符串
  279. /// </summary>
  280. public void updateListview(string state)
  281. {
  282. DataTable pdfdatatable = new DataTable();
  283. pdfdatatable.Columns.Add("FileName");
  284. pdfdatatable.Columns.Add("FileSize");
  285. pdfdatatable.Columns.Add("FileState");
  286. foreach (var fileName in fileNames)
  287. {
  288. string file_all = fileName;
  289. FileInfo f = new FileInfo(file_all);
  290. string file_size = (((float)f.Length) / 1024).ToString() + " K";
  291. pdfdatatable.Rows.Add(f.Name, file_size, state);
  292. }
  293. PDFDataTable = pdfdatatable;
  294. HomePageBatchProcessingDialogModel.FilePaths = fileNames;
  295. }
  296. /// <summary>
  297. /// 逆序int类型集合
  298. /// </summary>
  299. public void Reverseorder(ref List<int> Numbers)
  300. {
  301. Numbers = Numbers.OrderBy(a => a).ToList();
  302. Numbers.Reverse();
  303. }
  304. /// <summary>
  305. /// 打开文件PDF
  306. /// </summary>
  307. public void openfiledialog()
  308. {
  309. foreach (int filenamesview in fileNamesView)
  310. {
  311. System.Diagnostics.Process.Start(fileNames[filenamesview]);
  312. }
  313. }
  314. /// <summary>
  315. /// 删除文件PDF
  316. /// </summary>
  317. public void removepdffile()
  318. {
  319. Reverseorder(ref fileNamesView);
  320. foreach (int filenamesview in fileNamesView)
  321. {
  322. //Trace.WriteLine(filenamesview);
  323. fileNames.Remove(fileNames[filenamesview]);
  324. }
  325. if (fileNames.Count < 1)
  326. {
  327. SetBatesGridIsEnabled = "False";
  328. AddFileVisibility = Visibility.Visible;
  329. }
  330. updateListview("待确定");
  331. }
  332. public void PDFFileCount()
  333. {
  334. if (fileNames.Count == 0)
  335. {
  336. SetBatesGridIsEnabled = "False";
  337. AddFileVisibility = Visibility.Visible;
  338. }
  339. else
  340. {
  341. SetBatesGridIsEnabled = "True";
  342. AddFileVisibility = Visibility.Collapsed;
  343. }
  344. }
  345. #endregion
  346. #region 构架行为
  347. public void OnNavigatedTo(NavigationContext navigationContext)
  348. {
  349. List<string> filepath = new List<string>();
  350. navigationContext.Parameters.TryGetValue<ViewContentViewModel>(ParameterNames.ViewContentViewModel, out viewContentViewModel);
  351. navigationContext.Parameters.TryGetValue<CPDFViewer>(ParameterNames.PDFViewer, out PDFViewer);
  352. navigationContext.Parameters.TryGetValue<List<string>>(ParameterNames.FilePath, out filepath);
  353. if (filepath != null)
  354. {
  355. fileNames = filepath;
  356. PDFFileCount();
  357. updateListview("待确定");
  358. EnterSelectedContent(TemplateListName);
  359. }
  360. }
  361. public bool IsNavigationTarget(NavigationContext navigationContext)
  362. {
  363. return true;
  364. }
  365. public void OnNavigatedFrom(NavigationContext navigationContext)
  366. {
  367. }
  368. #endregion
  369. }
  370. }