ConverterExcelDialogViewModel.cs 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486
  1. using ComDocumentAIKit;
  2. using ComPDFKit_Conversion.Options;
  3. using ComPDFKitViewer.PdfViewer;
  4. using PDF_Master.CustomControl;
  5. using PDF_Master.Helper;
  6. using PDF_Master.Model;
  7. using PDF_Master.Model.Dialog.ConverterDialogs;
  8. using PDF_Master.Model.Dialog.HomePageToolsDialogs.HomePageBatchProcessing;
  9. using PDF_Master.ViewModels.Dialog.HomePageToolsDialogs.HomePageBatchProcessing.HomePageConverter;
  10. using Prism.Commands;
  11. using Prism.Mvvm;
  12. using Prism.Services.Dialogs;
  13. using System;
  14. using System.Collections.Generic;
  15. using System.Diagnostics;
  16. using System.IO;
  17. using System.Linq;
  18. using System.Windows.Forms;
  19. using DialogResult = Prism.Services.Dialogs.DialogResult;
  20. namespace PDF_Master.ViewModels.Dialog.ConverterDialogs
  21. {
  22. public class ConverterExcelDialogViewModel : BindableBase, IDialogAware
  23. {
  24. public string Title => "";
  25. public event Action<IDialogResult> RequestClose;
  26. #region 参数和属性
  27. public ConverterExcelDialogModel ConverterExcelModel = new ConverterExcelDialogModel();
  28. public CPDFViewer currentViewer;
  29. public string CurrentPageIndex = "1";
  30. public bool IsCurrentPageIndex = false;
  31. public IDialogService dialogs;
  32. public string PageRangeText { set; get; } = "0";
  33. public string PageRangeSelectIndex { set; get; } = "0";
  34. private int _anyContentSelectIndex = 0;
  35. public int AnyContentSelectIndex
  36. {
  37. get { return _anyContentSelectIndex; }
  38. set
  39. {
  40. SetProperty(ref _anyContentSelectIndex, value);
  41. AnyContent(_anyContentSelectIndex);
  42. }
  43. }
  44. private int _onlyTableSelectIndex = 0;
  45. public int OnlyTableSelectIndex
  46. {
  47. get { return _onlyTableSelectIndex; }
  48. set
  49. {
  50. SetProperty(ref _onlyTableSelectIndex, value);
  51. OnlyTable(_onlyTableSelectIndex);
  52. }
  53. }
  54. private int maxPageRange = 0;
  55. public int MaxPageRange
  56. {
  57. get { return maxPageRange; }
  58. set
  59. {
  60. SetProperty(ref maxPageRange, value);
  61. }
  62. }
  63. private bool oCRCheckBoxIsCheckBox = true;
  64. public bool OCRCheckBoxIsCheckBox
  65. {
  66. get { return oCRCheckBoxIsCheckBox; }
  67. set
  68. {
  69. SetProperty(ref oCRCheckBoxIsCheckBox, value);
  70. ConverterExcelModel.Options.IsAllowOCR = oCRCheckBoxIsCheckBox;
  71. }
  72. }
  73. private int languageSelectedIndex = 2;
  74. public int LanguageSelectedIndex
  75. {
  76. get { return languageSelectedIndex; }
  77. set
  78. {
  79. SetProperty(ref languageSelectedIndex, value);
  80. SelectLanguage(languageSelectedIndex);
  81. }
  82. }
  83. private Dictionary<string, string> CheckPageSelect = new Dictionary<string, string>();
  84. private void InitCheckPageSelect()
  85. {
  86. CheckPageSelect.Clear();
  87. if (!IsCurrentPageIndex)
  88. {
  89. CheckPageSelect.Add("0", "0");
  90. CheckPageSelect.Add("1", "1");
  91. CheckPageSelect.Add("2", "2");
  92. CheckPageSelect.Add("3", "3");
  93. CheckPageSelect.Add("4", "3");
  94. }
  95. else
  96. {
  97. CheckPageSelect.Add("0", "0");
  98. CheckPageSelect.Add("1", "-2");
  99. CheckPageSelect.Add("2", "1");
  100. CheckPageSelect.Add("3", "2");
  101. CheckPageSelect.Add("4", "3");
  102. }
  103. }
  104. #endregion
  105. #region 委托声明
  106. public DelegateCommand<string> RadioButtonCommand { get; set; }
  107. public DelegateCommand CancelCommand { get; set; }
  108. public DelegateCommand ConverterCommnad { get; set; }
  109. public DelegateCommand<object> CmbPageSelectionChanged { get; set; }
  110. public DelegateCommand<object> CmbPageTextChanged { get; set; }
  111. public DelegateCommand BatchConverterCommand { get; set; }
  112. public DelegateCommand SetCustomPageRangeCommand { get; set; }
  113. #endregion
  114. public ConverterExcelDialogViewModel(IDialogService dialogService)
  115. {
  116. CancelCommand = new DelegateCommand(cancel);
  117. ConverterCommnad = new DelegateCommand(converter);
  118. RadioButtonCommand = new DelegateCommand<string>(radiobutton);
  119. SetCustomPageRangeCommand = new DelegateCommand(SetCustomPageRange);
  120. CmbPageSelectionChanged = new DelegateCommand<object>(CmbPageSelectionChangedEvent);
  121. CmbPageTextChanged = new DelegateCommand<object>(CmbPageTextChangedEvent);
  122. BatchConverterCommand = new DelegateCommand(BatchConverter);
  123. dialogs = dialogService;
  124. }
  125. #region 逻辑函数
  126. public void SetCustomPageRange()
  127. {
  128. if (PageRangeSelectIndex == CheckPageSelect["4"])
  129. {
  130. List<int> PageIndexLists = new List<int>();
  131. if (!CommonHelper.GetPagesInRange(ref PageIndexLists, PageRangeText, currentViewer.Document.PageCount, new char[] { ',' }, new char[] { '-' }))
  132. { //TODO
  133. AlertsMessage alertsMessage = new AlertsMessage();
  134. alertsMessage.ShowDialog("页面范围输入错误", "", "确定");
  135. if (alertsMessage.result == ContentResult.Ok)
  136. {
  137. return;
  138. }
  139. else
  140. {
  141. //this.eventAggregator.GetEvent<DeleteWatermarkEvent>().Publish(new EnumDeleteUnicode
  142. //{
  143. // Unicode = Unicode,
  144. // Status = EnumDelete.StatusCreate
  145. //});
  146. return;
  147. }
  148. }
  149. }
  150. }
  151. private void cancel()
  152. {
  153. RequestClose.Invoke(new DialogResult(ButtonResult.Cancel));
  154. }
  155. private void converter()
  156. {
  157. if (PageRangeSelectIndex == CheckPageSelect["4"])
  158. {
  159. List<int> PageIndexLists = new List<int>();
  160. if (!CommonHelper.GetPagesInRange(ref PageIndexLists, PageRangeText, currentViewer.Document.PageCount, new char[] { ',' }, new char[] { '-' }))
  161. { //TODO
  162. AlertsMessage alertsMessage = new AlertsMessage();
  163. alertsMessage.ShowDialog("页面范围输入错误", "", "确定");
  164. if (alertsMessage.result == ContentResult.Ok)
  165. {
  166. return;
  167. }
  168. else
  169. {
  170. //this.eventAggregator.GetEvent<DeleteWatermarkEvent>().Publish(new EnumDeleteUnicode
  171. //{
  172. // Unicode = Unicode,
  173. // Status = EnumDelete.StatusCreate
  174. //});
  175. return;
  176. }
  177. }
  178. }
  179. System.Windows.Forms.SaveFileDialog sfd = new System.Windows.Forms.SaveFileDialog();
  180. /*
  181. *设置这个对话框的起始保存路径
  182. */
  183. sfd.InitialDirectory = currentViewer.Document.FilePath;
  184. /*
  185. *设置保存的文件的类型,注意过滤器的语法 例子:“文件类型|*.后缀名;*.后缀名;”
  186. */
  187. sfd.Filter = "PDF|*.xlsx;";
  188. /*
  189. *调用ShowDialog()方法显示该对话框,该方法的返回值代表用户是否点击了确定按钮
  190. */
  191. sfd.FileName = currentViewer.Document.FileName + ".xlsx";
  192. /*
  193. * 做一些工作
  194. */
  195. if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
  196. {
  197. ConverterExcelModel.OutputPath = sfd.FileName;
  198. try { if (File.Exists(ConverterExcelModel.OutputPath)) File.Delete(ConverterExcelModel.OutputPath); }
  199. catch
  200. {
  201. AlertsMessage alertsMessage = new AlertsMessage();
  202. alertsMessage.ShowDialog("文件已被占用", "请重新选则目标路径", "确定");
  203. return;
  204. }
  205. }
  206. else
  207. {
  208. return;
  209. }
  210. HomePageEditHelper.GetPagerange(PageRangeSelectIndex, currentViewer, ref ConverterExcelModel.PageRange, PageRangeText, !IsCurrentPageIndex, CurrentPageIndex);
  211. if (ConverterExcelModel.PageRange == "")
  212. {
  213. Trace.WriteLine("输入不对");
  214. MessageBoxEx.Show("输入不对");
  215. return;
  216. }
  217. char[] enumerationSeparator = new char[] { ',' };
  218. char[] rangeSeparator = new char[] { '-' };
  219. if (!CommonHelper.GetPagesInRange(ref ConverterExcelModel.PageIndexLists, ConverterExcelModel.PageRange, currentViewer.Document.PageCount, enumerationSeparator, rangeSeparator))
  220. { //TODO
  221. Trace.WriteLine("输入不对");
  222. MessageBoxEx.Show("输入不对");
  223. return;
  224. }
  225. ConverterExcelModel.excelOptions = ConverterExcelModel.ExcelOptions();
  226. //DialogParameters value = new DialogParameters();
  227. //value.Add(ParameterNames.ConverterType, "Excel");
  228. //value.Add(ParameterNames.ConverterTypeModel, ConverterExcelModel);
  229. var dialogresult = new DialogResult(ButtonResult.OK);
  230. dialogresult.Parameters.Add(ParameterNames.ConverterType, "Excel");
  231. dialogresult.Parameters.Add(ParameterNames.ConverterTypeModel, ConverterExcelModel);
  232. RequestClose.Invoke(dialogresult);
  233. //RequestClose?.Invoke(new DialogResult(ButtonResult.OK));
  234. //dialogs.ShowDialog(DialogNames.ConverterProgressBarDialog, value, e =>
  235. //{
  236. //});
  237. }
  238. private void CmbPageSelectionChangedEvent(object e)
  239. {
  240. ///这里采用的是将预览UI控件传递过来的方式,为下下策
  241. ///正确的方式应该是 通过声明一些属性,再通过绑定来更新预览控件对应值的形式
  242. ///但是目前发现自定义控件的依赖属性绑定有些问题,因此先用此方法,将业务逻辑代码先调整到VM里
  243. var ConverterPreview = e as PageTurningPreview;
  244. if (ConverterPreview != null)
  245. {
  246. string PageRangeSelectIndex = this.PageRangeSelectIndex;
  247. var currentViewer = this.currentViewer;
  248. string PageRange = "";
  249. var PageRangeText = this.PageRangeText;
  250. if (PageRangeSelectIndex == CheckPageSelect["0"] || PageRangeSelectIndex == CheckPageSelect["2"] || PageRangeSelectIndex == CheckPageSelect["3"])
  251. {
  252. HomePageEditHelper.GetPagerange(PageRangeSelectIndex, currentViewer, ref PageRange, PageRangeText, !IsCurrentPageIndex);
  253. char[] enumerationSeparator = new char[] { ',' };
  254. char[] rangeSeparator = new char[] { '-' };
  255. if (!CommonHelper.GetPagesInRange(ref ConverterPreview.PageIndexLists, PageRange, currentViewer.Document.PageCount, enumerationSeparator, rangeSeparator))
  256. { //TODO
  257. ConverterPreview.PageIndexLists.Add(0);
  258. Trace.WriteLine("输入不对");
  259. MessageBoxEx.Show("输入不对");
  260. return;
  261. }
  262. }
  263. if (PageRangeSelectIndex == CheckPageSelect["1"])
  264. {
  265. char[] enumerationSeparator = new char[] { ',' };
  266. char[] rangeSeparator = new char[] { '-' };
  267. if (!CommonHelper.GetPagesInRange(ref ConverterPreview.PageIndexLists, (currentViewer.CurrentIndex + 1).ToString()
  268. , currentViewer.Document.PageCount, enumerationSeparator, rangeSeparator))
  269. { //TODO
  270. Trace.WriteLine("输入不对");
  271. MessageBoxEx.Show("输入不对");
  272. return;
  273. }
  274. this.CurrentPageIndex = (ConverterPreview.PageIndexLists.Last<int>() + 1).ToString();
  275. }
  276. // ConverterPreview.PageIndex.Text = (ConverterPreview.PageIndexLists.Last<int>() + 1).ToString();
  277. ConverterPreview.PageIndex.Text = ConverterPreview.PageIndexLists.Count.ToString();
  278. ConverterPreview.CurrentIndex = 0;
  279. }
  280. }
  281. private void CmbPageTextChangedEvent(object e)
  282. {
  283. var ConverterPreview = e as PageTurningPreview;
  284. if (ConverterPreview != null)
  285. {
  286. if (ConverterPreview != null)
  287. {
  288. string PageRangeSelectIndex = this.PageRangeSelectIndex;
  289. var currentViewer = this.currentViewer;
  290. string PageRange = "";
  291. var PageRangeText = this.PageRangeText;
  292. HomePageEditHelper.GetPagerange(PageRangeSelectIndex, currentViewer, ref PageRange, PageRangeText, !IsCurrentPageIndex);
  293. char[] enumerationSeparator = new char[] { ',' };
  294. char[] rangeSeparator = new char[] { '-' };
  295. if (!CommonHelper.GetPagesInRange(ref ConverterPreview.PageIndexLists, PageRange, currentViewer.Document.PageCount, enumerationSeparator, rangeSeparator))
  296. { //TODO
  297. ConverterPreview.PageIndexLists.Add(0);
  298. return;
  299. }
  300. else
  301. {
  302. // ConverterPreview.PageIndex.Text = (ConverterPreview.PageIndexLists.Last<int>() + 1).ToString();
  303. ConverterPreview.PageIndex.Text = ConverterPreview.PageIndexLists.Count.ToString();
  304. ConverterPreview.CurrentIndex = 0;
  305. }
  306. }
  307. }
  308. }
  309. private void BatchConverter()
  310. {
  311. DialogParameters convertpdftoword = new DialogParameters();
  312. convertpdftoword.Add(ParameterNames.BatchProcessing_Name, "0");
  313. convertpdftoword.Add("ConverterTypeIndex", 1);
  314. HomePageBatchProcessingDialogModel.FilePaths = new List<string> { currentViewer.Document.FilePath.ToString() };
  315. HomePageBatchProcessingDialogModel.BatchProcessingIndex = 1;
  316. convertpdftoword.Add(ParameterNames.FilePath, new string[] { currentViewer.Document.FilePath.ToString() });
  317. dialogs.ShowDialog(DialogNames.HomePageBatchProcessingDialog, convertpdftoword, e => { });
  318. }
  319. private void radiobutton(string e) {
  320. string radioButton=e;
  321. if (radioButton != null) {
  322. switch (radioButton)
  323. {
  324. case "AnyContentRadioBtn":
  325. AnyContent(AnyContentSelectIndex);
  326. break;
  327. case "OnlyTableRadioBtn":
  328. OnlyTable(OnlyTableSelectIndex);
  329. break;
  330. case "OnlyTextRadioBtn":
  331. ConverterExcelModel.Options.WorksheetOpts = WorksheetOptions.ForTheDocument;
  332. ConverterExcelModel.Options.ContentOpts = ContentOptions.OnlyText;
  333. break;
  334. default:
  335. break;
  336. }
  337. }
  338. }
  339. private void AnyContent(int SelectedIndex)
  340. {
  341. switch (SelectedIndex)
  342. {
  343. case 0:
  344. ConverterExcelModel.Options.WorksheetOpts = WorksheetOptions.ForEachPage;
  345. ConverterExcelModel.Options.ContentOpts = ContentOptions.AllContent;
  346. break;
  347. case 1:
  348. ConverterExcelModel.Options.WorksheetOpts = WorksheetOptions.ForTheDocument;
  349. ConverterExcelModel.Options.ContentOpts = ContentOptions.AllContent;
  350. break;
  351. default:
  352. break;
  353. }
  354. }
  355. private void OnlyTable(int SelectedIndex)
  356. {
  357. ConverterExcelModel.Options.ContentOpts = ContentOptions.OnlyTable;
  358. switch (SelectedIndex)
  359. {
  360. case 0:
  361. ConverterExcelModel.Options.WorksheetOpts = WorksheetOptions.ForEachTable;
  362. break;
  363. case 1:
  364. ConverterExcelModel.Options.WorksheetOpts = WorksheetOptions.ForEachPage;
  365. break;
  366. case 2:
  367. ConverterExcelModel.Options.WorksheetOpts = WorksheetOptions.ForTheDocument;
  368. break;
  369. default:
  370. break;
  371. }
  372. }
  373. private void SelectLanguage(int SelectedIndex)
  374. {
  375. switch (SelectedIndex)
  376. {
  377. case 0:
  378. ConverterExcelModel.Options.OCRLanguage= COCRLanguage.Chinese;
  379. break;
  380. case 1:
  381. ConverterExcelModel.Options.OCRLanguage = COCRLanguage.ChineseTraditional;
  382. break;
  383. case 2:
  384. ConverterExcelModel.Options.OCRLanguage = COCRLanguage.English;
  385. break;
  386. case 3:
  387. ConverterExcelModel.Options.OCRLanguage = COCRLanguage.Japanese;
  388. break;
  389. case 4:
  390. ConverterExcelModel.Options.OCRLanguage = COCRLanguage.Korean;
  391. break;
  392. default:
  393. break;
  394. }
  395. }
  396. #endregion
  397. #region 构架行为
  398. public bool CanCloseDialog()
  399. {
  400. return true;
  401. }
  402. public void OnDialogClosed()
  403. {
  404. }
  405. public void OnDialogOpened(IDialogParameters parameters)
  406. {
  407. CPDFViewer pdfViewer = null;
  408. parameters.TryGetValue<CPDFViewer>(ParameterNames.PDFViewer, out pdfViewer);
  409. parameters.TryGetValue<bool>("PageRangeComboBoxCurrentPage", out IsCurrentPageIndex);
  410. if (pdfViewer != null)
  411. {
  412. InitCheckPageSelect();
  413. currentViewer = pdfViewer;
  414. MaxPageRange = currentViewer.Document.PageCount;
  415. if (currentViewer.Tag != null) { ConverterExcelModel.Pawssword = currentViewer.Tag.ToString(); }
  416. ConverterExcelModel.InputPath = pdfViewer.Document.FilePath;
  417. FileInfo fileinfo = new FileInfo(ConverterExcelModel.InputPath);
  418. ConverterExcelModel.OutputPath = fileinfo.DirectoryName;
  419. }
  420. }
  421. #endregion
  422. }
  423. }