ConverterPPTDialogViewModel.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308
  1. using ComDocumentAIKit;
  2. using ComPDFKitViewer.PdfViewer;
  3. using PDF_Office.CustomControl;
  4. using PDF_Office.Helper;
  5. using PDF_Office.Model;
  6. using PDF_Office.Model.Dialog.ConverterDialogs;
  7. using PDF_Office.Model.Dialog.HomePageToolsDialogs.HomePageBatchProcessing;
  8. using Prism.Commands;
  9. using Prism.Mvvm;
  10. using Prism.Services.Dialogs;
  11. using System;
  12. using System.Collections.Generic;
  13. using System.Diagnostics;
  14. using System.IO;
  15. using System.Linq;
  16. using System.Windows.Forms;
  17. using DialogResult = Prism.Services.Dialogs.DialogResult;
  18. namespace PDF_Office.ViewModels.Dialog.ConverterDialogs
  19. {
  20. public class ConverterPPTDialogViewModel : BindableBase, IDialogAware
  21. {
  22. public string Title => "";
  23. public event Action<IDialogResult> RequestClose;
  24. #region 参数和属性
  25. public ConverterPPTDialogModel ConverterPPTModel = new ConverterPPTDialogModel();
  26. public CPDFViewer currentViewer;
  27. public IDialogService dialogs;
  28. public string CurrentPageIndex = "1";
  29. public string PageRangeText { set; get; } = "0";
  30. public string PageRangeSelectIndex { set; get; } = "0";
  31. private int maxPageRange = 0;
  32. public int MaxPageRange
  33. {
  34. get { return maxPageRange; }
  35. set
  36. {
  37. SetProperty(ref maxPageRange, value);
  38. }
  39. }
  40. private bool oCRCheckBoxIsCheckBox = true;
  41. public bool OCRCheckBoxIsCheckBox
  42. {
  43. get { return oCRCheckBoxIsCheckBox; }
  44. set
  45. {
  46. SetProperty(ref oCRCheckBoxIsCheckBox, value);
  47. ConverterPPTModel.Options.IsAllowOCR = oCRCheckBoxIsCheckBox;
  48. }
  49. }
  50. private int languageSelectedIndex = 2;
  51. public int LanguageSelectedIndex
  52. {
  53. get { return languageSelectedIndex; }
  54. set
  55. {
  56. SetProperty(ref languageSelectedIndex, value);
  57. SelectLanguage(languageSelectedIndex);
  58. }
  59. }
  60. #endregion
  61. #region 委托声明
  62. public DelegateCommand CancelCommand { get; set; }
  63. public DelegateCommand ConverterCommnad { get; set; }
  64. public DelegateCommand<object> CmbPageSelectionChanged { get; set; }
  65. public DelegateCommand<object> CmbPageTextChanged { get; set; }
  66. public DelegateCommand BatchConverterCommand { get; set; }
  67. #endregion
  68. public ConverterPPTDialogViewModel(IDialogService dialogService)
  69. {
  70. CancelCommand = new DelegateCommand(cancel);
  71. ConverterCommnad = new DelegateCommand(converter);
  72. CmbPageSelectionChanged = new DelegateCommand<object>(CmbPageSelectionChangedEvent);
  73. CmbPageTextChanged = new DelegateCommand<object>(CmbPageTextChangedEvent);
  74. BatchConverterCommand = new DelegateCommand(BatchConverter);
  75. dialogs = dialogService;
  76. }
  77. #region 逻辑函数
  78. private void cancel()
  79. {
  80. RequestClose.Invoke(new DialogResult(ButtonResult.Cancel));
  81. }
  82. private void converter()
  83. {
  84. System.Windows.Forms.SaveFileDialog sfd = new System.Windows.Forms.SaveFileDialog();
  85. /*
  86. *设置这个对话框的起始保存路径
  87. */
  88. sfd.InitialDirectory = currentViewer.Document.FilePath;
  89. /*
  90. *设置保存的文件的类型,注意过滤器的语法 例子:“文件类型|*.后缀名;*.后缀名;”
  91. */
  92. sfd.Filter = "PDF|*.pptx;";
  93. /*
  94. *调用ShowDialog()方法显示该对话框,该方法的返回值代表用户是否点击了确定按钮
  95. */
  96. sfd.FileName = currentViewer.Document.FileName + ".pptx";
  97. /*
  98. * 做一些工作
  99. */
  100. if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
  101. {
  102. ConverterPPTModel.OutputPath = sfd.FileName;
  103. try { if (File.Exists(ConverterPPTModel.OutputPath)) File.Delete(ConverterPPTModel.OutputPath); }
  104. catch
  105. {
  106. AlertsMessage alertsMessage = new AlertsMessage();
  107. alertsMessage.ShowDialog("文件已被占用", "请重新选则目标路径", "确定");
  108. return;
  109. }
  110. }
  111. else
  112. {
  113. return;
  114. }
  115. HomePageEditHelper.GetPagerange(PageRangeSelectIndex, currentViewer, ref ConverterPPTModel.PageRange, PageRangeText, true, CurrentPageIndex);
  116. if (ConverterPPTModel.PageRange == "")
  117. {
  118. Trace.WriteLine("输入不对");
  119. MessageBoxEx.Show("输入不对");
  120. return;
  121. }
  122. char[] enumerationSeparator = new char[] { ',' };
  123. char[] rangeSeparator = new char[] { '-' };
  124. if (!CommonHelper.GetPagesInRange(ref ConverterPPTModel.PageIndexLists, ConverterPPTModel.PageRange, currentViewer.Document.PageCount, enumerationSeparator, rangeSeparator))
  125. { //TODO
  126. Trace.WriteLine("输入不对");
  127. MessageBoxEx.Show("输入不对");
  128. return;
  129. }
  130. ConverterPPTModel.pPTOptions = ConverterPPTModel.PPTOptions();
  131. //DialogParameters value = new DialogParameters();
  132. //value.Add(ParameterNames.ConverterType, "PPT");
  133. //value.Add(ParameterNames.ConverterTypeModel, ConverterPPTModel);
  134. var dialogresult = new DialogResult(ButtonResult.OK);
  135. dialogresult.Parameters.Add(ParameterNames.ConverterType, "PPT");
  136. dialogresult.Parameters.Add(ParameterNames.ConverterTypeModel, ConverterPPTModel);
  137. RequestClose.Invoke(dialogresult);
  138. //RequestClose?.Invoke(new DialogResult(ButtonResult.OK));
  139. //dialogs.ShowDialog(DialogNames.ConverterProgressBarDialog, value, e =>
  140. //{
  141. //});
  142. }
  143. private void CmbPageSelectionChangedEvent(object e)
  144. {
  145. ///这里采用的是将预览UI控件传递过来的方式,为下下策
  146. ///正确的方式应该是 通过声明一些属性,再通过绑定来更新预览控件对应值的形式
  147. ///但是目前发现自定义控件的依赖属性绑定有些问题,因此先用此方法,将业务逻辑代码先调整到VM里
  148. var ConverterPreview = e as PageTurningPreview;
  149. if (ConverterPreview != null)
  150. {
  151. string PageRangeSelectIndex = this.PageRangeSelectIndex;
  152. var currentViewer = this.currentViewer;
  153. string PageRange = "";
  154. var PageRangeText = this.PageRangeText;
  155. if (PageRangeSelectIndex == "0" || PageRangeSelectIndex == "2" || PageRangeSelectIndex == "3")
  156. {
  157. HomePageEditHelper.GetPagerange(PageRangeSelectIndex, currentViewer, ref PageRange, PageRangeText, true);
  158. char[] enumerationSeparator = new char[] { ',' };
  159. char[] rangeSeparator = new char[] { '-' };
  160. if (!CommonHelper.GetPagesInRange(ref ConverterPreview.PageIndexLists, PageRange, currentViewer.Document.PageCount, enumerationSeparator, rangeSeparator))
  161. { //TODO
  162. ConverterPreview.PageIndexLists.Add(0);
  163. Trace.WriteLine("输入不对");
  164. MessageBoxEx.Show("输入不对");
  165. return;
  166. }
  167. }
  168. if (PageRangeSelectIndex == "1")
  169. {
  170. char[] enumerationSeparator = new char[] { ',' };
  171. char[] rangeSeparator = new char[] { '-' };
  172. if (!CommonHelper.GetPagesInRange(ref ConverterPreview.PageIndexLists, (currentViewer.CurrentIndex + 1).ToString()
  173. , currentViewer.Document.PageCount, enumerationSeparator, rangeSeparator))
  174. { //TODO
  175. Trace.WriteLine("输入不对");
  176. MessageBoxEx.Show("输入不对");
  177. return;
  178. }
  179. this.CurrentPageIndex = (ConverterPreview.PageIndexLists.Last<int>() + 1).ToString();
  180. }
  181. ConverterPreview.PageIndex.Text = (ConverterPreview.PageIndexLists.Count).ToString();
  182. ConverterPreview.CurrentIndex = 0;
  183. }
  184. }
  185. private void CmbPageTextChangedEvent(object e)
  186. {
  187. var ConverterPreview = e as PageTurningPreview;
  188. if (ConverterPreview != null)
  189. {
  190. if (ConverterPreview != null)
  191. {
  192. string PageRangeSelectIndex = this.PageRangeSelectIndex;
  193. var currentViewer = this.currentViewer;
  194. string PageRange = "";
  195. var PageRangeText = this.PageRangeText;
  196. HomePageEditHelper.GetPagerange(PageRangeSelectIndex, currentViewer, ref PageRange, PageRangeText, true);
  197. char[] enumerationSeparator = new char[] { ',' };
  198. char[] rangeSeparator = new char[] { '-' };
  199. if (!CommonHelper.GetPagesInRange(ref ConverterPreview.PageIndexLists, PageRange, currentViewer.Document.PageCount, enumerationSeparator, rangeSeparator))
  200. { //TODO
  201. ConverterPreview.PageIndexLists.Add(0);
  202. return;
  203. }
  204. else
  205. {
  206. ConverterPreview.PageIndex.Text = (ConverterPreview.PageIndexLists.Last<int>() + 1).ToString();
  207. ConverterPreview.CurrentIndex = 0;
  208. }
  209. }
  210. }
  211. }
  212. private void BatchConverter()
  213. {
  214. DialogParameters convertpdftoword = new DialogParameters();
  215. convertpdftoword.Add(ParameterNames.BatchProcessing_Name, "0");
  216. convertpdftoword.Add("ConverterTypeIndex", 2);
  217. HomePageBatchProcessingDialogModel.FilePaths = new List<string> { currentViewer.Document.FilePath.ToString() };
  218. HomePageBatchProcessingDialogModel.BatchProcessingIndex = 1;
  219. convertpdftoword.Add(ParameterNames.FilePath, new string[] { currentViewer.Document.FilePath.ToString() });
  220. dialogs.ShowDialog(DialogNames.HomePageBatchProcessingDialog, convertpdftoword, e => { });
  221. }
  222. private void SelectLanguage(int SelectedIndex)
  223. {
  224. switch (SelectedIndex)
  225. {
  226. case 0:
  227. ConverterPPTModel.Options.OCRLanguage = COCRLanguage.Chinese;
  228. break;
  229. case 1:
  230. ConverterPPTModel.Options.OCRLanguage = COCRLanguage.ChineseTraditional;
  231. break;
  232. case 2:
  233. ConverterPPTModel.Options.OCRLanguage = COCRLanguage.English;
  234. break;
  235. case 3:
  236. ConverterPPTModel.Options.OCRLanguage = COCRLanguage.Japanese;
  237. break;
  238. case 4:
  239. ConverterPPTModel.Options.OCRLanguage = COCRLanguage.Korean;
  240. break;
  241. default:
  242. break;
  243. }
  244. }
  245. #endregion
  246. #region 构架行为
  247. public bool CanCloseDialog()
  248. {
  249. return true;
  250. }
  251. public void OnDialogClosed()
  252. {
  253. }
  254. public void OnDialogOpened(IDialogParameters parameters)
  255. {
  256. CPDFViewer pdfViewer = null;
  257. parameters.TryGetValue<CPDFViewer>(ParameterNames.PDFViewer, out pdfViewer);
  258. if (pdfViewer != null)
  259. {
  260. currentViewer = pdfViewer;
  261. MaxPageRange = currentViewer.Document.PageCount;
  262. if (currentViewer.Tag != null) { ConverterPPTModel.Pawssword = currentViewer.Tag.ToString(); }
  263. ConverterPPTModel.InputPath = pdfViewer.Document.FilePath;
  264. FileInfo fileinfo = new FileInfo(ConverterPPTModel.InputPath);
  265. ConverterPPTModel.OutputPath = fileinfo.DirectoryName;
  266. }
  267. }
  268. #endregion
  269. }
  270. }