FormsToolContentViewModel.cs 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319
  1. using ComPDFKitViewer;
  2. using ComPDFKitViewer.AnnotEvent;
  3. using ComPDFKitViewer.PdfViewer;
  4. using PDF_Office.Helper;
  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.Linq;
  12. using System.Text;
  13. using System.Threading.Tasks;
  14. using System.Windows;
  15. namespace PDF_Office.ViewModels.Form
  16. {
  17. public class FormsToolContentViewModel : BindableBase, INavigationAware
  18. {
  19. #region 属性
  20. /// <summary>
  21. /// 显示PreView按钮
  22. /// </summary>
  23. public Visibility ShowPreView
  24. {
  25. get { return showPreView; }
  26. set
  27. {
  28. SetProperty(ref showPreView, value);
  29. }
  30. }
  31. #endregion
  32. #region 变量
  33. private CPDFViewer PDFViewer;
  34. public ViewContentViewModel viewContentViewModel;
  35. private IRegionManager regions;
  36. private string CurrentToolBtnType;
  37. /// <summary>
  38. /// 按钮和属性面板键值对
  39. /// </summary>
  40. private Dictionary<string, string> btnToProperty = new Dictionary<string, string>();
  41. private Visibility showPreView;
  42. #endregion
  43. #region Command变量
  44. public DelegateCommand<string> CheckedCommand { get; set; }
  45. public DelegateCommand CancleCheckedCommand { get; set; }
  46. public DelegateCommand<string> ClickCommand { get; set; }
  47. public event EventHandler<string> UncheckedToolsBtnEvent;
  48. #endregion
  49. #region 初始化
  50. public FormsToolContentViewModel(IRegionManager regionManager)
  51. {
  52. regions = regionManager;
  53. CheckedCommand = new DelegateCommand<string>(CheckedEvent);
  54. CancleCheckedCommand = new DelegateCommand(CancleChecked);
  55. ClickCommand = new DelegateCommand<string>(ClickEvent);
  56. InitBtnToProperty();
  57. }
  58. private void InitBtnToProperty()
  59. {
  60. btnToProperty.Add("EmptyForm", "EmptyFormProperty");
  61. btnToProperty.Add("Text", "TextFieldProperty");
  62. btnToProperty.Add("CheckBox", "CheckBoxProperty");
  63. btnToProperty.Add("RadioButton", "RadioButtonProperty");
  64. btnToProperty.Add("ListBox", "ListBoxProperty");
  65. btnToProperty.Add("Combox", "ComboxProperty");
  66. btnToProperty.Add("Button", "ButtonProperty");
  67. btnToProperty.Add("Sign", "SignProperty");
  68. }
  69. #endregion
  70. #region 属性面板
  71. /// <summary>
  72. /// Form
  73. /// </summary>
  74. /// <param name="type"></param>
  75. private void CheckedEvent(string type)
  76. {
  77. AddToPropertyPanel(type);
  78. }
  79. //
  80. private void ClickEvent(string obj)
  81. {
  82. if (string.IsNullOrEmpty(obj) == false)
  83. {
  84. if (CurrentToolBtnType == obj)
  85. {
  86. PDFViewer.SetMouseMode(MouseModes.FormEditTool);
  87. PDFViewer.SetToolParam(new AnnotHandlerEventArgs());
  88. UncheckedToolsBtnEvent?.Invoke(null, CurrentToolBtnType);
  89. CurrentToolBtnType = "";
  90. }
  91. else
  92. {
  93. CurrentToolBtnType = obj;
  94. }
  95. }
  96. }
  97. private void AddToPropertyPanel(string type, WidgetArgs widget = null, UpdateAttributeHelper e = null)
  98. {
  99. if (btnToProperty.ContainsKey(type))
  100. {
  101. NavigationParameters parameters = new NavigationParameters();
  102. parameters.Add(ParameterNames.PDFViewer, PDFViewer);
  103. parameters.Add("WidgetArgs", widget);
  104. parameters.Add(ParameterNames.AnnotEvent, e);
  105. regions.RequestNavigate(RegionNames.PropertyRegionName, btnToProperty[type], parameters);
  106. ShowPropertyPanel(true);
  107. }
  108. }
  109. private void ShowPropertyPanel(bool show = true)
  110. {
  111. viewContentViewModel.IsPropertyOpen = show;
  112. }
  113. #endregion
  114. #region 工具按钮
  115. private void CancleChecked()
  116. {
  117. PDFViewer.SetMouseMode(MouseModes.FormEditTool);
  118. PDFViewer.SetToolParam(new AnnotHandlerEventArgs());
  119. }
  120. #endregion
  121. #region 获取Form
  122. private void GetTextField()
  123. {
  124. }
  125. private void GetButton()
  126. {
  127. }
  128. private void GeCheckBox()
  129. {
  130. }
  131. private void GetCombox()
  132. {
  133. }
  134. private void GetListBox()
  135. {
  136. }
  137. private void GetRadioButton()
  138. {
  139. }
  140. private void GetSign()
  141. {
  142. }
  143. #endregion
  144. #region 表单内部触发的事件(比如选中表单行为等)
  145. private void PDFViewer_WidgetClickHander(object sender, WidgetArgs e)
  146. {
  147. //点击表单,签名表单,触发事件
  148. if (e != null)
  149. {
  150. }
  151. }
  152. // 选中时
  153. private void PDFViewer_AnnotActiveHandler(object sender, AnnotAttribEvent e)
  154. {
  155. if (e != null)
  156. {
  157. var annotHandlerEventArgs = e.AnnotItemsList[0];
  158. if (annotHandlerEventArgs as WidgetArgs != null)
  159. {
  160. var widgetArgs = annotHandlerEventArgs as WidgetArgs;
  161. //新建的表单之后;
  162. if (CurrentWidgetArgs != null &&
  163. CurrentWidgetArgs.AnnotIndex == widgetArgs.AnnotIndex &&
  164. CurrentWidgetArgs.PageIndex == widgetArgs.PageIndex)
  165. {
  166. GetSelectWidget(widgetArgs, e);
  167. return;
  168. }
  169. CurrentWidgetArgs = widgetArgs;
  170. GetSelectWidget(widgetArgs, e);
  171. UncheckedToolsBtnEvent?.Invoke(null, CurrentToolBtnType);
  172. CurrentToolBtnType = "";
  173. }
  174. }
  175. }
  176. public WidgetArgs CurrentWidgetArgs;
  177. //新增
  178. private void PDFViewer_AnnotEditHandler(object sender, List<AnnotEditEvent> e)
  179. {
  180. if(e != null && e.Count > 0)
  181. {
  182. var widgeArgs = e[e.Count - 1].EditAnnotArgs as WidgetArgs;
  183. if (widgeArgs != null)
  184. {
  185. CurrentWidgetArgs = widgeArgs;
  186. }
  187. AnnotEditEvent editEvent = e[e.Count - 1];
  188. //新增表单后,选中
  189. if (editEvent.EditAction == ActionType.Add)
  190. {
  191. PDFViewer.SelectAnnotation(editEvent.PageIndex, editEvent.AnnotIndex);
  192. }
  193. }
  194. }
  195. //获取View选中的表单
  196. private void GetSelectWidget(WidgetArgs widgetArgs, AnnotAttribEvent e)
  197. {
  198. if (widgetArgs == null) return;
  199. switch (widgetArgs.WidgeType)
  200. {
  201. case ComPDFKit.PDFAnnotation.Form.C_WIDGET_TYPE.WIDGET_TEXTFIELD:
  202. AddToPropertyPanel("Text", widgetArgs, new UpdateAttributeHelper(e));
  203. break;
  204. case ComPDFKit.PDFAnnotation.Form.C_WIDGET_TYPE.WIDGET_CHECKBOX:
  205. AddToPropertyPanel("CheckBox", widgetArgs, new UpdateAttributeHelper(e));
  206. break;
  207. case ComPDFKit.PDFAnnotation.Form.C_WIDGET_TYPE.WIDGET_RADIOBUTTON:
  208. AddToPropertyPanel("RadioButton", widgetArgs, new UpdateAttributeHelper(e));
  209. break;
  210. case ComPDFKit.PDFAnnotation.Form.C_WIDGET_TYPE.WIDGET_LISTBOX:
  211. AddToPropertyPanel("ListBox", widgetArgs, new UpdateAttributeHelper(e));
  212. break;
  213. case ComPDFKit.PDFAnnotation.Form.C_WIDGET_TYPE.WIDGET_COMBOBOX:
  214. AddToPropertyPanel("Combox", widgetArgs, new UpdateAttributeHelper(e));
  215. break;
  216. case ComPDFKit.PDFAnnotation.Form.C_WIDGET_TYPE.WIDGET_PUSHBUTTON:
  217. AddToPropertyPanel("Button", widgetArgs, new UpdateAttributeHelper(e));
  218. break;
  219. case ComPDFKit.PDFAnnotation.Form.C_WIDGET_TYPE.WIDGET_SIGNATUREFIELDS:
  220. AddToPropertyPanel("Sign", widgetArgs, new UpdateAttributeHelper(e));
  221. break;
  222. }
  223. }
  224. #endregion
  225. #region Navegation
  226. public bool IsNavigationTarget(NavigationContext navigationContext)
  227. {
  228. return true;
  229. }
  230. public void OnNavigatedFrom(NavigationContext navigationContext)
  231. {
  232. CurrentToolBtnType = "";
  233. }
  234. public void OnNavigatedTo(NavigationContext navigationContext)
  235. {
  236. navigationContext.Parameters.TryGetValue<ViewContentViewModel>(ParameterNames.ViewContentViewModel,out viewContentViewModel);
  237. navigationContext.Parameters.TryGetValue<CPDFViewer>(ParameterNames.PDFViewer, out PDFViewer);
  238. BindingFormHandler();
  239. }
  240. private void BindingFormHandler()
  241. {
  242. if (PDFViewer != null)
  243. {
  244. PDFViewer.WidgetClickHander -= PDFViewer_WidgetClickHander;
  245. PDFViewer.WidgetClickHander += PDFViewer_WidgetClickHander;
  246. PDFViewer.AnnotActiveHandler -= PDFViewer_AnnotActiveHandler;
  247. PDFViewer.AnnotActiveHandler += PDFViewer_AnnotActiveHandler;
  248. PDFViewer.AnnotEditHandler -= PDFViewer_AnnotEditHandler;
  249. PDFViewer.AnnotEditHandler += PDFViewer_AnnotEditHandler;
  250. }
  251. }
  252. #endregion
  253. }
  254. }