MainPage.xaml.cs 42 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078
  1. using ComPDFKit.PDFAnnotation;
  2. using ComPDFKit.PDFAnnotation.Form;
  3. using ComPDFKit.PDFDocument;
  4. using ComPDFKit.Tool;
  5. using ComPDFKit.Tool.Help;
  6. using Compdfkit_Tools.Annotation.PDFAnnotationPanel.PDFAnnotationUI;
  7. using Compdfkit_Tools.Helper;
  8. using Compdfkit_Tools.Measure;
  9. using Compdfkit_Tools.PDFControl;
  10. using Compdfkit_Tools.PDFView;
  11. using ComPDFKitViewer;
  12. using ComPDFKitViewer.Widget;
  13. using Microsoft.Win32;
  14. using System;
  15. using System.Collections.Generic;
  16. using System.ComponentModel;
  17. using System.IO;
  18. using System.Runtime.CompilerServices;
  19. using System.Windows;
  20. using System.Windows.Controls;
  21. using System.Windows.Controls.Primitives;
  22. using System.Windows.Input;
  23. using Compdfkit_Tools.PDFControlUI;
  24. using static ComPDFKit.Tool.CPDFToolManager;
  25. namespace PDFViewer
  26. {
  27. public partial class MainPage : UserControl, INotifyPropertyChanged
  28. {
  29. #region Properties
  30. private string currentMode = "Viewer";
  31. private double[] zoomLevelList = { 1f, 8f, 12f, 25, 33f, 50, 66f, 75, 100, 125, 150, 200, 300, 400, 600, 800, 1000 };
  32. private PDFViewControl viewControl;
  33. private PDFViewControl passwordViewer;
  34. private RegularViewerControl regularViewerControl = new RegularViewerControl();
  35. private AnnotationControl annotationControl = new AnnotationControl();
  36. private FormControl formControl = new FormControl();
  37. private ContentEditControl contentEditControl = new ContentEditControl();
  38. private PageEditControl pageEditControl = new PageEditControl();
  39. private MeasureControl measureControl = new MeasureControl();
  40. private DigitalSignatureControl digitalSignatureControl = new DigitalSignatureControl();
  41. private SignatureStatusBarControl signatureStatusBarControl = new SignatureStatusBarControl();
  42. private CPDFBOTABarControl botaBarControl = new CPDFBOTABarControl();
  43. private CPDFDisplaySettingsControl displaySettingsControl = new CPDFDisplaySettingsControl();
  44. private PanelState panelState = PanelState.GetInstance();
  45. public event EventHandler FileChangeEvent;
  46. public event Func<string[], bool> CheckExistBeforeOpenFileEvent;
  47. public event EventHandler<string> AfterSaveAsFileEvent;
  48. public event PropertyChangedEventHandler PropertyChanged;
  49. private bool _canSave = false;
  50. /// <summary>
  51. /// Whether the save operation can be performed.
  52. /// </summary>
  53. public bool CanSave
  54. {
  55. get => _canSave;
  56. set
  57. {
  58. _canSave = value;
  59. OnPropertyChanged();
  60. }
  61. }
  62. public PDFViewControl GetPDFViewControl()
  63. {
  64. return viewControl;
  65. }
  66. /// <summary>
  67. /// Whether the left panel is expanded.
  68. /// </summary>
  69. public bool LeftToolPanelButtonIsChecked
  70. {
  71. get => panelState.IsLeftPanelExpand;
  72. set
  73. {
  74. panelState.IsLeftPanelExpand = value;
  75. OnPropertyChanged();
  76. }
  77. }
  78. /// <summary>
  79. /// Whether the right panel is expanded.
  80. /// </summary>
  81. public bool RightToolPanelButtonIsChecked
  82. {
  83. get => panelState.RightPanel == PanelState.RightPanelState.PropertyPanel;
  84. set
  85. {
  86. panelState.RightPanel = (value) ? PanelState.RightPanelState.PropertyPanel : PanelState.RightPanelState.None;
  87. OnPropertyChanged();
  88. }
  89. }
  90. /// <summary>
  91. /// Whether the view setting panel is expanded.
  92. /// </summary>
  93. public bool ViewSettingBtnIsChecked
  94. {
  95. get
  96. {
  97. return (panelState.RightPanel == PanelState.RightPanelState.ViewSettings);
  98. }
  99. set
  100. {
  101. panelState.RightPanel = (value) ? PanelState.RightPanelState.ViewSettings : PanelState.RightPanelState.None;
  102. OnPropertyChanged();
  103. }
  104. }
  105. private Visibility _notDocsEditorVisible = Visibility.Visible;
  106. /// <summary>
  107. /// Whether the Document Editor panel is visible.
  108. /// </summary>
  109. public Visibility NotDocsEditorVisible
  110. {
  111. get => _notDocsEditorVisible;
  112. set
  113. {
  114. _notDocsEditorVisible = value;
  115. OnPropertyChanged();
  116. }
  117. }
  118. public MainPage()
  119. {
  120. InitializeComponent();
  121. this.DataContext = this;
  122. }
  123. #endregion
  124. #region Load document
  125. /// <summary>
  126. /// Initialize the PDFViewer and load the PDF file.
  127. /// </summary>
  128. /// <param name="filePath"></param>
  129. public void InitWithFilePath(string filePath)
  130. {
  131. viewControl = new PDFViewControl();
  132. viewControl.InitDocument(filePath);
  133. }
  134. public void InitWithDocument(CPDFDocument document)
  135. {
  136. viewControl = new PDFViewControl();
  137. viewControl.GetCPDFViewer().InitDoc(document);
  138. }
  139. /// <summary>
  140. /// Init controls and set events.
  141. /// </summary>
  142. private void LoadDocument()
  143. {
  144. if (viewControl != null && viewControl.PDFViewTool != null)
  145. {
  146. CPDFViewer pdfviewer = viewControl.PDFViewTool.GetCPDFViewer();
  147. CPDFDocument pdfDoc = pdfviewer?.GetDocument();
  148. if (pdfDoc == null)
  149. {
  150. return;
  151. }
  152. SizeChanged -= MainPage_SizeChanged;
  153. SizeChanged += MainPage_SizeChanged;
  154. PasswordUI.Closed -= PasswordUI_Closed;
  155. PasswordUI.Canceled -= PasswordUI_Canceled;
  156. PasswordUI.Confirmed -= PasswordUI_Confirmed;
  157. PasswordUI.Closed += PasswordUI_Closed;
  158. PasswordUI.Canceled += PasswordUI_Canceled;
  159. PasswordUI.Confirmed += PasswordUI_Confirmed;
  160. CPDFSaclingControl.InitWithPDFViewer(viewControl);
  161. ModeComboBox.SelectedIndex = 0;
  162. CPDFSaclingControl.SetZoomTextBoxText(string.Format("{0}", (int)(pdfviewer.GetZoom() * 100)));
  163. botaBarControl.AddBOTAContent(new[] { BOTATools.Thumbnail, BOTATools.Outline, BOTATools.Bookmark, BOTATools.Annotation, BOTATools.Search });
  164. botaBarControl.SelectBotaTool(BOTATools.Thumbnail);
  165. ViewSettingBtn.IsChecked = false;
  166. botaBarControl.InitWithPDFViewer(viewControl);
  167. botaBarControl.SelectBotaTool(BOTATools.Thumbnail);
  168. displaySettingsControl.InitWithPDFViewer(viewControl);
  169. LoadCustomControl();
  170. panelState.PropertyChanged -= PanelState_PropertyChanged;
  171. panelState.PropertyChanged += PanelState_PropertyChanged;
  172. displaySettingsControl.SplitModeChanged -= DisplaySettingsControl_SplitModeChanged;
  173. displaySettingsControl.SplitModeChanged += DisplaySettingsControl_SplitModeChanged;
  174. viewControl.PDFToolManager.MouseLeftButtonDownHandler -= PDFToolManager_MouseLeftButtonDownHandler;
  175. viewControl.PDFToolManager.MouseLeftButtonDownHandler += PDFToolManager_MouseLeftButtonDownHandler;
  176. pdfviewer.SetLinkHighlight(Properties.Settings.Default.IsHighlightLinkArea);
  177. pdfviewer.SetFormFieldHighlight(Properties.Settings.Default.IsHighlightFormArea);
  178. }
  179. }
  180. private void PDFToolManager_MouseLeftButtonDownHandler(object sender, MouseEventObject e)
  181. {
  182. if (e.annotType == C_ANNOTATION_TYPE.C_ANNOTATION_WIDGET)
  183. {
  184. BaseWidget baseWidget = viewControl.GetCacheHitTestWidget();
  185. if (baseWidget != null)
  186. {
  187. AnnotParam annotParam = ParamConverter.CPDFDataConverterToAnnotParam(
  188. viewControl.PDFViewTool.GetCPDFViewer().GetDocument(),
  189. baseWidget.GetAnnotData().PageIndex,
  190. baseWidget.GetAnnotData().Annot);
  191. if ((annotParam as WidgetParm).WidgetType == C_WIDGET_TYPE.WIDGET_SIGNATUREFIELDS)
  192. {
  193. if (currentMode == "Annotation")
  194. {
  195. CPDFSignatureUI signatureProperty = new CPDFSignatureUI();
  196. signatureProperty.SetFormProperty(annotParam, viewControl, baseWidget.GetAnnotData().Annot);
  197. panelState.RightPanel = PanelState.RightPanelState.PropertyPanel;
  198. annotationControl.SetPropertyContainer(signatureProperty);
  199. }
  200. else if (currentMode == "Viewer")
  201. {
  202. CPDFSignatureUI signatureProperty = new CPDFSignatureUI();
  203. signatureProperty.SetFormProperty(annotParam, viewControl, baseWidget.GetAnnotData().Annot);
  204. panelState.RightPanel = PanelState.RightPanelState.PropertyPanel;
  205. regularViewerControl.SetPropertyContainer(signatureProperty);
  206. }
  207. }
  208. }
  209. }
  210. }
  211. private void MainPage_SizeChanged(object sender, SizeChangedEventArgs e)
  212. {
  213. viewControl.WindowSizeChange();
  214. }
  215. private void DisplaySettingsControl_SplitModeChanged(object sender, Compdfkit_Tools.PDFControlUI.CPDFViewModeUI.SplitMode e)
  216. {
  217. viewControl.SetSplitViewMode(e);
  218. }
  219. /// <summary>
  220. /// When the RightPanel state is changed, decide whether to display the ViewSettingPanel or RightToolPanel.
  221. /// </summary>
  222. /// <param name="sender"></param>
  223. /// <param name="e"></param>
  224. private void PanelState_PropertyChanged(object sender, PropertyChangedEventArgs e)
  225. {
  226. if (e.PropertyName == "RightPanel")
  227. {
  228. OnPropertyChanged(nameof(RightToolPanelButtonIsChecked));
  229. OnPropertyChanged(nameof(ViewSettingBtnIsChecked));
  230. }
  231. }
  232. public void SetFeatureMode(string featureName)
  233. {
  234. if (!string.IsNullOrEmpty(featureName))
  235. {
  236. switch (featureName)
  237. {
  238. case "Viewer":
  239. ModeComboBox.SelectedIndex = 0;
  240. break;
  241. case "Annotations":
  242. ModeComboBox.SelectedIndex = 1;
  243. break;
  244. case "Forms":
  245. ModeComboBox.SelectedIndex = 2;
  246. break;
  247. case "Signatures":
  248. ModeComboBox.SelectedIndex = 5;
  249. break;
  250. case "Document Editor":
  251. ModeComboBox.SelectedIndex = 4;
  252. break;
  253. case "Content Editor":
  254. ModeComboBox.SelectedIndex = 3;
  255. break;
  256. case "Measurement":
  257. ModeComboBox.SelectedIndex = 6;
  258. break;
  259. default:
  260. break;
  261. }
  262. }
  263. }
  264. internal void SetPDFViewer(PDFViewControl newPdfViewer)
  265. {
  266. if (newPdfViewer != null)
  267. {
  268. viewControl = newPdfViewer;
  269. }
  270. }
  271. #endregion
  272. #region Password
  273. /// <summary>
  274. /// Event handler for confirming the password. Open the PDF file if the password is correct.
  275. /// </summary>
  276. /// <param name="sender"></param>
  277. /// <param name="e"></param>
  278. private void PasswordUI_Confirmed(object sender, string e)
  279. {
  280. if (passwordViewer != null && passwordViewer.PDFViewTool != null)
  281. {
  282. CPDFViewer pdfviewer = passwordViewer.PDFViewTool.GetCPDFViewer();
  283. CPDFDocument pdfDoc = pdfviewer?.GetDocument();
  284. if (pdfDoc == null)
  285. {
  286. return;
  287. }
  288. pdfDoc.UnlockWithPassword(e);
  289. if (pdfDoc.IsLocked == false)
  290. {
  291. PasswordUI.SetShowError("", Visibility.Collapsed);
  292. PasswordUI.ClearPassword();
  293. PasswordUI.Visibility = Visibility.Collapsed;
  294. PopupBorder.Visibility = Visibility.Collapsed;
  295. viewControl = passwordViewer;
  296. LoadDocument();
  297. viewControl.PDFViewTool.GetCPDFViewer().UpdateVirtualNodes();
  298. FileChangeEvent?.Invoke(null, EventArgs.Empty);
  299. }
  300. else
  301. {
  302. PasswordUI.SetShowError("Wrong Password", Visibility.Visible);
  303. }
  304. }
  305. }
  306. /// <summary>
  307. /// Event handler for canceling password input.
  308. /// </summary>
  309. /// <param name="sender"></param>
  310. /// <param name="e"></param>
  311. private void PasswordUI_Canceled(object sender, EventArgs e)
  312. {
  313. PopupBorder.Visibility = Visibility.Collapsed;
  314. PasswordUI.Visibility = Visibility.Collapsed;
  315. }
  316. /// <summary>
  317. /// Event handler for closing the password input dialog.
  318. /// </summary>
  319. /// <param name="sender"></param>
  320. /// <param name="e"></param>
  321. private void PasswordUI_Closed(object sender, EventArgs e)
  322. {
  323. PopupBorder.Visibility = Visibility.Collapsed;
  324. PasswordUI.Visibility = Visibility.Collapsed;
  325. }
  326. #endregion
  327. #region Load custom control
  328. /// <summary>
  329. /// Load the custom controls for the PDF viewer.
  330. /// </summary>
  331. private void LoadCustomControl()
  332. {
  333. regularViewerControl.PdfViewControl = viewControl;
  334. regularViewerControl.OnCanSaveChanged -= ControlOnCanSaveChanged;
  335. regularViewerControl.OnCanSaveChanged += ControlOnCanSaveChanged;
  336. regularViewerControl.InitWithPDFViewer(viewControl);
  337. //regularViewerControl.PdfViewControl.PDFView.SetMouseMode(MouseModes.Viewer);
  338. regularViewerControl.SetBOTAContainer(null);
  339. regularViewerControl.SetBOTAContainer(botaBarControl);
  340. regularViewerControl.SetDisplaySettingsControl(displaySettingsControl);
  341. PDFGrid.Child = regularViewerControl;
  342. SignatureHelper.InitEffectiveSignatureList(viewControl.GetCPDFViewer().GetDocument());
  343. SignatureHelper.VerifySignatureList(viewControl.GetCPDFViewer().GetDocument());
  344. digitalSignatureControl.LoadUndoManagerEvent(viewControl.GetCPDFViewer());
  345. signatureStatusBarControl.SetStatus(SignatureHelper.SignatureList);
  346. viewControl.PDFViewTool.SetViewerModel(MouseModes.Viewer);
  347. }
  348. /// <summary>
  349. /// Event handler for the Loaded event of the MainPage.
  350. /// </summary>
  351. /// <param name="sender"></param>
  352. /// <param name="e"></param>
  353. private void MainPage_Loaded(object sender, RoutedEventArgs e)
  354. {
  355. LoadDocument();
  356. }
  357. #endregion
  358. #region Event handle
  359. private void PdfViewer_InfoChanged(object sender, KeyValuePair<string, object> e)
  360. {
  361. if (e.Key == "Zoom")
  362. {
  363. CPDFSaclingControl.SetZoomTextBoxText(string.Format("{0}", (int)((double)e.Value * 100)));
  364. }
  365. }
  366. /// <summary>
  367. /// Command for opening a PDF file saved with a signature.
  368. /// </summary>
  369. /// <param name="sender"></param>
  370. /// <param name="e"></param>
  371. private void DigitalSignatureControl_AfterFillSignature(object sender, string e)
  372. {
  373. OpenFile(e);
  374. }
  375. /// <summary>
  376. /// Event handler for deleting a signature from the BOTA. Set the CanSave property to true and update the signature status.
  377. /// </summary>
  378. /// <param name="sender"></param>
  379. /// <param name="e"></param>
  380. private void BotaControlOnDeleteSignatureEvent(object sender, EventArgs e)
  381. {
  382. DigitalSignatureControl_OnSignatureStatusChanged(sender, e);
  383. }
  384. /// <summary>
  385. /// Event handler for updating a signature. Update the signature status.
  386. /// </summary>
  387. /// <param name="sender"></param>
  388. /// <param name="e"></param>
  389. private void DigitalSignatureControl_OnSignatureStatusChanged(object sender, EventArgs e)
  390. {
  391. SignatureHelper.InitEffectiveSignatureList(viewControl.GetCPDFViewer().GetDocument());
  392. SignatureHelper.VerifySignatureList(viewControl.GetCPDFViewer().GetDocument());
  393. signatureStatusBarControl.SetStatus(SignatureHelper.SignatureList);
  394. botaBarControl.LoadSignatureList();
  395. }
  396. /// <summary>
  397. /// Event handler for updating the CanSave property.
  398. /// </summary>
  399. /// <param name="sender"></param>
  400. /// <param name="e"></param>
  401. private void DigitalSignatureControl_OnCanSaveChanged(object sender, bool e)
  402. {
  403. this.CanSave = e;
  404. }
  405. #endregion
  406. #region Private Command Event
  407. /// <summary>
  408. /// Close all the expanded panels.
  409. /// </summary>
  410. private void ClearPanelState()
  411. {
  412. LeftToolPanelButtonIsChecked = false;
  413. ViewSettingBtnIsChecked = false;
  414. RightToolPanelButtonIsChecked = false;
  415. }
  416. private void LeftToolPanelButton_Click(object sender, RoutedEventArgs e)
  417. {
  418. panelState.IsLeftPanelExpand = (sender as ToggleButton).IsChecked == true;
  419. }
  420. private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
  421. {
  422. var item = (sender as ComboBox).SelectedItem as ComboBoxItem;
  423. if ((string)item.Tag == currentMode)
  424. {
  425. return;
  426. }
  427. ClearPanelState();
  428. if (ViewSettingBtn != null)
  429. ViewSettingBtn.IsChecked = false;
  430. if (RightPanelButton != null)
  431. RightPanelButton.IsChecked = false;
  432. if (viewControl != null && viewControl.GetCPDFViewer() != null)
  433. {
  434. // pdfViewer.PDFView.ToolManager.EnableClickCreate = false;
  435. }
  436. if (currentMode == "Viewer")
  437. {
  438. regularViewerControl.ClearViewerControl();
  439. }
  440. else if (currentMode == "Annotation")
  441. {
  442. annotationControl.UnloadEvent();
  443. annotationControl.ClearViewerControl();
  444. annotationControl.PDFAnnotationControl.AnnotationCancel();
  445. viewControl.SetIsShowStampMouse(false);
  446. }
  447. else if (currentMode == "Form")
  448. {
  449. formControl.UnloadEvent();
  450. formControl.ClearViewerControl();
  451. viewControl.SetIsShowStampMouse(false);
  452. viewControl.GetCPDFViewer().SetFormFieldHighlight(Properties.Settings.Default.IsHighlightFormArea);
  453. }
  454. else if (currentMode == "Content Editor")
  455. {
  456. botaBarControl.ReplaceFunctionEnabled = false;
  457. displaySettingsControl.SetVisibilityWhenContentEdit(Visibility.Visible);
  458. contentEditControl.ClearViewerControl();
  459. contentEditControl.ClearPDFEditState();
  460. }
  461. else if (currentMode == "Document Editor")
  462. {
  463. pageEditControl.ExitPageEdit -= PageEditControl_ExitPageEdit;
  464. NotDocsEditorVisible = Visibility.Visible;
  465. botaBarControl.LoadThumbnail();
  466. }
  467. else if (currentMode == "Digital Signature")
  468. {
  469. RightPanelButton.Visibility = Visibility.Visible;
  470. digitalSignatureControl.ClearViewerControl();
  471. botaBarControl.RemoveBOTAContent(BOTATools.Signature);
  472. }
  473. else if (currentMode == "Measurement")
  474. {
  475. RightPanelButton.Visibility = Visibility.Visible;
  476. GetPDFViewControl().PDFViewTool.GetDefaultSettingParam().IsOpenMeasure = false;
  477. measureControl.ClearAllToolState();
  478. measureControl.ClearViewerControl();
  479. }
  480. if (item.Tag as string == "Viewer")
  481. {
  482. regularViewerControl.PdfViewControl = viewControl;
  483. regularViewerControl.InitWithPDFViewer(viewControl);
  484. if (regularViewerControl.PdfViewControl != null)
  485. {
  486. PDFGrid.Child = regularViewerControl;
  487. viewControl.SetToolType(ComPDFKit.Tool.CPDFToolManager.ToolType.Viewer);
  488. regularViewerControl.OnCanSaveChanged -= ControlOnCanSaveChanged;
  489. regularViewerControl.OnCanSaveChanged += ControlOnCanSaveChanged;
  490. regularViewerControl.SetBOTAContainer(botaBarControl);
  491. regularViewerControl.SetDisplaySettingsControl(displaySettingsControl);
  492. }
  493. }
  494. else if (item.Tag as string == "Annotation")
  495. {
  496. annotationControl.SetToolBarContainerVisibility(Visibility.Visible);
  497. PDFGrid.Child = annotationControl;
  498. viewControl.SetToolType(ComPDFKit.Tool.CPDFToolManager.ToolType.CreateAnnot);
  499. viewControl.PDFViewTool.SetViewerModel(MouseModes.PanTool);
  500. annotationControl.PDFViewControl = viewControl;
  501. annotationControl.InitWithPDFViewer(viewControl);
  502. if (annotationControl.PDFViewControl != null)
  503. {
  504. annotationControl.OnCanSaveChanged -= ControlOnCanSaveChanged;
  505. annotationControl.OnCanSaveChanged += ControlOnCanSaveChanged;
  506. annotationControl.OnAnnotEditHandler -= PdfFormControlRefreshAnnotList;
  507. annotationControl.OnAnnotEditHandler += PdfFormControlRefreshAnnotList;
  508. annotationControl.InitialPDFViewControl(annotationControl.PDFViewControl);
  509. annotationControl.SetBOTAContainer(botaBarControl);
  510. annotationControl.SetDisplaySettingsControl(displaySettingsControl);
  511. }
  512. }
  513. else if (item.Tag as string == "Form")
  514. {
  515. formControl.SetToolBarContainerVisibility(Visibility.Visible);
  516. formControl.PdfViewControl = viewControl;
  517. formControl.InitWithPDFViewer(viewControl);
  518. if (formControl.PdfViewControl != null)
  519. {
  520. PDFGrid.Child = formControl;
  521. viewControl.SetToolType(ComPDFKit.Tool.CPDFToolManager.ToolType.WidgetEdit);
  522. formControl.OnCanSaveChanged -= ControlOnCanSaveChanged;
  523. formControl.OnCanSaveChanged += ControlOnCanSaveChanged;
  524. formControl.OnAnnotEditHandler -= PdfFormControlRefreshAnnotList;
  525. formControl.OnAnnotEditHandler += PdfFormControlRefreshAnnotList;
  526. formControl.SetBOTAContainer(botaBarControl);
  527. formControl.InitialPDFViewControl(formControl.PdfViewControl);
  528. formControl.SetDisplaySettingsControl(displaySettingsControl);
  529. viewControl.GetCPDFViewer().SetFormFieldHighlight(true);
  530. }
  531. }
  532. else if (item.Tag as string == "Content Editor")
  533. {
  534. contentEditControl.PdfViewControl = viewControl;
  535. contentEditControl.InitWithPDFViewer(viewControl);
  536. displaySettingsControl.SetVisibilityWhenContentEdit(Visibility.Collapsed);
  537. if (contentEditControl.pdfContentEditControl != null && contentEditControl.PdfViewControl != null)
  538. {
  539. PDFGrid.Child = contentEditControl;
  540. viewControl.SetToolType(ComPDFKit.Tool.CPDFToolManager.ToolType.ContentEdit);
  541. viewControl.PDFViewTool.SetViewerModel(MouseModes.ContentEdit);
  542. contentEditControl.OnCanSaveChanged -= ControlOnCanSaveChanged;
  543. contentEditControl.OnCanSaveChanged += ControlOnCanSaveChanged;
  544. contentEditControl.SetBOTAContainer(botaBarControl);
  545. contentEditControl.SetDisplaySettingsControl(displaySettingsControl);
  546. contentEditControl.PdfViewControl.SetSplitViewMode(CPDFViewModeUI.SplitMode.None);
  547. }
  548. }
  549. else if (item.Tag as string == "Document Editor")
  550. {
  551. pageEditControl.PDFViewControl = viewControl;
  552. pageEditControl.ExitPageEdit += PageEditControl_ExitPageEdit;
  553. PDFGrid.Child = pageEditControl;
  554. NotDocsEditorVisible = Visibility.Collapsed;
  555. }
  556. else if (item.Tag as string == "Digital Signature")
  557. {
  558. if (digitalSignatureControl.PDFViewControl != null)
  559. {
  560. RightPanelButton.Visibility = Visibility.Collapsed;
  561. PDFGrid.Child = digitalSignatureControl;
  562. viewControl.PDFViewTool.SetViewerModel(MouseModes.PanTool);
  563. digitalSignatureControl.PDFViewControl = viewControl;
  564. botaBarControl.AddBOTAContent(BOTATools.Signature);
  565. digitalSignatureControl.InitWithPDFViewer(viewControl);
  566. digitalSignatureControl.SetBOTAContainer(botaBarControl);
  567. digitalSignatureControl.SetDisplaySettingsControl(displaySettingsControl);
  568. digitalSignatureControl.SetSignatureStatusBarControl(signatureStatusBarControl);
  569. signatureStatusBarControl.OnViewSignatureButtonClicked -= ViewAllSignatures;
  570. signatureStatusBarControl.OnViewSignatureButtonClicked += ViewAllSignatures;
  571. digitalSignatureControl.OnCanSaveChanged -= DigitalSignatureControl_OnCanSaveChanged;
  572. digitalSignatureControl.OnCanSaveChanged += DigitalSignatureControl_OnCanSaveChanged;
  573. digitalSignatureControl.SignatureStatusChanged -= DigitalSignatureControl_OnSignatureStatusChanged;
  574. digitalSignatureControl.SignatureStatusChanged += DigitalSignatureControl_OnSignatureStatusChanged;
  575. digitalSignatureControl.AfterFillSignature -= DigitalSignatureControl_AfterFillSignature;
  576. digitalSignatureControl.AfterFillSignature += DigitalSignatureControl_AfterFillSignature;
  577. }
  578. }
  579. else if (item.Tag as string == "Measurement")
  580. {
  581. if (contentEditControl.pdfContentEditControl != null && viewControl != null)
  582. {
  583. RightPanelButton.Visibility = Visibility.Visible;
  584. PDFGrid.Child = measureControl;
  585. viewControl.PDFViewTool.SetViewerModel(MouseModes.Viewer);
  586. viewControl.SetToolType(ToolType.Pan);
  587. measureControl.InitWithPDFViewer(viewControl);
  588. measureControl.SetBOTAContainer(botaBarControl);
  589. GetPDFViewControl().PDFViewTool.GetDefaultSettingParam().IsOpenMeasure = true;
  590. }
  591. }
  592. currentMode = item.Tag as string;
  593. RightToolPanelButtonIsChecked = false;
  594. }
  595. /// <summary>
  596. /// Event handler for ViewSignatureBtn click event. Expand the bota control and select the Signature tool.
  597. /// </summary>
  598. /// <param name="sender"></param>
  599. /// <param name="e"></param>
  600. private void ViewAllSignatures(object sender, EventArgs e)
  601. {
  602. LeftToolPanelButton.IsChecked = true;
  603. botaBarControl.SelectBotaTool(BOTATools.Signature);
  604. }
  605. private void PageEditControl_ExitPageEdit(object sender, EventArgs e)
  606. {
  607. ModeComboBox.SelectedIndex = 0;
  608. }
  609. private void PageInfoBtn_Click(object sender, RoutedEventArgs e)
  610. {
  611. PasswordUI.Visibility = Visibility.Collapsed;
  612. FileInfoUI.Visibility = Visibility.Visible;
  613. FileInfoControl.InitWithPDFViewer(viewControl);
  614. PopupBorder.Visibility = Visibility.Visible;
  615. }
  616. private void ViewSettingBtn_Click(object sender, RoutedEventArgs e)
  617. {
  618. panelState.RightPanel =
  619. ((sender as ToggleButton).IsChecked == true) ?
  620. PanelState.RightPanelState.ViewSettings : PanelState.RightPanelState.None;
  621. }
  622. private void RightPanelButton_Click(object sender, RoutedEventArgs e)
  623. {
  624. panelState.RightPanel =
  625. ((sender as ToggleButton).IsChecked == true) ?
  626. PanelState.RightPanelState.PropertyPanel : PanelState.RightPanelState.None;
  627. }
  628. private void ExpandSearchBtn_Click(object sender, RoutedEventArgs e)
  629. {
  630. LeftToolPanelButton.IsChecked = true;
  631. botaBarControl.SelectBotaTool(BOTATools.Search);
  632. }
  633. private void CPDFTitleBarControl_Loaded(object sender, RoutedEventArgs e)
  634. {
  635. CPDFTitleBarControl.OpenFileEvent -= CPDFTitleBarControl_OpenFileEvent;
  636. CPDFTitleBarControl.OpenFileEvent += CPDFTitleBarControl_OpenFileEvent;
  637. CPDFTitleBarControl.SaveAsFileEvent -= CPDFTitleBarControl_SaveAsFileEvent;
  638. CPDFTitleBarControl.SaveAsFileEvent += CPDFTitleBarControl_SaveAsFileEvent;
  639. CPDFTitleBarControl.SaveFileEvent -= CPDFTitleBarControl_SaveFileEvent;
  640. CPDFTitleBarControl.SaveFileEvent += CPDFTitleBarControl_SaveFileEvent;
  641. CPDFTitleBarControl.FlattenEvent -= CPDFTitleBarControl_FlattenEvent;
  642. CPDFTitleBarControl.FlattenEvent += CPDFTitleBarControl_FlattenEvent;
  643. }
  644. private void CPDFTitleBarControl_FlattenEvent(object sender, EventArgs e)
  645. {
  646. if (viewControl != null && viewControl.GetCPDFViewer() != null && viewControl.GetCPDFViewer().GetDocument() != null)
  647. {
  648. string savePath = Compdfkit_Tools.Helper.CommonHelper.GetGeneratePathOrEmpty("PDF files (*.pdf)|*.pdf", viewControl.GetCPDFViewer().GetDocument().FileName + "_Flattened.pdf");
  649. if (!string.IsNullOrEmpty(savePath))
  650. {
  651. if (CanSave)
  652. {
  653. SaveFile();
  654. viewControl.PDFViewTool.IsDocumentModified = false;
  655. }
  656. CPDFDocument document = CPDFDocument.InitWithFilePath(viewControl.GetCPDFViewer().GetDocument().FilePath);
  657. if (document?.WriteFlattenToFilePath(savePath) == true)
  658. {
  659. System.Diagnostics.Process.Start("Explorer.exe", "/select," + savePath);
  660. }
  661. document?.Release();
  662. }
  663. }
  664. }
  665. private void CPDFTitleBarControl_SaveFileEvent(object sender, EventArgs e)
  666. {
  667. SaveFile();
  668. }
  669. private void CPDFTitleBarControl_SaveAsFileEvent(object sender, EventArgs e)
  670. {
  671. SaveAsFile();
  672. }
  673. private void CPDFTitleBarControl_OpenFileEvent(object sender, EventArgs e)
  674. {
  675. OpenFile();
  676. }
  677. private void FileInfoCloseBtn_Click(object sender, RoutedEventArgs e)
  678. {
  679. PopupBorder.Visibility = Visibility.Collapsed;
  680. }
  681. /// <summary>
  682. /// Refresh the annotation list when a annotation is edited.
  683. /// </summary>
  684. /// <param name="sender"></param>
  685. /// <param name="e"></param>
  686. private void PdfFormControlRefreshAnnotList(object sender, EventArgs e)
  687. {
  688. botaBarControl.LoadAnnotationList();
  689. }
  690. /// <summary>
  691. /// When a CanSave property of a control is changed, the CanSave property of current page is changed.
  692. /// </summary>
  693. /// <param name="sender"></param>
  694. /// <param name="e"></param>
  695. private void ControlOnCanSaveChanged(object sender, bool e)
  696. {
  697. this.CanSave = e;
  698. }
  699. protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
  700. {
  701. PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
  702. }
  703. #endregion
  704. #region Open and Save file
  705. private void SaveFileBtn_Click(object sender, RoutedEventArgs e)
  706. {
  707. SaveFile();
  708. CanSave = false;
  709. }
  710. private void OpenFile(string filePath = "")
  711. {
  712. if (viewControl != null && viewControl.PDFViewTool != null)
  713. {
  714. CPDFViewer pdfviewer = viewControl.PDFViewTool.GetCPDFViewer();
  715. CPDFDocument pdfDoc = pdfviewer?.GetDocument();
  716. if (pdfDoc == null)
  717. {
  718. return;
  719. }
  720. if (string.IsNullOrEmpty(filePath))
  721. {
  722. filePath = Compdfkit_Tools.Helper.CommonHelper.GetExistedPathOrEmpty();
  723. }
  724. string oldFilePath = pdfDoc.FilePath;
  725. if (!string.IsNullOrEmpty(filePath) && regularViewerControl.PdfViewControl != null)
  726. {
  727. if (oldFilePath.ToLower() == filePath.ToLower())
  728. {
  729. return;
  730. }
  731. if ((bool)CheckExistBeforeOpenFileEvent?.Invoke(new string[] { filePath, oldFilePath }))
  732. {
  733. return;
  734. }
  735. passwordViewer = new PDFViewControl();
  736. passwordViewer.InitDocument(filePath);
  737. CPDFViewer tempViewer = passwordViewer.PDFViewTool?.GetCPDFViewer();
  738. CPDFDocument tempDoc = tempViewer?.GetDocument();
  739. if (tempDoc == null)
  740. {
  741. MessageBox.Show("Open File Failed");
  742. return;
  743. }
  744. if (passwordViewer.GetCPDFViewer().GetDocument().IsLocked)
  745. {
  746. PasswordUI.SetShowText(System.IO.Path.GetFileName(filePath) + " " + LanguageHelper.CommonManager.GetString("Tip_Encrypted"));
  747. PasswordUI.ClearPassword();
  748. PopupBorder.Visibility = Visibility.Visible;
  749. PasswordUI.Visibility = Visibility.Visible;
  750. }
  751. else
  752. {
  753. pdfDoc.Release();
  754. viewControl = passwordViewer;
  755. LoadDocument();
  756. FileChangeEvent?.Invoke(null, EventArgs.Empty);
  757. }
  758. }
  759. }
  760. }
  761. private void OpenFile_Click(object sender, RoutedEventArgs e)
  762. {
  763. OpenFile();
  764. }
  765. /// <summary>
  766. /// Save the file to another PDF file.
  767. /// </summary>
  768. public void SaveAsFile()
  769. {
  770. if (viewControl != null && viewControl.PDFViewTool != null)
  771. {
  772. CPDFViewer pdfviewer = viewControl.PDFViewTool.GetCPDFViewer();
  773. CPDFDocument pdfDoc = pdfviewer?.GetDocument();
  774. if (pdfDoc == null)
  775. {
  776. return;
  777. }
  778. SaveFileDialog saveDialog = new SaveFileDialog();
  779. saveDialog.Filter = "(*.pdf)|*.pdf";
  780. saveDialog.DefaultExt = ".pdf";
  781. saveDialog.OverwritePrompt = true;
  782. if (saveDialog.ShowDialog() == true)
  783. {
  784. pdfDoc.WriteToFilePath(saveDialog.FileName);
  785. }
  786. }
  787. }
  788. /// <summary>
  789. /// Save the file in the current path.
  790. /// </summary>
  791. public void SaveFile()
  792. {
  793. if (viewControl != null && viewControl.PDFViewTool != null)
  794. {
  795. CPDFViewer pdfviewer = viewControl.PDFViewTool.GetCPDFViewer();
  796. CPDFDocument pdfDoc = pdfviewer?.GetDocument();
  797. if (pdfDoc == null)
  798. {
  799. return;
  800. }
  801. try
  802. {
  803. if (!string.IsNullOrEmpty(pdfDoc.FilePath))
  804. {
  805. if (pdfDoc.WriteToLoadedPath())
  806. {
  807. return;
  808. }
  809. }
  810. SaveFileDialog saveDialog = new SaveFileDialog
  811. {
  812. Filter = "(*.pdf)|*.pdf",
  813. DefaultExt = ".pdf",
  814. OverwritePrompt = true
  815. };
  816. if (saveDialog.ShowDialog() == true)
  817. {
  818. if (pdfDoc.WriteToFilePath(saveDialog.FileName))
  819. {
  820. AfterSaveAsFileEvent?.Invoke(this, saveDialog.FileName);
  821. }
  822. }
  823. }
  824. catch (Exception ex)
  825. {
  826. return;
  827. }
  828. }
  829. }
  830. #endregion
  831. #region Command Binding
  832. private double CheckZoomLevel(double zoom, bool IsGrowth)
  833. {
  834. double standardZoom = 100;
  835. if (zoom <= 0.01)
  836. {
  837. return 0.01;
  838. }
  839. if (zoom >= 10)
  840. {
  841. return 10;
  842. }
  843. zoom *= 100;
  844. for (int i = 0; i < zoomLevelList.Length - 1; i++)
  845. {
  846. if (zoom > zoomLevelList[i] && zoom <= zoomLevelList[i + 1] && IsGrowth)
  847. {
  848. standardZoom = zoomLevelList[i + 1];
  849. break;
  850. }
  851. if (zoom >= zoomLevelList[i] && zoom < zoomLevelList[i + 1] && !IsGrowth)
  852. {
  853. standardZoom = zoomLevelList[i];
  854. break;
  855. }
  856. }
  857. return standardZoom / 100;
  858. }
  859. private void CommandBinding_Executed_Open(object sender, ExecutedRoutedEventArgs e)
  860. {
  861. OpenFile();
  862. }
  863. private void CommandBinding_Executed_Save(object sender, ExecutedRoutedEventArgs e)
  864. {
  865. if (CanSave)
  866. {
  867. SaveFile();
  868. }
  869. }
  870. private void CommandBinding_Executed_SaveAs(object sender, ExecutedRoutedEventArgs e)
  871. {
  872. SaveAsFile();
  873. }
  874. private void CommandBinding_Executed_ControlLeftPanel(object sender, ExecutedRoutedEventArgs e)
  875. {
  876. panelState.IsLeftPanelExpand = !panelState.IsLeftPanelExpand;
  877. }
  878. private void CommandBinding_Executed_ControlRightPanel(object sender, ExecutedRoutedEventArgs e)
  879. {
  880. if (panelState.RightPanel == PanelState.RightPanelState.PropertyPanel)
  881. {
  882. panelState.RightPanel = PanelState.RightPanelState.None;
  883. }
  884. else
  885. {
  886. panelState.RightPanel = PanelState.RightPanelState.PropertyPanel;
  887. }
  888. }
  889. private void CommandBinding_Executed_Bookmark(object sender, ExecutedRoutedEventArgs e)
  890. {
  891. LeftToolPanelButton.IsChecked = true;
  892. botaBarControl.SelectBotaTool(BOTATools.Bookmark);
  893. }
  894. private void CommandBinding_Executed_Outline(object sender, ExecutedRoutedEventArgs e)
  895. {
  896. LeftToolPanelButton.IsChecked = true;
  897. botaBarControl.SelectBotaTool(BOTATools.Outline);
  898. }
  899. private void CommandBinding_Executed_Thumbnail(object sender, ExecutedRoutedEventArgs e)
  900. {
  901. LeftToolPanelButton.IsChecked = true;
  902. botaBarControl.SelectBotaTool(BOTATools.Thumbnail);
  903. }
  904. private void CommandBinding_Executed_Annotation(object sender, ExecutedRoutedEventArgs e)
  905. {
  906. LeftToolPanelButton.IsChecked = true;
  907. botaBarControl.SelectBotaTool(BOTATools.Annotation);
  908. }
  909. private void CommandBinding_Executed_Search(object sender, ExecutedRoutedEventArgs e)
  910. {
  911. LeftToolPanelButton.IsChecked = true;
  912. botaBarControl.SelectBotaTool(BOTATools.Search);
  913. }
  914. private void CommandBinding_Executed_ScaleAdd(object sender, ExecutedRoutedEventArgs e)
  915. {
  916. if (viewControl != null && viewControl.PDFViewTool != null)
  917. {
  918. CPDFViewer pdfViewer = viewControl.PDFViewTool.GetCPDFViewer();
  919. if (pdfViewer != null)
  920. {
  921. double newZoom = CheckZoomLevel(pdfViewer.GetZoom() + 0.01, true);
  922. pdfViewer.SetZoom(newZoom);
  923. }
  924. }
  925. }
  926. private void CommandBinding_Executed_ScaleSubtract(object sender, ExecutedRoutedEventArgs e)
  927. {
  928. if (viewControl != null && viewControl.PDFViewTool != null)
  929. {
  930. CPDFViewer pdfViewer = viewControl.PDFViewTool.GetCPDFViewer();
  931. if (pdfViewer != null)
  932. {
  933. double newZoom = CheckZoomLevel(pdfViewer.GetZoom() - 0.01, false);
  934. pdfViewer.SetZoom(newZoom);
  935. }
  936. }
  937. }
  938. private void CommandBinding_Executed_DisplaySettings(object sender, ExecutedRoutedEventArgs e)
  939. {
  940. panelState.RightPanel = PanelState.RightPanelState.ViewSettings;
  941. }
  942. private void CommandBinding_Executed_DocumentInfo(object sender, ExecutedRoutedEventArgs e)
  943. {
  944. if (PopupBorder.Visibility != Visibility.Visible)
  945. {
  946. PasswordUI.Visibility = Visibility.Collapsed;
  947. FileInfoControl.Visibility = Visibility.Visible;
  948. FileInfoControl.InitWithPDFViewer(viewControl);
  949. FileInfoControl.CloseInfoEvent -= CPDFInfoControl_CloseInfoEvent;
  950. FileInfoControl.CloseInfoEvent += CPDFInfoControl_CloseInfoEvent;
  951. PopupBorder.Visibility = Visibility.Visible;
  952. }
  953. else
  954. {
  955. FileInfoControl.Visibility = Visibility.Collapsed;
  956. PopupBorder.Visibility = Visibility.Collapsed;
  957. this.Focus();
  958. }
  959. }
  960. private void CPDFInfoControl_CloseInfoEvent(object sender, EventArgs e)
  961. {
  962. PopupBorder.Visibility = Visibility.Collapsed;
  963. }
  964. #endregion
  965. }
  966. }