MainWindow.xaml.cs 47 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220
  1. using ComPDFKit.PDFDocument;
  2. using ComPDFKit.PDFPage;
  3. using compdfkit_tools.Edit;
  4. using compdfkit_tools.Helper;
  5. using compdfkit_tools.PDFControl;
  6. using ComPDFKitViewer;
  7. using ComPDFKitViewer.AnnotEvent;
  8. using ComPDFKitViewer.PdfViewer;
  9. using Microsoft.Win32;
  10. using System;
  11. using System.Collections.Generic;
  12. using System.ComponentModel;
  13. using System.Diagnostics;
  14. using System.Drawing;
  15. using System.IO;
  16. using System.Runtime.CompilerServices;
  17. using System.Windows;
  18. using System.Windows.Controls;
  19. using System.Windows.Controls.Primitives;
  20. using System.Windows.Input;
  21. using System.Windows.Media.Imaging;
  22. namespace edit_ctrl_demo
  23. {
  24. /// <summary>
  25. /// MainWindow.xaml 的交互逻辑
  26. /// </summary>
  27. public partial class MainWindow : Window, INotifyPropertyChanged
  28. {
  29. /// <summary>
  30. /// 是否能够撤销
  31. /// </summary>
  32. public bool CanUndo
  33. {
  34. get
  35. {
  36. if (pdfViewControl != null && pdfViewControl.PDFView != null)
  37. {
  38. return pdfViewControl.PDFView.UndoManager.CanUndo;
  39. }
  40. return false;
  41. }
  42. }
  43. /// <summary>
  44. /// 是否能够重做
  45. /// </summary>
  46. public bool CanRedo
  47. {
  48. get
  49. {
  50. if (pdfViewControl != null && pdfViewControl.PDFView != null)
  51. {
  52. return pdfViewControl.PDFView.UndoManager.CanRedo;
  53. }
  54. return false;
  55. }
  56. }
  57. public bool CanSave
  58. {
  59. get
  60. {
  61. if (pdfViewControl != null && pdfViewControl.PDFView != null)
  62. {
  63. return pdfViewControl.PDFView.UndoManager.CanSave;
  64. }
  65. return false;
  66. }
  67. }
  68. /// <summary>
  69. /// 上一次的PDF编辑对象
  70. /// </summary>
  71. private PDFEditEvent lastPDFEditEvent = null;
  72. /// <summary>
  73. /// 缩放比例
  74. /// </summary>
  75. private PDFViewControl passwordViewer;
  76. private PDFViewControl pdfViewControl;
  77. private PDFImageEditControl imageEditControl = new PDFImageEditControl();
  78. private PDFTextEditControl textEditControl = new PDFTextEditControl();
  79. private CPDFSearchControl searchControl = null;
  80. private double[] zoomLevelList = { 1f, 8f, 12f, 25, 33f, 50, 66f, 75, 100, 125, 150, 200, 300, 400, 600, 800, 1000 };
  81. public MainWindow()
  82. {
  83. InitializeComponent();
  84. Loaded += MainWindow_Loaded;
  85. DataContext = this;
  86. }
  87. /// <summary>
  88. /// 属性更改事件
  89. /// </summary>
  90. public event PropertyChangedEventHandler PropertyChanged;
  91. /// <summary>
  92. ///触发属性更改事件通知
  93. /// </summary>
  94. protected void OnPropertyChanged([CallerMemberName] string name = null)
  95. {
  96. PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
  97. }
  98. private void MainWindow_Loaded(object sender, RoutedEventArgs e)
  99. {
  100. LoadDefaultDocument();
  101. }
  102. private void LoadDocument()
  103. {
  104. pdfViewControl.PDFView?.Load();
  105. PDFGrid.Child = pdfViewControl;
  106. pdfViewControl.PDFView.InfoChanged -= PdfViewer_InfoChanged;
  107. pdfViewControl.PDFView.InfoChanged += PdfViewer_InfoChanged;
  108. PasswordUI.Closed -= PasswordUI_Closed;
  109. PasswordUI.Canceled -= PasswordUI_Canceled;
  110. PasswordUI.Confirmed -= PasswordUI_Confirmed;
  111. PasswordUI.Closed += PasswordUI_Closed;
  112. PasswordUI.Canceled += PasswordUI_Canceled;
  113. PasswordUI.Confirmed += PasswordUI_Confirmed;
  114. pdfViewControl.PDFView.PDFEditActiveHandler -= PDFView_PDFEditActiveHandler;
  115. pdfViewControl.PDFView.PDFEditActiveHandler += PDFView_PDFEditActiveHandler;
  116. pdfViewControl.PDFView.UndoManager.PropertyChanged -= UndoManager_PropertyChanged;
  117. pdfViewControl.PDFView.UndoManager.PropertyChanged += UndoManager_PropertyChanged;
  118. pdfViewControl.PDFView.PDFEditCommandHandler -= PDFView_PDFEditCommandHandler;
  119. pdfViewControl.PDFView.PDFEditCommandHandler += PDFView_PDFEditCommandHandler;
  120. pdfViewControl.PDFView.AnnotCommandHandler -= PDFView_AnnotCommandHandler;
  121. pdfViewControl.PDFView.AnnotCommandHandler += PDFView_AnnotCommandHandler;
  122. pdfViewControl.PDFView.SetFormFieldHighlight(true);
  123. CPDFSaclingControl.InitWithPDFViewer(pdfViewControl.PDFView);
  124. CPDFSaclingControl.SetZoomTextBoxText(string.Format("{0}", (int)(pdfViewControl.PDFView.ZoomFactor * 100)));
  125. UIElement currentBotaTool = GetBotaTool();
  126. if (currentBotaTool is CPDFSearchControl)
  127. {
  128. ((CPDFSearchControl)currentBotaTool).InitWithPDFViewer(pdfViewControl.PDFView);
  129. }
  130. if (currentBotaTool is CPDFThumbnailControl)
  131. {
  132. ((CPDFThumbnailControl)currentBotaTool).InitWithPDFViewer(pdfViewControl.PDFView);
  133. ((CPDFThumbnailControl)currentBotaTool).ThumbLoaded = false;
  134. ((CPDFThumbnailControl)currentBotaTool).LoadThumb();
  135. }
  136. if (currentBotaTool is CPDFBookmarkControl)
  137. {
  138. ((CPDFBookmarkControl)currentBotaTool).InitWithPDFViewer(pdfViewControl.PDFView);
  139. ((CPDFBookmarkControl)currentBotaTool).LoadBookmark();
  140. }
  141. FloatPageTool.InitWithPDFViewer(pdfViewControl.PDFView);
  142. ViewSettingBtn.IsChecked = false;
  143. PropertyContainer.Child = null;
  144. PropertyContainer.Visibility = Visibility.Collapsed;
  145. SetEditMode();
  146. }
  147. private void PDFView_AnnotCommandHandler(object sender, AnnotCommandArgs e)
  148. {
  149. if (e != null && e.CommandType == CommandType.Context)
  150. {
  151. if (e.PressOnSelectedText)
  152. {
  153. e.Handle = true;
  154. e.PopupMenu = new ContextMenu();
  155. e.PopupMenu.Items.Add(new MenuItem() { Header = "Copy", Command = ApplicationCommands.Copy, CommandTarget = (UIElement)sender });
  156. }
  157. else if (e.CommandTarget == TargetType.ImageSelection)
  158. {
  159. if (pdfViewControl != null && pdfViewControl.PDFView != null && pdfViewControl.PDFView.GetSelectImageCount() > 0)
  160. {
  161. e.Handle = true;
  162. e.PopupMenu = new ContextMenu();
  163. MenuItem imageCopyMenu = new MenuItem();
  164. imageCopyMenu = new MenuItem();
  165. imageCopyMenu.Header = "Copy Images";
  166. WeakEventManager<MenuItem, RoutedEventArgs>.AddHandler(imageCopyMenu, "Click", CopyImage_Click);
  167. imageCopyMenu.CommandParameter = e;
  168. e.PopupMenu.Items.Add(imageCopyMenu);
  169. MenuItem imageExtraMenu = new MenuItem();
  170. imageExtraMenu = new MenuItem();
  171. imageExtraMenu.Header = "Extract Images";
  172. WeakEventManager<MenuItem, RoutedEventArgs>.AddHandler(imageExtraMenu, "Click", ExtraImage_Click);
  173. imageExtraMenu.CommandParameter = e;
  174. e.PopupMenu.Items.Add(imageExtraMenu);
  175. }
  176. }
  177. else
  178. {
  179. e.Handle = true;
  180. e.PopupMenu = new ContextMenu();
  181. MenuItem fitWidthMenu = new MenuItem();
  182. fitWidthMenu.Header = "Automatically Resize";
  183. fitWidthMenu.Click += (o, p) =>
  184. {
  185. if (pdfViewControl != null)
  186. {
  187. pdfViewControl.PDFView?.ChangeFitMode(FitMode.FitWidth);
  188. }
  189. };
  190. e.PopupMenu.Items.Add(fitWidthMenu);
  191. MenuItem fitSizeMenu = new MenuItem();
  192. fitSizeMenu.Header = "Actual Size";
  193. fitSizeMenu.Click += (o, p) =>
  194. {
  195. if (pdfViewControl != null)
  196. {
  197. pdfViewControl.PDFView?.ChangeFitMode(FitMode.FitSize);
  198. }
  199. };
  200. e.PopupMenu.Items.Add(fitSizeMenu);
  201. MenuItem zoomInMenu = new MenuItem();
  202. zoomInMenu.Header = "Zoom In";
  203. zoomInMenu.Click += (o, p) =>
  204. {
  205. if (pdfViewControl != null)
  206. {
  207. double newZoom = CheckZoomLevel(pdfViewControl.PDFView.ZoomFactor + 0.01, true);
  208. pdfViewControl.PDFView?.Zoom(newZoom);
  209. }
  210. };
  211. e.PopupMenu.Items.Add(zoomInMenu);
  212. MenuItem zoomOutMenu = new MenuItem();
  213. zoomOutMenu.Header = "Zoom Out";
  214. zoomOutMenu.Click += (o, p) =>
  215. {
  216. if (pdfViewControl != null)
  217. {
  218. double newZoom = CheckZoomLevel(pdfViewControl.PDFView.ZoomFactor - 0.01, false);
  219. pdfViewControl.PDFView?.Zoom(newZoom);
  220. }
  221. };
  222. e.PopupMenu.Items.Add(zoomOutMenu);
  223. e.PopupMenu.Items.Add(new Separator());
  224. MenuItem singleView = new MenuItem();
  225. singleView.Header = "Single Page";
  226. singleView.Click += (o, p) =>
  227. {
  228. if (pdfViewControl != null)
  229. {
  230. pdfViewControl.PDFView?.ChangeViewMode(ViewMode.Single);
  231. }
  232. };
  233. e.PopupMenu.Items.Add(singleView);
  234. MenuItem singleContinuousView = new MenuItem();
  235. singleContinuousView.Header = "Single Page Continuous";
  236. singleContinuousView.Click += (o, p) =>
  237. {
  238. if (pdfViewControl != null)
  239. {
  240. pdfViewControl.PDFView?.ChangeViewMode(ViewMode.SingleContinuous);
  241. }
  242. };
  243. e.PopupMenu.Items.Add(singleContinuousView);
  244. MenuItem doubleView = new MenuItem();
  245. doubleView.Header = "Two Pages";
  246. doubleView.Click += (o, p) =>
  247. {
  248. if (pdfViewControl != null)
  249. {
  250. pdfViewControl.PDFView?.ChangeViewMode(ViewMode.Double);
  251. }
  252. };
  253. e.PopupMenu.Items.Add(doubleView);
  254. MenuItem doubleContinuousView = new MenuItem();
  255. doubleContinuousView.Header = "Two Pages Continuous";
  256. doubleContinuousView.Click += (o, p) =>
  257. {
  258. if (pdfViewControl != null)
  259. {
  260. pdfViewControl.PDFView?.ChangeViewMode(ViewMode.DoubleContinuous);
  261. }
  262. };
  263. e.PopupMenu.Items.Add(doubleContinuousView);
  264. }
  265. }
  266. if (e != null && e.CommandType == CommandType.Copy)
  267. {
  268. e.DoCommand();
  269. }
  270. }
  271. private void PasswordUI_Confirmed(object sender, string e)
  272. {
  273. if (passwordViewer != null && passwordViewer.PDFView != null && passwordViewer.PDFView.Document != null)
  274. {
  275. passwordViewer.PDFView.Document.UnlockWithPassword(e);
  276. if (passwordViewer.PDFView.Document.IsLocked == false)
  277. {
  278. PasswordUI.SetShowError("", Visibility.Collapsed);
  279. PasswordUI.ClearPassword();
  280. PasswordUI.Visibility = Visibility.Collapsed;
  281. PopupBorder.Visibility = Visibility.Collapsed;
  282. pdfViewControl = passwordViewer;
  283. LoadDocument();
  284. }
  285. else
  286. {
  287. PasswordUI.SetShowError("Wrong Password", Visibility.Visible);
  288. }
  289. }
  290. }
  291. private void PasswordUI_Canceled(object sender, EventArgs e)
  292. {
  293. PopupBorder.Visibility = Visibility.Collapsed;
  294. PasswordUI.Visibility = Visibility.Collapsed;
  295. }
  296. private void PasswordUI_Closed(object sender, EventArgs e)
  297. {
  298. PopupBorder.Visibility = Visibility.Collapsed;
  299. PasswordUI.Visibility = Visibility.Collapsed;
  300. }
  301. private void PdfViewer_InfoChanged(object sender, KeyValuePair<string, object> e)
  302. {
  303. if (e.Key == "Zoom")
  304. {
  305. CPDFSaclingControl.SetZoomTextBoxText(string.Format("{0}", (int)((double)e.Value * 100)));
  306. }
  307. }
  308. /// <summary>
  309. /// 检查缩放比例
  310. /// </summary>
  311. private double CheckZoomLevel(double zoom, bool IsGrowth)
  312. {
  313. double standardZoom = 100;
  314. if (zoom <= 0.01)
  315. {
  316. return 0.01;
  317. }
  318. if (zoom >= 10)
  319. {
  320. return 10;
  321. }
  322. zoom *= 100;
  323. for (int i = 0; i < zoomLevelList.Length - 1; i++)
  324. {
  325. if (zoom > zoomLevelList[i] && zoom <= zoomLevelList[i + 1] && IsGrowth)
  326. {
  327. standardZoom = zoomLevelList[i + 1];
  328. break;
  329. }
  330. if (zoom >= zoomLevelList[i] && zoom < zoomLevelList[i + 1] && !IsGrowth)
  331. {
  332. standardZoom = zoomLevelList[i];
  333. break;
  334. }
  335. }
  336. return standardZoom / 100;
  337. }
  338. /// <summary>
  339. /// 文字编辑和图片编辑右键点击处理
  340. /// </summary>
  341. private void PDFView_PDFEditCommandHandler(object sender, PDFEditCommand e)
  342. {
  343. if (e == null)
  344. {
  345. return;
  346. }
  347. if (e.EditType == CPDFEditType.EditText)
  348. {
  349. e.Handle = true;
  350. PDFEditTextContextMenu(sender, e);
  351. }
  352. if (e.EditType == CPDFEditType.EditImage)
  353. {
  354. e.Handle = true;
  355. PDFEditImageContextMenu(sender, e);
  356. }
  357. }
  358. /// <summary>
  359. /// 撤销重做状态更新事件通知
  360. /// </summary>
  361. private void UndoManager_PropertyChanged(object sender, PropertyChangedEventArgs e)
  362. {
  363. OnPropertyChanged(e.PropertyName);
  364. }
  365. /// <summary>
  366. /// 文字或图片块选中事件
  367. /// </summary>
  368. private void PDFView_PDFEditActiveHandler(object sender, PDFEditEvent e)
  369. {
  370. PDFEditEvent tempEvent = lastPDFEditEvent;
  371. lastPDFEditEvent = e;
  372. ViewSettingBtn.IsChecked = false;
  373. if (e == null)
  374. {
  375. PropertyContainer.Child = null;
  376. PropertyContainer.Visibility = Visibility.Collapsed;
  377. return;
  378. }
  379. if (Mouse.RightButton == MouseButtonState.Pressed && PropertyContainer.Visibility!=Visibility.Visible)
  380. {
  381. return;
  382. }
  383. if (e.EditType == CPDFEditType.EditText)
  384. {
  385. if (textEditControl == null)
  386. {
  387. textEditControl = new PDFTextEditControl();
  388. }
  389. textEditControl.SetPDFTextEditData(e);
  390. PropertyContainer.Child = textEditControl;
  391. PropertyContainer.Visibility = Visibility.Visible;
  392. return;
  393. }
  394. if (e.EditType == CPDFEditType.EditImage && pdfViewControl != null)
  395. {
  396. UIElement pageView = sender as UIElement;
  397. if (pageView != null)
  398. {
  399. pageView.MouseLeftButtonUp -= PageView_MouseLeftButtonUp;
  400. pageView.MouseLeftButtonUp += PageView_MouseLeftButtonUp;
  401. }
  402. if(Mouse.RightButton == MouseButtonState.Pressed)
  403. {
  404. SetImageEditProperty();
  405. }
  406. return;
  407. }
  408. }
  409. private void PageView_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
  410. {
  411. UIElement pageView = sender as UIElement;
  412. if (pageView != null)
  413. {
  414. pageView.MouseLeftButtonUp -= PageView_MouseLeftButtonUp;
  415. }
  416. SetImageEditProperty();
  417. }
  418. private void SetImageEditProperty()
  419. {
  420. if (lastPDFEditEvent != null && lastPDFEditEvent.EditType == CPDFEditType.EditImage)
  421. {
  422. if (imageEditControl == null)
  423. {
  424. imageEditControl = new PDFImageEditControl();
  425. }
  426. imageEditControl.InitWithPDFViewer(pdfViewControl.PDFView);
  427. imageEditControl.SetPDFImageEditData(lastPDFEditEvent);
  428. PropertyContainer.Child = imageEditControl;
  429. PropertyContainer.Visibility = Visibility.Visible;
  430. }
  431. }
  432. /// <summary>
  433. /// 加载显示默认文档
  434. /// </summary>
  435. private void LoadDefaultDocument()
  436. {
  437. string defaultFilePath = "developer_guide_windows.pdf";
  438. pdfViewControl = new PDFViewControl();
  439. pdfViewControl.PDFView.InitDocument(defaultFilePath);
  440. LoadDocument();
  441. }
  442. /// <summary>
  443. /// 搜索工具点击处理
  444. /// </summary>
  445. private void SearchToolButton_Click(object sender, RoutedEventArgs e)
  446. {
  447. UIElement botaTool = GetBotaTool();
  448. if (botaTool == null || !(botaTool is CPDFSearchControl))
  449. {
  450. if (searchControl == null)
  451. {
  452. searchControl = new CPDFSearchControl();
  453. if (pdfViewControl != null && pdfViewControl.PDFView != null && pdfViewControl.PDFView.Document != null)
  454. {
  455. searchControl.InitWithPDFViewer(pdfViewControl.PDFView);
  456. }
  457. }
  458. SetBotaTool(searchControl);
  459. }
  460. ExpandBotaTool(SearchToolButton.IsChecked == true);
  461. ClearToolState(SearchToolButton);
  462. }
  463. /// <summary>
  464. /// 缩略图列表点击处理
  465. /// </summary>
  466. private void ThumbToolButton_Click(object sender, RoutedEventArgs e)
  467. {
  468. UIElement botaTool = GetBotaTool();
  469. if (botaTool == null || !(botaTool is CPDFThumbnailControl))
  470. {
  471. CPDFThumbnailControl thumbControl = new CPDFThumbnailControl();
  472. if (pdfViewControl != null && pdfViewControl.PDFView != null && pdfViewControl.PDFView.Document != null)
  473. {
  474. thumbControl.InitWithPDFViewer(pdfViewControl.PDFView);
  475. thumbControl.LoadThumb();
  476. }
  477. SetBotaTool(thumbControl);
  478. }
  479. ExpandBotaTool(ThumbToolButton.IsChecked == true);
  480. ClearToolState(ThumbToolButton);
  481. }
  482. /// <summary>
  483. /// 书签列表点击处理
  484. /// </summary>
  485. private void BookmarkToolButtonn_Click(object sender, RoutedEventArgs e)
  486. {
  487. UIElement botaTool = GetBotaTool();
  488. if (botaTool == null || !(botaTool is CPDFBookmarkControl))
  489. {
  490. CPDFBookmarkControl bookmarkControl = new CPDFBookmarkControl();
  491. if (pdfViewControl != null && pdfViewControl.PDFView != null && pdfViewControl.PDFView.Document != null)
  492. {
  493. bookmarkControl.InitWithPDFViewer(pdfViewControl.PDFView);
  494. bookmarkControl.LoadBookmark();
  495. }
  496. SetBotaTool(bookmarkControl);
  497. }
  498. ExpandBotaTool(BookmarkToolButton.IsChecked == true);
  499. ClearToolState(BookmarkToolButton);
  500. }
  501. /// <summary>
  502. /// 大纲列表处理
  503. /// </summary>
  504. private void OutlineToolButton_Click(object sender, RoutedEventArgs e)
  505. {
  506. UIElement botaTool = GetBotaTool();
  507. if (botaTool == null || !(botaTool is CPDFOutlineControl))
  508. {
  509. CPDFOutlineControl outlineControl = new CPDFOutlineControl();
  510. if (pdfViewControl != null && pdfViewControl.PDFView != null && pdfViewControl.PDFView.Document != null)
  511. {
  512. outlineControl.InitWithPDFViewer(pdfViewControl.PDFView);
  513. }
  514. SetBotaTool(outlineControl);
  515. }
  516. ExpandBotaTool(OutlineToolButton.IsChecked == true);
  517. ClearToolState(OutlineToolButton);
  518. }
  519. /// <summary>
  520. /// 设置Bota工具内容
  521. /// </summary>
  522. /// <param name="newChild"></param>
  523. private void SetBotaTool(UIElement newChild)
  524. {
  525. BotaToolContainer.Child = newChild;
  526. }
  527. /// <summary>
  528. /// 获取Bota工具
  529. /// </summary>
  530. /// <returns></returns>
  531. private UIElement GetBotaTool()
  532. {
  533. return BotaToolContainer.Child;
  534. }
  535. /// <summary>
  536. /// 展开Bota工具
  537. /// </summary>
  538. /// <param name="isExpand"></param>
  539. private void ExpandBotaTool(bool isExpand)
  540. {
  541. BotaToolContainer.Visibility = isExpand ? Visibility.Visible : Visibility.Collapsed;
  542. Splitter.Visibility = isExpand ? Visibility.Visible : Visibility.Collapsed;
  543. }
  544. /// <summary>
  545. /// 清除左边工具栏状态
  546. /// </summary>
  547. private void ClearToolState(UIElement ignoreTool)
  548. {
  549. foreach (UIElement child in BotaSideTool.Children)
  550. {
  551. if (child != ignoreTool && child is ToggleButton buttonTool)
  552. {
  553. buttonTool.IsChecked = false;
  554. }
  555. }
  556. }
  557. private void ToolExpand_Click(object sender, RoutedEventArgs e)
  558. {
  559. ToggleButton expandBtn = sender as ToggleButton;
  560. if (expandBtn != null)
  561. {
  562. bool isExpand = expandBtn.IsChecked == true;
  563. ExpandLeftPanel(isExpand);
  564. if (isExpand)
  565. {
  566. ThumbToolButton.IsChecked = isExpand;
  567. ThumbToolButton_Click(ThumbToolButton, new RoutedEventArgs());
  568. }
  569. }
  570. }
  571. private void ExpandSearchBtn_Click(object sender, RoutedEventArgs e)
  572. {
  573. ExpandLeftPanel(true);
  574. SearchToolButton.IsChecked = true;
  575. ToolExpandBtn.IsChecked = true;
  576. SearchToolButton_Click(SearchToolButton, new RoutedEventArgs());
  577. }
  578. private void ExpandLeftPanel(bool isExpand)
  579. {
  580. ExpandToolContainer.Visibility = isExpand ? Visibility.Visible : Visibility.Collapsed;
  581. Splitter.Visibility = isExpand ? Visibility.Visible : Visibility.Collapsed;
  582. if (isExpand)
  583. {
  584. BodyGrid.ColumnDefinitions[0].Width = new GridLength(260);
  585. BodyGrid.ColumnDefinitions[1].Width = new GridLength(15);
  586. }
  587. else
  588. {
  589. BodyGrid.ColumnDefinitions[0].Width = new GridLength(0);
  590. BodyGrid.ColumnDefinitions[1].Width = new GridLength(0);
  591. }
  592. }
  593. private void ViewSettingBtn_Click(object sender, RoutedEventArgs e)
  594. {
  595. ToggleButton toggleButton = sender as ToggleButton;
  596. if (toggleButton != null)
  597. {
  598. if (toggleButton.IsChecked == true)
  599. {
  600. CPDFDisplaySettingsControl displayPanel = new CPDFDisplaySettingsControl();
  601. displayPanel.SetSplitContainerVisibility(Visibility.Collapsed);
  602. displayPanel.InitWithPDFViewer(pdfViewControl.PDFView);
  603. PropertyContainer.Child = displayPanel;
  604. PropertyContainer.Visibility = Visibility.Visible;
  605. }
  606. else
  607. {
  608. PropertyContainer.Child = null;
  609. PropertyContainer.Visibility = Visibility.Collapsed;
  610. }
  611. }
  612. }
  613. private void NextPageBorder_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
  614. {
  615. pdfViewControl.PDFView?.GoToPage(pdfViewControl.PDFView.CurrentIndex + 1);
  616. }
  617. private void PrevPageBorder_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
  618. {
  619. pdfViewControl.PDFView?.GoToPage(pdfViewControl.PDFView.CurrentIndex - 1);
  620. }
  621. private void PageInfoBtn_Click(object sender, RoutedEventArgs e)
  622. {
  623. PasswordUI.Visibility = Visibility.Collapsed;
  624. FileInfoUI.Visibility = Visibility.Visible;
  625. FileInfoControl.InitWithPDFViewer(pdfViewControl.PDFView);
  626. PopupBorder.Visibility = Visibility.Visible;
  627. }
  628. private void FileInfoCloseBtn_Click(object sender, RoutedEventArgs e)
  629. {
  630. PopupBorder.Visibility = Visibility.Collapsed;
  631. }
  632. private void OpenFile_Click(object sender, RoutedEventArgs e)
  633. {
  634. try
  635. {
  636. string filePath = CommonHelper.GetFilePathOrEmpty();
  637. if (!string.IsNullOrEmpty(filePath) && pdfViewControl != null)
  638. {
  639. if (pdfViewControl.PDFView != null && pdfViewControl.PDFView.Document != null)
  640. {
  641. string oldFilePath = pdfViewControl.PDFView.Document.FilePath;
  642. if (oldFilePath.ToLower() == filePath.ToLower())
  643. {
  644. return;
  645. }
  646. }
  647. passwordViewer = new PDFViewControl();
  648. passwordViewer.PDFView.InitDocument(filePath);
  649. if (passwordViewer.PDFView.Document == null)
  650. {
  651. MessageBox.Show("Open File Failed");
  652. return;
  653. }
  654. if (passwordViewer.PDFView.Document.IsLocked)
  655. {
  656. PasswordUI.SetShowText(System.IO.Path.GetFileName(filePath) + " password encrypted.");
  657. PasswordUI.ClearPassword();
  658. PopupBorder.Visibility = Visibility.Visible;
  659. PasswordUI.Visibility = Visibility.Visible;
  660. }
  661. else
  662. {
  663. pdfViewControl = passwordViewer;
  664. LoadDocument();
  665. }
  666. }
  667. }
  668. catch (Exception ex)
  669. {
  670. }
  671. }
  672. private void SaveFileBtn_Click(object sender, RoutedEventArgs e)
  673. {
  674. SaveFile();
  675. }
  676. /// <summary>
  677. /// 文字编辑模式
  678. /// </summary>
  679. private void PDFTextEditButton_Click(object sender, RoutedEventArgs e)
  680. {
  681. ToggleButton senderBtn = sender as ToggleButton;
  682. if (senderBtn != null && pdfViewControl != null)
  683. {
  684. ClearPDFEditState(senderBtn);
  685. if (senderBtn.IsChecked == true)
  686. {
  687. pdfViewControl.PDFView?.SetMouseMode(MouseModes.PanTool);
  688. pdfViewControl.PDFView?.SetPDFEditType(CPDFEditType.EditText);
  689. pdfViewControl.PDFView?.SetPDFEditCreateType(CPDFEditType.EditText);
  690. pdfViewControl.PDFView?.SetMouseMode(MouseModes.PDFEdit);
  691. pdfViewControl.PDFView?.ReloadDocument();
  692. }
  693. else
  694. {
  695. pdfViewControl.PDFView?.SetPDFEditCreateType(CPDFEditType.None);
  696. pdfViewControl.PDFView?.SetPDFEditType(CPDFEditType.EditImage | CPDFEditType.EditText);
  697. pdfViewControl.PDFView?.SetMouseMode(MouseModes.PDFEdit);
  698. pdfViewControl.PDFView?.ReloadDocument();
  699. }
  700. }
  701. }
  702. /// <summary>
  703. /// 图片编辑模式
  704. /// </summary>
  705. private void PDFImageEditButton_Click(object sender, RoutedEventArgs e)
  706. {
  707. ToggleButton senderBtn = sender as ToggleButton;
  708. if (senderBtn != null && pdfViewControl != null)
  709. {
  710. ClearPDFEditState(senderBtn);
  711. senderBtn.IsChecked = false;
  712. OpenFileDialog openFileDialog = new OpenFileDialog();
  713. openFileDialog.Filter = "Image Files(*.jpg;*.jpeg;*.png;*.bmp)|*.jpg;*.jpeg;*.png;*.bmp;";
  714. if (openFileDialog.ShowDialog() == true)
  715. {
  716. pdfViewControl.PDFView?.ClearSelectPDFEdit();
  717. pdfViewControl.PDFView?.SetPDFEditType(CPDFEditType.EditImage | CPDFEditType.EditText);
  718. pdfViewControl.PDFView?.SetMouseMode(MouseModes.PDFEdit);
  719. pdfViewControl.PDFView?.ReloadDocument();
  720. PropertyContainer.Child = null;
  721. PropertyContainer.Visibility = Visibility.Collapsed;
  722. pdfViewControl.PDFView?.SetPDFEditCreateType(CPDFEditType.EditImage);
  723. pdfViewControl.PDFView?.AddPDFEditImage(openFileDialog.FileName);
  724. }
  725. }
  726. }
  727. /// <summary>
  728. /// 清除编辑相关按钮选中状态
  729. /// </summary>
  730. private void ClearPDFEditState(ToggleButton ignoreBtn = null)
  731. {
  732. List<ToggleButton> clearBtnList = new List<ToggleButton>()
  733. {
  734. PDFTextEditButton,
  735. PDFImageEditButton
  736. };
  737. foreach (ToggleButton item in clearBtnList)
  738. {
  739. if (ignoreBtn == item)
  740. {
  741. continue;
  742. }
  743. item.IsChecked = false;
  744. }
  745. }
  746. /// <summary>
  747. /// 撤销操作
  748. /// </summary>
  749. private void UndoBtn_Click(object sender, RoutedEventArgs e)
  750. {
  751. if (pdfViewControl != null && pdfViewControl.PDFView != null)
  752. {
  753. pdfViewControl.PDFView.UndoManager?.Undo();
  754. }
  755. }
  756. /// <summary>
  757. /// 重做操作
  758. /// </summary>
  759. private void RedoBtn_Click(object sender, RoutedEventArgs e)
  760. {
  761. if (pdfViewControl != null && pdfViewControl.PDFView != null)
  762. {
  763. pdfViewControl.PDFView.UndoManager?.Redo();
  764. }
  765. }
  766. /// <summary>
  767. /// 文字编辑右键菜单
  768. /// </summary>
  769. private void PDFEditTextContextMenu(object sender, PDFEditCommand editCommand)
  770. {
  771. editCommand.PopupMenu = new ContextMenu();
  772. if (lastPDFEditEvent != null)
  773. {
  774. editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "Copy", Command = ApplicationCommands.Copy, CommandTarget = (UIElement)sender });
  775. editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "Cut", Command = ApplicationCommands.Cut, CommandTarget = (UIElement)sender });
  776. editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "Delete", Command = ApplicationCommands.Delete, CommandTarget = (UIElement)sender });
  777. editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "Paste", Command = ApplicationCommands.Paste, CommandTarget = (UIElement)sender });
  778. MenuItem propertyMenu = new MenuItem();
  779. propertyMenu.Header = "Property";
  780. propertyMenu.Click += (o, p) =>
  781. {
  782. if (lastPDFEditEvent != null && lastPDFEditEvent.EditType == CPDFEditType.EditText)
  783. {
  784. PDFTextEditControl textEditControl = new PDFTextEditControl();
  785. textEditControl.SetPDFTextEditData(lastPDFEditEvent);
  786. PropertyContainer.Child = textEditControl;
  787. PropertyContainer.Visibility = Visibility.Visible;
  788. }
  789. };
  790. editCommand.PopupMenu.Items.Add(propertyMenu);
  791. }
  792. else
  793. {
  794. editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "Paste", Command = ApplicationCommands.Paste, CommandTarget = (UIElement)sender });
  795. if (editCommand.TextAreaCopied)
  796. {
  797. editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "Paste And Match Style", Command = CustomCommands.PasteMatchStyle, CommandTarget = (UIElement)sender });
  798. }
  799. }
  800. }
  801. /// <summary>
  802. /// 图片编辑右键菜单
  803. /// </summary>
  804. private void PDFEditImageContextMenu(object sender, PDFEditCommand editCommand)
  805. {
  806. editCommand.PopupMenu = new ContextMenu();
  807. if(ApplicationCommands.Copy.CanExecute(null,(UIElement)sender) && lastPDFEditEvent!=null )
  808. {
  809. MenuItem rotateLeftMenu = new MenuItem();
  810. rotateLeftMenu.Header = "Rotate Left";
  811. rotateLeftMenu.Click += (o, p) =>
  812. {
  813. if (lastPDFEditEvent != null && lastPDFEditEvent.EditType == CPDFEditType.EditImage)
  814. {
  815. lastPDFEditEvent.Rotate = -90;
  816. lastPDFEditEvent.UpdatePDFEditByEventArgs();
  817. imageEditControl?.SetImageThumb();
  818. }
  819. };
  820. editCommand.PopupMenu.Items.Add(rotateLeftMenu);
  821. MenuItem rotateRightMenu = new MenuItem();
  822. rotateRightMenu.Header = "Rotate Right";
  823. rotateRightMenu.Click += (o, p) =>
  824. {
  825. if (lastPDFEditEvent != null && lastPDFEditEvent.EditType == CPDFEditType.EditImage)
  826. {
  827. lastPDFEditEvent.Rotate = 90;
  828. lastPDFEditEvent.UpdatePDFEditByEventArgs();
  829. imageEditControl?.SetImageThumb();
  830. }
  831. };
  832. editCommand.PopupMenu.Items.Add(rotateRightMenu);
  833. MenuItem replaceMenu = new MenuItem();
  834. replaceMenu.Header = "Replace";
  835. replaceMenu.Click += (o, p) =>
  836. {
  837. if (lastPDFEditEvent != null && lastPDFEditEvent.EditType == CPDFEditType.EditImage)
  838. {
  839. OpenFileDialog openFileDialog = new OpenFileDialog();
  840. openFileDialog.Filter = "Image Files(*.jpg;*.jpeg;*.png;*.bmp)|*.jpg;*.jpeg;*.png;*.bmp;";
  841. if (openFileDialog.ShowDialog() == true)
  842. {
  843. lastPDFEditEvent.ReplaceImagePath = openFileDialog.FileName;
  844. lastPDFEditEvent.UpdatePDFEditByEventArgs();
  845. pdfViewControl.PDFView?.ClearSelectPDFEdit();
  846. }
  847. }
  848. };
  849. editCommand.PopupMenu.Items.Add(replaceMenu);
  850. MenuItem exportMenu = new MenuItem();
  851. exportMenu.Header = "Export";
  852. exportMenu.Click += (o, p) =>
  853. {
  854. if (pdfViewControl != null && pdfViewControl.PDFView != null)
  855. {
  856. Dictionary<int, List<Bitmap>> imageDict = pdfViewControl.PDFView.GetSelectedImages();
  857. if (imageDict != null && imageDict.Count > 0)
  858. {
  859. System.Windows.Forms.FolderBrowserDialog folderBrowser = new System.Windows.Forms.FolderBrowserDialog();
  860. if (folderBrowser.ShowDialog() == System.Windows.Forms.DialogResult.OK)
  861. {
  862. string choosePath = folderBrowser.SelectedPath;
  863. string openPath = choosePath;
  864. try
  865. {
  866. foreach (int pageIndex in imageDict.Keys)
  867. {
  868. List<Bitmap> imageList = imageDict[pageIndex];
  869. foreach (Bitmap image in imageList)
  870. {
  871. string savePath = System.IO.Path.Combine(choosePath, Guid.NewGuid() + ".jpg");
  872. image.Save(savePath, System.Drawing.Imaging.ImageFormat.Jpeg);
  873. openPath = savePath;
  874. }
  875. }
  876. Process.Start("explorer", "/select,\"" + openPath + "\"");
  877. }
  878. catch (Exception ex)
  879. {
  880. }
  881. }
  882. }
  883. }
  884. };
  885. editCommand.PopupMenu.Items.Add(exportMenu);
  886. MenuItem opacityMenu = new MenuItem();
  887. opacityMenu.Header = "Opacity";
  888. editCommand.PopupMenu.Items.Add(opacityMenu);
  889. AppendOpacityMenu(opacityMenu);
  890. MenuItem horizonMirror = new MenuItem();
  891. horizonMirror.Header = "Flip horizontal";
  892. horizonMirror.Click += (o, p) =>
  893. {
  894. if (lastPDFEditEvent != null && lastPDFEditEvent.EditType == CPDFEditType.EditImage)
  895. {
  896. lastPDFEditEvent.HorizontalMirror = true;
  897. lastPDFEditEvent.UpdatePDFEditByEventArgs();
  898. imageEditControl?.SetImageThumb();
  899. }
  900. };
  901. editCommand.PopupMenu.Items.Add(horizonMirror);
  902. MenuItem verticalMirror = new MenuItem();
  903. verticalMirror.Header = "Flip vertical";
  904. verticalMirror.Click += (o, p) =>
  905. {
  906. if (lastPDFEditEvent != null && lastPDFEditEvent.EditType == CPDFEditType.EditImage)
  907. {
  908. lastPDFEditEvent.VerticalMirror = true;
  909. lastPDFEditEvent.UpdatePDFEditByEventArgs();
  910. imageEditControl?.SetImageThumb();
  911. }
  912. };
  913. editCommand.PopupMenu.Items.Add(verticalMirror);
  914. MenuItem cropMenu = new MenuItem();
  915. cropMenu.Header = "Crop";
  916. cropMenu.Click += (o, p) =>
  917. {
  918. if (lastPDFEditEvent != null && lastPDFEditEvent.EditType == CPDFEditType.EditImage)
  919. {
  920. lastPDFEditEvent.ClipImage = true;
  921. lastPDFEditEvent.UpdatePDFEditByEventArgs();
  922. }
  923. };
  924. editCommand.PopupMenu.Items.Add(cropMenu);
  925. editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "Copy", Command = ApplicationCommands.Copy, CommandTarget = (UIElement)sender });
  926. editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "Cut", Command = ApplicationCommands.Cut, CommandTarget = (UIElement)sender });
  927. editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "Delete", Command = ApplicationCommands.Delete, CommandTarget = (UIElement)sender });
  928. }
  929. else
  930. {
  931. editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "Paste", Command = ApplicationCommands.Paste, CommandTarget = (UIElement)sender });
  932. }
  933. }
  934. /// <summary>
  935. /// 图片编辑透明度二级菜单
  936. /// </summary>
  937. private void AppendOpacityMenu(MenuItem parentMenu)
  938. {
  939. List<int> opacityList = new List<int>()
  940. {
  941. 25,50,75,100
  942. };
  943. foreach (int opacity in opacityList)
  944. {
  945. MenuItem opacityMenu = new MenuItem();
  946. opacityMenu.Header = string.Format("{0}%", opacity);
  947. opacityMenu.Click += (o, p) =>
  948. {
  949. if (lastPDFEditEvent != null && lastPDFEditEvent.EditType == CPDFEditType.EditImage)
  950. {
  951. lastPDFEditEvent.Transparency = (int)(opacity * 255 / 100D);
  952. lastPDFEditEvent.UpdatePDFEditByEventArgs();
  953. imageEditControl?.SetImageTransparency(lastPDFEditEvent.Transparency);
  954. }
  955. };
  956. parentMenu.Items.Add(opacityMenu);
  957. }
  958. }
  959. /// <summary>
  960. /// 进入文字和图片编辑
  961. /// </summary>
  962. private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
  963. {
  964. SetEditMode();
  965. }
  966. private void SetEditMode()
  967. {
  968. ClearPDFEditState(null);
  969. if (pdfViewControl != null && ViewComboBox != null)
  970. {
  971. if (ViewComboBox.SelectedIndex == 0)
  972. {
  973. PDFEditTool.Visibility = Visibility.Collapsed;
  974. pdfViewControl.PDFView?.SetShowLink(true);
  975. pdfViewControl.PDFView?.SetPDFEditType(CPDFEditType.None);
  976. pdfViewControl.PDFView?.SetMouseMode(MouseModes.PanTool);
  977. pdfViewControl.PDFView?.ReloadDocument();
  978. if (PropertyContainer != null)
  979. {
  980. PropertyContainer.Child = null;
  981. }
  982. return;
  983. }
  984. if (ViewComboBox.SelectedIndex == 1)
  985. {
  986. PDFEditTool.Visibility = Visibility.Visible;
  987. pdfViewControl.PDFView?.SetShowLink(false);
  988. pdfViewControl.PDFView?.SetPDFEditType(CPDFEditType.EditText | CPDFEditType.EditImage);
  989. pdfViewControl.PDFView?.SetPDFEditCreateType(CPDFEditType.None);
  990. pdfViewControl.PDFView?.SetMouseMode(MouseModes.PDFEdit);
  991. pdfViewControl.PDFView?.ReloadDocument();
  992. }
  993. }
  994. }
  995. private void CopyImage_Click(object sender, RoutedEventArgs e)
  996. {
  997. try
  998. {
  999. Dictionary<int, List<Bitmap>> imageDict = pdfViewControl.PDFView?.GetSelectedImages();
  1000. if (imageDict != null && imageDict.Count > 0)
  1001. {
  1002. foreach (int pageIndex in imageDict.Keys)
  1003. {
  1004. List<Bitmap> imageList = imageDict[pageIndex];
  1005. foreach (Bitmap image in imageList)
  1006. {
  1007. MemoryStream ms = new MemoryStream();
  1008. image.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
  1009. BitmapImage imageData = new BitmapImage();
  1010. imageData.BeginInit();
  1011. imageData.StreamSource = ms;
  1012. imageData.CacheOption = BitmapCacheOption.OnLoad;
  1013. imageData.EndInit();
  1014. imageData.Freeze();
  1015. Clipboard.SetImage(imageData);
  1016. break;
  1017. }
  1018. }
  1019. }
  1020. }
  1021. catch (Exception ex)
  1022. {
  1023. }
  1024. }
  1025. private void ExtraImage_Click(object sender, RoutedEventArgs e)
  1026. {
  1027. System.Windows.Forms.FolderBrowserDialog folderDialog = new System.Windows.Forms.FolderBrowserDialog();
  1028. if (folderDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
  1029. {
  1030. string choosePath = folderDialog.SelectedPath;
  1031. string openPath = choosePath;
  1032. try
  1033. {
  1034. Dictionary<int, List<Bitmap>> imageDict = pdfViewControl.PDFView?.GetSelectedImages();
  1035. if (imageDict != null && imageDict.Count > 0)
  1036. {
  1037. foreach (int pageIndex in imageDict.Keys)
  1038. {
  1039. List<Bitmap> imageList = imageDict[pageIndex];
  1040. foreach (Bitmap image in imageList)
  1041. {
  1042. string savePath = Path.Combine(choosePath, Guid.NewGuid() + ".jpg");
  1043. image.Save(savePath, System.Drawing.Imaging.ImageFormat.Jpeg);
  1044. openPath = savePath;
  1045. }
  1046. }
  1047. }
  1048. Process.Start("explorer", "/select,\"" + openPath + "\"");
  1049. }
  1050. catch (Exception ex)
  1051. {
  1052. }
  1053. }
  1054. }
  1055. private void SaveFile()
  1056. {
  1057. if (pdfViewControl != null && pdfViewControl.PDFView != null && pdfViewControl.PDFView.Document != null)
  1058. {
  1059. try
  1060. {
  1061. CPDFDocument pdfDoc = pdfViewControl.PDFView.Document;
  1062. if (pdfDoc.WriteToLoadedPath())
  1063. {
  1064. return;
  1065. }
  1066. SaveFileDialog saveDialog = new SaveFileDialog();
  1067. saveDialog.Filter = "(*.pdf)|*.pdf";
  1068. saveDialog.DefaultExt = ".pdf";
  1069. saveDialog.OverwritePrompt = true;
  1070. if (saveDialog.ShowDialog() == true)
  1071. {
  1072. pdfDoc.WriteToFilePath(saveDialog.FileName);
  1073. }
  1074. }
  1075. catch (Exception ex)
  1076. {
  1077. }
  1078. }
  1079. }
  1080. protected override void OnClosing(CancelEventArgs e)
  1081. {
  1082. if (pdfViewControl.PDFView.UndoManager.CanSave)
  1083. {
  1084. MessageBoxResult result = MessageBox.Show("Do you want to save your changes before closing the application?", "Message", MessageBoxButton.YesNoCancel);
  1085. if (result == MessageBoxResult.Yes)
  1086. {
  1087. SaveFile();
  1088. }
  1089. else if (result == MessageBoxResult.No)
  1090. {
  1091. }
  1092. else
  1093. {
  1094. e.Cancel = true;
  1095. }
  1096. }
  1097. }
  1098. }
  1099. }