HomePageHeaderFooterDialogViewModel.cs 17 KB

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