MainWindow.xaml.cs 55 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449
  1. using ComPDFKit.PDFDocument;
  2. using ComPDFKit.PDFPage;
  3. using ComPDFKit.PDFPage.Edit;
  4. using Compdfkit_Tools.Edit;
  5. using Compdfkit_Tools.Helper;
  6. using Compdfkit_Tools.PDFControl;
  7. using ComPDFKitViewer;
  8. using ComPDFKitViewer.AnnotEvent;
  9. using ComPDFKitViewer.PdfViewer;
  10. using Microsoft.Win32;
  11. using System;
  12. using System.Collections.Generic;
  13. using System.ComponentModel;
  14. using System.Diagnostics;
  15. using System.Drawing;
  16. using System.IO;
  17. using System.Runtime.CompilerServices;
  18. using System.Windows;
  19. using System.Windows.Controls;
  20. using System.Windows.Controls.Primitives;
  21. using System.Windows.Input;
  22. using System.Windows.Media;
  23. using System.Windows.Media.Imaging;
  24. using Point = System.Windows.Point;
  25. namespace ContentEditor
  26. {
  27. public partial class MainWindow : Window, INotifyPropertyChanged
  28. {
  29. #region Property
  30. public bool CanUndo
  31. {
  32. get
  33. {
  34. if (pdfViewControl != null && pdfViewControl.PDFView != null)
  35. {
  36. return pdfViewControl.PDFView.UndoManager.CanUndo;
  37. }
  38. return false;
  39. }
  40. }
  41. public bool CanRedo
  42. {
  43. get
  44. {
  45. if (pdfViewControl != null && pdfViewControl.PDFView != null)
  46. {
  47. return pdfViewControl.PDFView.UndoManager.CanRedo;
  48. }
  49. return false;
  50. }
  51. }
  52. public bool CanSave
  53. {
  54. get
  55. {
  56. if (pdfViewControl != null && pdfViewControl.PDFView != null)
  57. {
  58. return pdfViewControl.PDFView.UndoManager.CanSave;
  59. }
  60. return false;
  61. }
  62. }
  63. /// <summary>
  64. /// The last PDF edit object
  65. /// </summary>
  66. private PDFEditEvent lastPDFEditEvent = null;
  67. private PDFViewControl passwordViewer;
  68. private PDFViewControl pdfViewControl;
  69. private PDFImageEditControl imageEditControl = new PDFImageEditControl();
  70. private PDFTextEditControl textEditControl = new PDFTextEditControl();
  71. private Border empytPanel = new Border();
  72. private UIElement prevPanel = null;
  73. private double[] zoomLevelList = { 1f, 8f, 12f, 25, 33f, 50, 66f, 75, 100, 125, 150, 200, 300, 400, 600, 800, 1000 };
  74. public event PropertyChangedEventHandler PropertyChanged;
  75. private PDFEditEvent pdfTextCreateParam;
  76. private KeyEventHandler KeyDownHandler;
  77. #endregion
  78. public MainWindow()
  79. {
  80. InitializeComponent();
  81. Loaded += MainWindow_Loaded;
  82. DataContext = this;
  83. }
  84. private void MainWindow_Loaded(object sender, RoutedEventArgs e)
  85. {
  86. TextBlock emptyBlock = new TextBlock();
  87. emptyBlock.HorizontalAlignment = HorizontalAlignment.Center;
  88. emptyBlock.VerticalAlignment = VerticalAlignment.Center;
  89. empytPanel.Child = emptyBlock;
  90. empytPanel.Width = 260;
  91. BotaSideTool.AddBOTAContent(BOTATools.Thumbnail | BOTATools.Outline | BOTATools.Bookmark | BOTATools.Search);
  92. LoadDefaultDocument();
  93. }
  94. #region Load document
  95. private void LoadDocument()
  96. {
  97. pdfViewControl.PDFView?.Load();
  98. PDFGrid.Child = pdfViewControl;
  99. pdfViewControl.PDFView.InfoChanged -= PdfViewer_InfoChanged;
  100. pdfViewControl.PDFView.InfoChanged += PdfViewer_InfoChanged;
  101. PasswordUI.Closed -= PasswordUI_Closed;
  102. PasswordUI.Canceled -= PasswordUI_Canceled;
  103. PasswordUI.Confirmed -= PasswordUI_Confirmed;
  104. PasswordUI.Closed += PasswordUI_Closed;
  105. PasswordUI.Canceled += PasswordUI_Canceled;
  106. PasswordUI.Confirmed += PasswordUI_Confirmed;
  107. pdfViewControl.PDFView.PDFEditActiveHandler -= PDFView_PDFEditActiveHandler;
  108. pdfViewControl.PDFView.PDFEditActiveHandler += PDFView_PDFEditActiveHandler;
  109. pdfViewControl.PDFView.UndoManager.PropertyChanged -= UndoManager_PropertyChanged;
  110. pdfViewControl.PDFView.UndoManager.PropertyChanged += UndoManager_PropertyChanged;
  111. pdfViewControl.PDFView.PDFEditCommandHandler -= PDFView_PDFEditCommandHandler;
  112. pdfViewControl.PDFView.PDFEditCommandHandler += PDFView_PDFEditCommandHandler;
  113. pdfViewControl.PDFView.AnnotCommandHandler -= PDFView_AnnotCommandHandler;
  114. pdfViewControl.PDFView.AnnotCommandHandler += PDFView_AnnotCommandHandler;
  115. pdfViewControl.PDFView.SetFormFieldHighlight(true);
  116. pdfViewControl.PDFView.ChangeFitMode(FitMode.FitWidth);
  117. CPDFSaclingControl.InitWithPDFViewer(pdfViewControl.PDFView);
  118. CPDFSaclingControl.SetZoomTextBoxText(string.Format("{0}", (int)(pdfViewControl.PDFView.ZoomFactor * 100)));
  119. FloatPageTool.InitWithPDFViewer(pdfViewControl.PDFView);
  120. BotaSideTool.InitWithPDFViewer(pdfViewControl.PDFView);
  121. BotaSideTool.SelectBotaTool(BOTATools.Thumbnail);
  122. ViewSettingBtn.IsChecked = false;
  123. PropertyContainer.Child = null;
  124. PropertyContainer.Visibility = Visibility.Collapsed;
  125. SetEditMode();
  126. if (KeyDownHandler != null)
  127. {
  128. pdfViewControl.PDFView.RemoveHandler(KeyDownEvent, KeyDownHandler);
  129. }
  130. KeyDownHandler = new KeyEventHandler(PDFView_KeyDown);
  131. pdfViewControl.PDFView.AddHandler(KeyDownEvent, KeyDownHandler, false, true);
  132. }
  133. private void LoadDefaultDocument()
  134. {
  135. string defaultFilePath = "PDF32000_2008.pdf";
  136. pdfViewControl = new PDFViewControl();
  137. pdfViewControl.PDFView.InitDocument(defaultFilePath);
  138. LoadDocument();
  139. }
  140. #endregion
  141. #region Password
  142. private void PasswordUI_Confirmed(object sender, string e)
  143. {
  144. if (passwordViewer != null && passwordViewer.PDFView != null && passwordViewer.PDFView.Document != null)
  145. {
  146. passwordViewer.PDFView.Document.UnlockWithPassword(e);
  147. if (passwordViewer.PDFView.Document.IsLocked == false)
  148. {
  149. PasswordUI.SetShowError("", Visibility.Collapsed);
  150. PasswordUI.ClearPassword();
  151. PasswordUI.Visibility = Visibility.Collapsed;
  152. PopupBorder.Visibility = Visibility.Collapsed;
  153. pdfViewControl = passwordViewer;
  154. LoadDocument();
  155. }
  156. else
  157. {
  158. PasswordUI.SetShowError("Wrong Password", Visibility.Visible);
  159. }
  160. }
  161. }
  162. private void PasswordUI_Canceled(object sender, EventArgs e)
  163. {
  164. PopupBorder.Visibility = Visibility.Collapsed;
  165. PasswordUI.Visibility = Visibility.Collapsed;
  166. }
  167. private void PasswordUI_Closed(object sender, EventArgs e)
  168. {
  169. PopupBorder.Visibility = Visibility.Collapsed;
  170. PasswordUI.Visibility = Visibility.Collapsed;
  171. }
  172. #endregion
  173. #region Expand and collapse Panel
  174. private void ExpandLeftPanel(bool isExpand)
  175. {
  176. BotaSideTool.Visibility = isExpand ? Visibility.Visible : Visibility.Collapsed;
  177. Splitter.Visibility = isExpand ? Visibility.Visible : Visibility.Collapsed;
  178. if (isExpand)
  179. {
  180. BodyGrid.ColumnDefinitions[0].Width = new GridLength(260);
  181. BodyGrid.ColumnDefinitions[1].Width = new GridLength(15);
  182. }
  183. else
  184. {
  185. BodyGrid.ColumnDefinitions[0].Width = new GridLength(0);
  186. BodyGrid.ColumnDefinitions[1].Width = new GridLength(0);
  187. }
  188. }
  189. #endregion
  190. #region Context menu
  191. private void PDFView_AnnotCommandHandler(object sender, AnnotCommandArgs e)
  192. {
  193. if (e != null && e.CommandType == CommandType.Context)
  194. {
  195. if (e.PressOnSelectedText)
  196. {
  197. e.Handle = true;
  198. e.PopupMenu = new ContextMenu();
  199. e.PopupMenu.Items.Add(new MenuItem() { Header = "Copy", Command = ApplicationCommands.Copy, CommandTarget = (UIElement)sender });
  200. }
  201. else if (e.CommandTarget == TargetType.ImageSelection)
  202. {
  203. if (pdfViewControl != null && pdfViewControl.PDFView != null && pdfViewControl.PDFView.GetSelectImageCount() > 0)
  204. {
  205. e.Handle = true;
  206. e.PopupMenu = new ContextMenu();
  207. MenuItem imageCopyMenu = new MenuItem();
  208. imageCopyMenu = new MenuItem();
  209. imageCopyMenu.Header = "Copy Images";
  210. WeakEventManager<MenuItem, RoutedEventArgs>.AddHandler(imageCopyMenu, "Click", CopyImage_Click);
  211. imageCopyMenu.CommandParameter = e;
  212. e.PopupMenu.Items.Add(imageCopyMenu);
  213. MenuItem imageExtraMenu = new MenuItem();
  214. imageExtraMenu = new MenuItem();
  215. imageExtraMenu.Header = "Extract Images";
  216. WeakEventManager<MenuItem, RoutedEventArgs>.AddHandler(imageExtraMenu, "Click", ExtraImage_Click);
  217. imageExtraMenu.CommandParameter = e;
  218. e.PopupMenu.Items.Add(imageExtraMenu);
  219. }
  220. }
  221. else
  222. {
  223. e.Handle = true;
  224. e.PopupMenu = new ContextMenu();
  225. MenuItem fitWidthMenu = new MenuItem();
  226. fitWidthMenu.Header = "Automatically Resize";
  227. fitWidthMenu.Click += (o, p) =>
  228. {
  229. if (pdfViewControl != null)
  230. {
  231. pdfViewControl.PDFView?.ChangeFitMode(FitMode.FitWidth);
  232. }
  233. };
  234. e.PopupMenu.Items.Add(fitWidthMenu);
  235. MenuItem fitSizeMenu = new MenuItem();
  236. fitSizeMenu.Header = "Actual Size";
  237. fitSizeMenu.Click += (o, p) =>
  238. {
  239. if (pdfViewControl != null)
  240. {
  241. pdfViewControl.PDFView?.ChangeFitMode(FitMode.FitSize);
  242. }
  243. };
  244. e.PopupMenu.Items.Add(fitSizeMenu);
  245. MenuItem zoomInMenu = new MenuItem();
  246. zoomInMenu.Header = "Zoom In";
  247. zoomInMenu.Click += (o, p) =>
  248. {
  249. if (pdfViewControl != null)
  250. {
  251. double newZoom = CheckZoomLevel(pdfViewControl.PDFView.ZoomFactor + 0.01, true);
  252. pdfViewControl.PDFView?.Zoom(newZoom);
  253. }
  254. };
  255. e.PopupMenu.Items.Add(zoomInMenu);
  256. MenuItem zoomOutMenu = new MenuItem();
  257. zoomOutMenu.Header = "Zoom Out";
  258. zoomOutMenu.Click += (o, p) =>
  259. {
  260. if (pdfViewControl != null)
  261. {
  262. double newZoom = CheckZoomLevel(pdfViewControl.PDFView.ZoomFactor - 0.01, false);
  263. pdfViewControl.PDFView?.Zoom(newZoom);
  264. }
  265. };
  266. e.PopupMenu.Items.Add(zoomOutMenu);
  267. e.PopupMenu.Items.Add(new Separator());
  268. MenuItem singleView = new MenuItem();
  269. singleView.Header = "Single Page";
  270. singleView.Click += (o, p) =>
  271. {
  272. if (pdfViewControl != null)
  273. {
  274. pdfViewControl.PDFView?.ChangeViewMode(ViewMode.Single);
  275. }
  276. };
  277. e.PopupMenu.Items.Add(singleView);
  278. MenuItem singleContinuousView = new MenuItem();
  279. singleContinuousView.Header = "Single Page Continuous";
  280. singleContinuousView.Click += (o, p) =>
  281. {
  282. if (pdfViewControl != null)
  283. {
  284. pdfViewControl.PDFView?.ChangeViewMode(ViewMode.SingleContinuous);
  285. }
  286. };
  287. e.PopupMenu.Items.Add(singleContinuousView);
  288. MenuItem doubleView = new MenuItem();
  289. doubleView.Header = "Two Pages";
  290. doubleView.Click += (o, p) =>
  291. {
  292. if (pdfViewControl != null)
  293. {
  294. pdfViewControl.PDFView?.ChangeViewMode(ViewMode.Double);
  295. }
  296. };
  297. e.PopupMenu.Items.Add(doubleView);
  298. MenuItem doubleContinuousView = new MenuItem();
  299. doubleContinuousView.Header = "Two Pages Continuous";
  300. doubleContinuousView.Click += (o, p) =>
  301. {
  302. if (pdfViewControl != null)
  303. {
  304. pdfViewControl.PDFView?.ChangeViewMode(ViewMode.DoubleContinuous);
  305. }
  306. };
  307. e.PopupMenu.Items.Add(doubleContinuousView);
  308. }
  309. }
  310. if (e != null && e.CommandType == CommandType.Copy)
  311. {
  312. e.DoCommand();
  313. }
  314. }
  315. private void CopyImage_Click(object sender, RoutedEventArgs e)
  316. {
  317. try
  318. {
  319. Dictionary<int, List<Bitmap>> imageDict = pdfViewControl.PDFView?.GetSelectedImages();
  320. if (imageDict != null && imageDict.Count > 0)
  321. {
  322. foreach (int pageIndex in imageDict.Keys)
  323. {
  324. List<Bitmap> imageList = imageDict[pageIndex];
  325. foreach (Bitmap image in imageList)
  326. {
  327. MemoryStream ms = new MemoryStream();
  328. image.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
  329. BitmapImage imageData = new BitmapImage();
  330. imageData.BeginInit();
  331. imageData.StreamSource = ms;
  332. imageData.CacheOption = BitmapCacheOption.OnLoad;
  333. imageData.EndInit();
  334. imageData.Freeze();
  335. Clipboard.SetImage(imageData);
  336. break;
  337. }
  338. }
  339. }
  340. }
  341. catch (Exception ex)
  342. {
  343. }
  344. }
  345. private void ExtraImage_Click(object sender, RoutedEventArgs e)
  346. {
  347. System.Windows.Forms.FolderBrowserDialog folderDialog = new System.Windows.Forms.FolderBrowserDialog();
  348. if (folderDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
  349. {
  350. string choosePath = folderDialog.SelectedPath;
  351. string openPath = choosePath;
  352. try
  353. {
  354. Dictionary<int, List<Bitmap>> imageDict = pdfViewControl.PDFView?.GetSelectedImages();
  355. if (imageDict != null && imageDict.Count > 0)
  356. {
  357. foreach (int pageIndex in imageDict.Keys)
  358. {
  359. List<Bitmap> imageList = imageDict[pageIndex];
  360. foreach (Bitmap image in imageList)
  361. {
  362. string savePath = Path.Combine(choosePath, Guid.NewGuid() + ".jpg");
  363. image.Save(savePath, System.Drawing.Imaging.ImageFormat.Jpeg);
  364. openPath = savePath;
  365. }
  366. }
  367. }
  368. Process.Start("explorer", "/select,\"" + openPath + "\"");
  369. }
  370. catch (Exception ex)
  371. {
  372. }
  373. }
  374. }
  375. private void PDFEditImageContextMenu(object sender, PDFEditCommand editCommand)
  376. {
  377. editCommand.PopupMenu = new ContextMenu();
  378. if (ApplicationCommands.Copy.CanExecute(null, (UIElement)sender) && lastPDFEditEvent != null)
  379. {
  380. MenuItem rotateLeftMenu = new MenuItem();
  381. rotateLeftMenu.Header = "Rotate Left";
  382. rotateLeftMenu.Click += (o, p) =>
  383. {
  384. if (lastPDFEditEvent != null && lastPDFEditEvent.EditType == CPDFEditType.EditImage)
  385. {
  386. lastPDFEditEvent.Rotate = -90;
  387. lastPDFEditEvent.UpdatePDFEditByEventArgs();
  388. imageEditControl?.SetImageThumb();
  389. }
  390. };
  391. editCommand.PopupMenu.Items.Add(rotateLeftMenu);
  392. MenuItem rotateRightMenu = new MenuItem();
  393. rotateRightMenu.Header = "Rotate Right";
  394. rotateRightMenu.Click += (o, p) =>
  395. {
  396. if (lastPDFEditEvent != null && lastPDFEditEvent.EditType == CPDFEditType.EditImage)
  397. {
  398. lastPDFEditEvent.Rotate = 90;
  399. lastPDFEditEvent.UpdatePDFEditByEventArgs();
  400. imageEditControl?.SetImageThumb();
  401. }
  402. };
  403. editCommand.PopupMenu.Items.Add(rotateRightMenu);
  404. MenuItem replaceMenu = new MenuItem();
  405. replaceMenu.Header = "Replace";
  406. replaceMenu.Click += (o, p) =>
  407. {
  408. if (lastPDFEditEvent != null && lastPDFEditEvent.EditType == CPDFEditType.EditImage)
  409. {
  410. OpenFileDialog openFileDialog = new OpenFileDialog();
  411. openFileDialog.Filter = "Image Files(*.jpg;*.jpeg;*.png;*.bmp)|*.jpg;*.jpeg;*.png;*.bmp;";
  412. if (openFileDialog.ShowDialog() == true)
  413. {
  414. lastPDFEditEvent.ReplaceImagePath = openFileDialog.FileName;
  415. lastPDFEditEvent.UpdatePDFEditByEventArgs();
  416. pdfViewControl.PDFView?.ClearSelectPDFEdit();
  417. }
  418. }
  419. };
  420. editCommand.PopupMenu.Items.Add(replaceMenu);
  421. MenuItem exportMenu = new MenuItem();
  422. exportMenu.Header = "Export";
  423. exportMenu.Click += (o, p) =>
  424. {
  425. if (pdfViewControl != null && pdfViewControl.PDFView != null)
  426. {
  427. Dictionary<int, List<Bitmap>> imageDict = pdfViewControl.PDFView.GetSelectedImages();
  428. if (imageDict != null && imageDict.Count > 0)
  429. {
  430. System.Windows.Forms.FolderBrowserDialog folderBrowser = new System.Windows.Forms.FolderBrowserDialog();
  431. if (folderBrowser.ShowDialog() == System.Windows.Forms.DialogResult.OK)
  432. {
  433. string choosePath = folderBrowser.SelectedPath;
  434. string openPath = choosePath;
  435. try
  436. {
  437. foreach (int pageIndex in imageDict.Keys)
  438. {
  439. List<Bitmap> imageList = imageDict[pageIndex];
  440. foreach (Bitmap image in imageList)
  441. {
  442. string savePath = System.IO.Path.Combine(choosePath, Guid.NewGuid() + ".jpg");
  443. image.Save(savePath, System.Drawing.Imaging.ImageFormat.Jpeg);
  444. openPath = savePath;
  445. }
  446. }
  447. Process.Start("explorer", "/select,\"" + openPath + "\"");
  448. }
  449. catch (Exception ex)
  450. {
  451. }
  452. }
  453. }
  454. }
  455. };
  456. editCommand.PopupMenu.Items.Add(exportMenu);
  457. MenuItem opacityMenu = new MenuItem();
  458. opacityMenu.Header = "Opacity";
  459. editCommand.PopupMenu.Items.Add(opacityMenu);
  460. AppendOpacityMenu(opacityMenu);
  461. MenuItem horizonMirror = new MenuItem();
  462. horizonMirror.Header = "Flip horizontal";
  463. horizonMirror.Click += (o, p) =>
  464. {
  465. if (lastPDFEditEvent != null && lastPDFEditEvent.EditType == CPDFEditType.EditImage)
  466. {
  467. lastPDFEditEvent.HorizontalMirror = true;
  468. lastPDFEditEvent.UpdatePDFEditByEventArgs();
  469. imageEditControl?.SetImageThumb();
  470. }
  471. };
  472. editCommand.PopupMenu.Items.Add(horizonMirror);
  473. MenuItem verticalMirror = new MenuItem();
  474. verticalMirror.Header = "Flip vertical";
  475. verticalMirror.Click += (o, p) =>
  476. {
  477. if (lastPDFEditEvent != null && lastPDFEditEvent.EditType == CPDFEditType.EditImage)
  478. {
  479. lastPDFEditEvent.VerticalMirror = true;
  480. lastPDFEditEvent.UpdatePDFEditByEventArgs();
  481. imageEditControl?.SetImageThumb();
  482. }
  483. };
  484. editCommand.PopupMenu.Items.Add(verticalMirror);
  485. MenuItem cropMenu = new MenuItem();
  486. cropMenu.Header = "Crop";
  487. cropMenu.Click += (o, p) =>
  488. {
  489. if (lastPDFEditEvent != null && lastPDFEditEvent.EditType == CPDFEditType.EditImage)
  490. {
  491. lastPDFEditEvent.ClipImage = true;
  492. lastPDFEditEvent.UpdatePDFEditByEventArgs();
  493. }
  494. };
  495. editCommand.PopupMenu.Items.Add(cropMenu);
  496. editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "Copy", Command = ApplicationCommands.Copy, CommandTarget = (UIElement)sender });
  497. editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "Cut", Command = ApplicationCommands.Cut, CommandTarget = (UIElement)sender });
  498. editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "Delete", Command = ApplicationCommands.Delete, CommandTarget = (UIElement)sender });
  499. editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "Paste", Command = ApplicationCommands.Paste, CommandTarget = (UIElement)sender });
  500. if (editCommand.TextAreaCopied)
  501. {
  502. editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "Paste And Match Style", Command = CustomCommands.PasteMatchStyle, CommandTarget = (UIElement)sender });
  503. }
  504. }
  505. else
  506. {
  507. editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "Paste", Command = ApplicationCommands.Paste, CommandTarget = (UIElement)sender });
  508. }
  509. }
  510. private void AppendOpacityMenu(MenuItem parentMenu)
  511. {
  512. List<int> opacityList = new List<int>()
  513. {
  514. 25,50,75,100
  515. };
  516. foreach (int opacity in opacityList)
  517. {
  518. MenuItem opacityMenu = new MenuItem();
  519. opacityMenu.Header = string.Format("{0}%", opacity);
  520. opacityMenu.Click += (o, p) =>
  521. {
  522. if (lastPDFEditEvent != null && lastPDFEditEvent.EditType == CPDFEditType.EditImage)
  523. {
  524. lastPDFEditEvent.Transparency = (int)(opacity * 255 / 100D);
  525. lastPDFEditEvent.UpdatePDFEditByEventArgs();
  526. imageEditControl?.SetImageTransparency(lastPDFEditEvent.Transparency);
  527. imageEditControl?.SetImageThumb();
  528. }
  529. };
  530. parentMenu.Items.Add(opacityMenu);
  531. }
  532. }
  533. private void PDFEditTextContextMenu(object sender, PDFEditCommand editCommand)
  534. {
  535. editCommand.PopupMenu = new ContextMenu();
  536. if (lastPDFEditEvent != null)
  537. {
  538. editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "Copy", Command = ApplicationCommands.Copy, CommandTarget = (UIElement)sender });
  539. editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "Cut", Command = ApplicationCommands.Cut, CommandTarget = (UIElement)sender });
  540. editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "Delete", Command = ApplicationCommands.Delete, CommandTarget = (UIElement)sender });
  541. editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "Paste", Command = ApplicationCommands.Paste, CommandTarget = (UIElement)sender });
  542. }
  543. else
  544. {
  545. editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "Paste", Command = ApplicationCommands.Paste, CommandTarget = (UIElement)sender });
  546. if (editCommand.TextAreaCopied)
  547. {
  548. editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "Paste And Match Style", Command = CustomCommands.PasteMatchStyle, CommandTarget = (UIElement)sender });
  549. }
  550. }
  551. }
  552. #endregion
  553. #region UI
  554. /// <summary>
  555. /// Check the zoom factor
  556. /// </summary>
  557. private double CheckZoomLevel(double zoom, bool IsGrowth)
  558. {
  559. double standardZoom = 100;
  560. if (zoom <= 0.01)
  561. {
  562. return 0.01;
  563. }
  564. if (zoom >= 10)
  565. {
  566. return 10;
  567. }
  568. zoom *= 100;
  569. for (int i = 0; i < zoomLevelList.Length - 1; i++)
  570. {
  571. if (zoom > zoomLevelList[i] && zoom <= zoomLevelList[i + 1] && IsGrowth)
  572. {
  573. standardZoom = zoomLevelList[i + 1];
  574. break;
  575. }
  576. if (zoom >= zoomLevelList[i] && zoom < zoomLevelList[i + 1] && !IsGrowth)
  577. {
  578. standardZoom = zoomLevelList[i];
  579. break;
  580. }
  581. }
  582. return standardZoom / 100;
  583. }
  584. private void PageView_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
  585. {
  586. UIElement pageView = sender as UIElement;
  587. if (pageView != null)
  588. {
  589. pageView.MouseLeftButtonUp -= PageView_MouseLeftButtonUp;
  590. }
  591. SetImageEditProperty();
  592. }
  593. private void ControlRightPanel()
  594. {
  595. if ((bool)ViewSettingBtn.IsChecked)
  596. {
  597. ViewSettingBtn.IsChecked = false;
  598. }
  599. if (RightPanelButton != null)
  600. {
  601. if (RightPanelButton.IsChecked == true)
  602. {
  603. if (PropertyContainer.Child is CPDFDisplaySettingsControl)
  604. {
  605. PropertyContainer.Child = prevPanel;
  606. }
  607. if (PropertyContainer.Child == null)
  608. {
  609. PropertyContainer.Child = empytPanel;
  610. }
  611. PropertyContainer.Visibility = Visibility.Visible;
  612. }
  613. else
  614. {
  615. PropertyContainer.Visibility = Visibility.Collapsed;
  616. }
  617. }
  618. }
  619. private void RightPanelButton_Click(object sender, RoutedEventArgs e)
  620. {
  621. ControlRightPanel();
  622. }
  623. private void ControlLeftPanel()
  624. {
  625. if (LeftToolPanelButton != null)
  626. {
  627. bool isExpand = LeftToolPanelButton.IsChecked == true;
  628. ExpandLeftPanel(isExpand);
  629. }
  630. }
  631. private void LeftToolPanelButton_Click(object sender, RoutedEventArgs e)
  632. {
  633. ControlLeftPanel();
  634. }
  635. private void ExpandSearchBtn_Click(object sender, RoutedEventArgs e)
  636. {
  637. LeftToolPanelButton.IsChecked = true;
  638. ExpandLeftPanel(true);
  639. BotaSideTool.SelectBotaTool(BOTATools.Search);
  640. }
  641. private void ShowViewSettings()
  642. {
  643. if (RightPanelButton != null)
  644. {
  645. RightPanelButton.IsChecked = false;
  646. }
  647. if (ViewSettingBtn != null)
  648. {
  649. if (ViewSettingBtn.IsChecked == true)
  650. {
  651. CPDFDisplaySettingsControl displayPanel = new CPDFDisplaySettingsControl();
  652. displayPanel.InitWithPDFViewer(pdfViewControl.PDFView);
  653. if (ViewComboBox.SelectedIndex == 1)
  654. {
  655. displayPanel.SetVisibilityWhenContentEdit(Visibility.Collapsed);
  656. }
  657. else
  658. {
  659. displayPanel.SetVisibilityWhenContentEdit(Visibility.Visible);
  660. }
  661. prevPanel = PropertyContainer.Child;
  662. PropertyContainer.Child = displayPanel;
  663. PropertyContainer.Visibility = Visibility.Visible;
  664. }
  665. else
  666. {
  667. PropertyContainer.Child = null;
  668. PropertyContainer.Visibility = Visibility.Collapsed;
  669. }
  670. }
  671. }
  672. private void ViewSettingBtn_Click(object sender, RoutedEventArgs e)
  673. {
  674. ShowViewSettings();
  675. }
  676. private void NextPageBorder_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
  677. {
  678. pdfViewControl.PDFView?.GoToPage(pdfViewControl.PDFView.CurrentIndex + 1);
  679. }
  680. private void PrevPageBorder_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
  681. {
  682. pdfViewControl.PDFView?.GoToPage(pdfViewControl.PDFView.CurrentIndex - 1);
  683. }
  684. private void PageInfoBtn_Click(object sender, RoutedEventArgs e)
  685. {
  686. PasswordUI.Visibility = Visibility.Collapsed;
  687. FileInfoUI.Visibility = Visibility.Visible;
  688. FileInfoControl.InitWithPDFViewer(pdfViewControl.PDFView);
  689. PopupBorder.Visibility = Visibility.Visible;
  690. }
  691. private void FileInfoCloseBtn_Click(object sender, RoutedEventArgs e)
  692. {
  693. PopupBorder.Visibility = Visibility.Collapsed;
  694. }
  695. private void OpenFile()
  696. {
  697. string filePath = CommonHelper.GetFilePathOrEmpty();
  698. if (!string.IsNullOrEmpty(filePath) && pdfViewControl != null)
  699. {
  700. if (pdfViewControl.PDFView != null && pdfViewControl.PDFView.Document != null)
  701. {
  702. string oldFilePath = pdfViewControl.PDFView.Document.FilePath;
  703. if (oldFilePath.ToLower() == filePath.ToLower())
  704. {
  705. return;
  706. }
  707. }
  708. passwordViewer = new PDFViewControl();
  709. passwordViewer.PDFView.InitDocument(filePath);
  710. if (passwordViewer.PDFView.Document == null)
  711. {
  712. MessageBox.Show("Open File Failed");
  713. return;
  714. }
  715. if (passwordViewer.PDFView.Document.IsLocked)
  716. {
  717. PasswordUI.SetShowText(System.IO.Path.GetFileName(filePath) + " password encrypted.");
  718. PasswordUI.ClearPassword();
  719. PopupBorder.Visibility = Visibility.Visible;
  720. PasswordUI.Visibility = Visibility.Visible;
  721. }
  722. else
  723. {
  724. pdfViewControl = passwordViewer;
  725. LoadDocument();
  726. }
  727. }
  728. }
  729. private void OpenFile_Click(object sender, RoutedEventArgs e)
  730. {
  731. OpenFile();
  732. }
  733. private void SaveFileBtn_Click(object sender, RoutedEventArgs e)
  734. {
  735. SaveFile();
  736. }
  737. private void PDFTextEditButton_Click(object sender, RoutedEventArgs e)
  738. {
  739. ToggleButton senderBtn = sender as ToggleButton;
  740. if (senderBtn != null && pdfViewControl != null)
  741. {
  742. ClearPDFEditState(senderBtn);
  743. if (senderBtn.IsChecked == true)
  744. {
  745. PDFEditEvent createParam = new PDFEditEvent();
  746. createParam.EditType = CPDFEditType.EditText;
  747. createParam.IsBold = false;
  748. createParam.IsItalic = false;
  749. createParam.FontSize = 14;
  750. createParam.FontName = "Helvetica";
  751. createParam.FontColor = Colors.Black;
  752. createParam.TextAlign = TextAlignType.AlignLeft;
  753. createParam.Transparency = 255;
  754. if (pdfViewControl.PDFView != null && pdfViewControl.PDFView.Document != null)
  755. {
  756. CPDFDocument pdfDoc = pdfViewControl.PDFView.Document;
  757. if (pdfDoc.PageCount > 0)
  758. {
  759. CPDFPage pdfPage = pdfDoc.PageAtIndex(0);
  760. CPDFEditPage editPage = pdfPage.GetEditPage();
  761. editPage.BeginEdit(CPDFEditType.EditText);
  762. createParam.SystemFontNameList.AddRange(editPage.GetFontList());
  763. editPage.EndEdit();
  764. }
  765. }
  766. pdfViewControl.PDFView?.SetMouseMode(MouseModes.Viewer);
  767. pdfViewControl.PDFView?.SetPDFEditType(CPDFEditType.EditText);
  768. pdfViewControl.PDFView?.SetPDFEditCreateType(CPDFEditType.EditText);
  769. pdfViewControl.PDFView?.SetMouseMode(MouseModes.PDFEdit);
  770. pdfViewControl.PDFView?.ReloadDocument();
  771. pdfViewControl.PDFView?.SetPDFEditParam(createParam);
  772. if (textEditControl == null)
  773. {
  774. textEditControl = new PDFTextEditControl();
  775. }
  776. textEditControl.SetPDFTextEditData(createParam);
  777. PropertyContainer.Child = textEditControl;
  778. PropertyContainer.Visibility = Visibility.Visible;
  779. if ((bool)ViewSettingBtn.IsChecked)
  780. {
  781. ViewSettingBtn.IsChecked = false;
  782. }
  783. RightPanelButton.IsChecked = true;
  784. pdfTextCreateParam = createParam;
  785. }
  786. else
  787. {
  788. pdfViewControl.PDFView?.SetPDFEditCreateType(CPDFEditType.None);
  789. pdfViewControl.PDFView?.SetPDFEditType(CPDFEditType.EditImage | CPDFEditType.EditText);
  790. pdfViewControl.PDFView?.SetMouseMode(MouseModes.PDFEdit);
  791. pdfViewControl.PDFView?.ReloadDocument();
  792. RightPanelButton.IsChecked = false;
  793. if ((bool)ViewSettingBtn.IsChecked)
  794. {
  795. return;
  796. }
  797. else
  798. {
  799. if (PropertyContainer.Child != null)
  800. {
  801. PropertyContainer.Child = empytPanel;
  802. }
  803. }
  804. PropertyContainer.Visibility = Visibility.Collapsed;
  805. }
  806. }
  807. }
  808. private void PDFImageEditButton_Click(object sender, RoutedEventArgs e)
  809. {
  810. ToggleButton senderBtn = sender as ToggleButton;
  811. if (senderBtn != null && pdfViewControl != null)
  812. {
  813. senderBtn.IsChecked = false;
  814. OpenFileDialog openFileDialog = new OpenFileDialog();
  815. openFileDialog.Filter = "Image Files(*.jpg;*.jpeg;*.png;*.bmp)|*.jpg;*.jpeg;*.png;*.bmp;";
  816. if (openFileDialog.ShowDialog() == true)
  817. {
  818. ClearPDFEditState(senderBtn);
  819. pdfViewControl.PDFView?.ClearSelectPDFEdit();
  820. pdfViewControl.PDFView?.SetPDFEditType(CPDFEditType.EditImage | CPDFEditType.EditText);
  821. pdfViewControl.PDFView?.SetMouseMode(MouseModes.PDFEdit);
  822. pdfViewControl.PDFView?.ReloadDocument();
  823. RightPanelButton.IsChecked = false;
  824. if (PropertyContainer.Child != null && !(bool)ViewSettingBtn.IsChecked)
  825. {
  826. PropertyContainer.Child = empytPanel;
  827. PropertyContainer.Visibility = Visibility.Collapsed;
  828. }
  829. pdfViewControl.PDFView?.SetPDFEditCreateType(CPDFEditType.EditImage);
  830. pdfViewControl.PDFView?.AddPDFEditImage(openFileDialog.FileName);
  831. }
  832. }
  833. }
  834. private void ClearPDFEditState(ToggleButton ignoreBtn = null)
  835. {
  836. List<ToggleButton> clearBtnList = new List<ToggleButton>()
  837. {
  838. PDFTextEditButton,
  839. PDFImageEditButton
  840. };
  841. foreach (ToggleButton item in clearBtnList)
  842. {
  843. if (ignoreBtn == item)
  844. {
  845. continue;
  846. }
  847. item.IsChecked = false;
  848. }
  849. }
  850. private void UndoBtn_Click(object sender, RoutedEventArgs e)
  851. {
  852. if (pdfViewControl != null && pdfViewControl.PDFView != null)
  853. {
  854. pdfViewControl.PDFView.UndoManager?.Undo();
  855. }
  856. }
  857. private void RedoBtn_Click(object sender, RoutedEventArgs e)
  858. {
  859. if (pdfViewControl != null && pdfViewControl.PDFView != null)
  860. {
  861. pdfViewControl.PDFView.UndoManager?.Redo();
  862. }
  863. }
  864. #endregion
  865. #region Property changed
  866. protected void OnPropertyChanged([CallerMemberName] string name = null)
  867. {
  868. PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
  869. }
  870. private void UndoManager_PropertyChanged(object sender, PropertyChangedEventArgs e)
  871. {
  872. OnPropertyChanged(e.PropertyName);
  873. }
  874. #endregion
  875. #region Event handle
  876. private void PDFView_PDFEditCommandHandler(object sender, PDFEditCommand e)
  877. {
  878. if (e == null)
  879. {
  880. return;
  881. }
  882. if (e.EditType == CPDFEditType.EditText)
  883. {
  884. e.Handle = true;
  885. PDFEditTextContextMenu(sender, e);
  886. }
  887. if (e.EditType == CPDFEditType.EditImage)
  888. {
  889. e.Handle = true;
  890. PDFEditImageContextMenu(sender, e);
  891. }
  892. }
  893. private void PDFView_PDFEditActiveHandler(object sender, PDFEditEvent e)
  894. {
  895. PDFEditEvent tempEvent = lastPDFEditEvent;
  896. lastPDFEditEvent = e;
  897. if ((bool)ViewSettingBtn.IsChecked)
  898. {
  899. ViewSettingBtn.IsChecked = false;
  900. RightPanelButton.IsChecked = true;
  901. }
  902. if (e == null)
  903. {
  904. PropertyContainer.Child = empytPanel;
  905. if (pdfTextCreateParam != null && pdfViewControl != null && pdfViewControl.PDFView != null)
  906. {
  907. if (pdfViewControl.PDFView.GetPDFEditCreateType() == CPDFEditType.EditText)
  908. {
  909. if (textEditControl == null)
  910. {
  911. textEditControl = new PDFTextEditControl();
  912. }
  913. textEditControl.SetPDFTextEditData(pdfTextCreateParam);
  914. PropertyContainer.Child = textEditControl;
  915. }
  916. }
  917. return;
  918. }
  919. if (Mouse.RightButton == MouseButtonState.Pressed && PropertyContainer.Visibility != Visibility.Visible)
  920. {
  921. return;
  922. }
  923. if (e.EditType == CPDFEditType.EditText)
  924. {
  925. if (textEditControl == null)
  926. {
  927. textEditControl = new PDFTextEditControl();
  928. }
  929. textEditControl.SetPDFTextEditData(e);
  930. PropertyContainer.Child = textEditControl;
  931. return;
  932. }
  933. if (e.EditType == CPDFEditType.EditImage && pdfViewControl != null)
  934. {
  935. UIElement pageView = sender as UIElement;
  936. if (pageView != null)
  937. {
  938. pageView.MouseLeftButtonUp -= PageView_MouseLeftButtonUp;
  939. pageView.MouseLeftButtonUp += PageView_MouseLeftButtonUp;
  940. }
  941. if (Mouse.RightButton == MouseButtonState.Pressed)
  942. {
  943. SetImageEditProperty();
  944. }
  945. return;
  946. }
  947. }
  948. #endregion
  949. #region Save file
  950. /// <summary>
  951. /// Save the file to another PDF file.
  952. /// </summary>
  953. public void SaveAsFile()
  954. {
  955. {
  956. if (pdfViewControl != null && pdfViewControl.PDFView != null && pdfViewControl.PDFView.Document != null)
  957. {
  958. CPDFDocument pdfDoc = pdfViewControl.PDFView.Document;
  959. SaveFileDialog saveDialog = new SaveFileDialog();
  960. saveDialog.Filter = "(*.pdf)|*.pdf";
  961. saveDialog.DefaultExt = ".pdf";
  962. saveDialog.OverwritePrompt = true;
  963. if (saveDialog.ShowDialog() == true)
  964. {
  965. pdfDoc.WriteToFilePath(saveDialog.FileName);
  966. }
  967. }
  968. }
  969. }
  970. private void SaveFile()
  971. {
  972. if (pdfViewControl != null && pdfViewControl.PDFView != null && pdfViewControl.PDFView.Document != null)
  973. {
  974. CPDFDocument pdfDoc = pdfViewControl.PDFView.Document;
  975. if (pdfDoc.WriteToLoadedPath())
  976. {
  977. return;
  978. }
  979. SaveFileDialog saveDialog = new SaveFileDialog();
  980. saveDialog.Filter = "(*.pdf)|*.pdf";
  981. saveDialog.DefaultExt = ".pdf";
  982. saveDialog.OverwritePrompt = true;
  983. if (saveDialog.ShowDialog() == true)
  984. {
  985. pdfDoc.WriteToFilePath(saveDialog.FileName);
  986. }
  987. }
  988. }
  989. #endregion
  990. #region Selected changed
  991. private void PdfViewer_InfoChanged(object sender, KeyValuePair<string, object> e)
  992. {
  993. if (e.Key == "Zoom")
  994. {
  995. CPDFSaclingControl.SetZoomTextBoxText(string.Format("{0}", (int)((double)e.Value * 100)));
  996. }
  997. }
  998. private void SetImageEditProperty()
  999. {
  1000. if (lastPDFEditEvent != null && lastPDFEditEvent.EditType == CPDFEditType.EditImage)
  1001. {
  1002. if (imageEditControl == null)
  1003. {
  1004. imageEditControl = new PDFImageEditControl();
  1005. }
  1006. imageEditControl.InitWithPDFViewer(pdfViewControl.PDFView);
  1007. imageEditControl.SetPDFImageEditData(lastPDFEditEvent);
  1008. PropertyContainer.Child = imageEditControl;
  1009. }
  1010. }
  1011. private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
  1012. {
  1013. SetEditMode();
  1014. }
  1015. private void SetEditMode()
  1016. {
  1017. ClearPDFEditState(null);
  1018. if (pdfViewControl != null && ViewComboBox != null)
  1019. {
  1020. if (ViewComboBox.SelectedIndex == 0)
  1021. {
  1022. PDFEditTool.Visibility = Visibility.Collapsed;
  1023. pdfViewControl.PDFView?.SetShowLink(true);
  1024. pdfViewControl.PDFView?.SetPDFEditType(CPDFEditType.None);
  1025. pdfViewControl.PDFView?.SetMouseMode(MouseModes.Viewer);
  1026. pdfViewControl.PDFView?.ReloadDocument();
  1027. }
  1028. if (ViewComboBox.SelectedIndex == 1)
  1029. {
  1030. PDFEditTool.Visibility = Visibility.Visible;
  1031. pdfViewControl.PDFView?.SetShowLink(false);
  1032. pdfViewControl.PDFView?.SetPDFEditType(CPDFEditType.EditText | CPDFEditType.EditImage);
  1033. pdfViewControl.PDFView?.SetPDFEditCreateType(CPDFEditType.None);
  1034. pdfViewControl.PDFView?.SetMouseMode(MouseModes.PDFEdit);
  1035. pdfViewControl.PDFView?.ReloadDocument();
  1036. }
  1037. RightPanelButton.IsChecked = false;
  1038. ViewSettingBtn.IsChecked = false;
  1039. PropertyContainer.Visibility = Visibility.Collapsed;
  1040. if (PropertyContainer != null)
  1041. {
  1042. PropertyContainer.Child = null;
  1043. }
  1044. }
  1045. }
  1046. public void PDFView_KeyDown(object sender, KeyEventArgs e)
  1047. {
  1048. if (pdfViewControl.PDFView.MouseMode != MouseModes.PDFEdit)
  1049. {
  1050. return;
  1051. }
  1052. if (Keyboard.Modifiers == ModifierKeys.Control)
  1053. {
  1054. if (e.Key == Key.Left)
  1055. {
  1056. pdfViewControl.PDFView.JumpEditingLoction(CEditingLocation.CEditingLoadTypePreWord, false);
  1057. e.Handled = true;
  1058. }
  1059. if (e.Key == Key.Right)
  1060. {
  1061. pdfViewControl.PDFView.JumpEditingLoction(CEditingLocation.CEditingLoadTypeNextWord, false);
  1062. e.Handled = true;
  1063. }
  1064. if (e.Key == Key.Up)
  1065. {
  1066. pdfViewControl.PDFView.JumpEditingLoction(CEditingLocation.CEditingLoadTypeSectionBegin, false);
  1067. e.Handled = true;
  1068. }
  1069. if (e.Key == Key.Down)
  1070. {
  1071. pdfViewControl.PDFView.JumpEditingLoction(CEditingLocation.CEditingLoadTypeSectionEnd, false);
  1072. e.Handled = true;
  1073. }
  1074. }
  1075. if (Keyboard.Modifiers == ModifierKeys.Shift)
  1076. {
  1077. if (e.Key == Key.Left)
  1078. {
  1079. pdfViewControl.PDFView.JumpEditingLoction(CEditingLocation.CEditingLoadTypePreCharPlace, true);
  1080. e.Handled = true;
  1081. }
  1082. if (e.Key == Key.Right)
  1083. {
  1084. pdfViewControl.PDFView.JumpEditingLoction(CEditingLocation.CEditingLoadTypeNextCharPlace, true);
  1085. e.Handled = true;
  1086. }
  1087. if (e.Key == Key.Up)
  1088. {
  1089. pdfViewControl.PDFView.JumpEditingLoction(CEditingLocation.CEditingLoadTypeUpCharPlace, true);
  1090. e.Handled = true;
  1091. }
  1092. if (e.Key == Key.Down)
  1093. {
  1094. pdfViewControl.PDFView.JumpEditingLoction(CEditingLocation.CEditingLoadTypeDownCharPlace, true);
  1095. e.Handled = true;
  1096. }
  1097. }
  1098. if (Keyboard.Modifiers == ModifierKeys.Alt)
  1099. {
  1100. if (e.SystemKey == Key.Up)
  1101. {
  1102. pdfViewControl.PDFView.JumpEditingLoction(CEditingLocation.CEditingLocationLineBegin, true);
  1103. e.Handled = true;
  1104. }
  1105. if (e.SystemKey == Key.Down)
  1106. {
  1107. pdfViewControl.PDFView.JumpEditingLoction(CEditingLocation.CEditingLoadTypeLineEnd, true);
  1108. e.Handled = true;
  1109. }
  1110. }
  1111. if (Keyboard.Modifiers == ModifierKeys.None)
  1112. {
  1113. if (e.Key == Key.Left)
  1114. {
  1115. pdfViewControl.PDFView.MoveEditArea(new Point(-5, 0));
  1116. e.Handled = true;
  1117. }
  1118. if (e.Key == Key.Right)
  1119. {
  1120. pdfViewControl.PDFView.MoveEditArea(new Point(5, 0));
  1121. e.Handled = true;
  1122. }
  1123. if (e.Key == Key.Up)
  1124. {
  1125. pdfViewControl.PDFView.MoveEditArea(new Point(0, -5));
  1126. e.Handled = true;
  1127. }
  1128. if (e.Key == Key.Down)
  1129. {
  1130. pdfViewControl.PDFView.MoveEditArea(new Point(0, 5));
  1131. e.Handled = true;
  1132. }
  1133. }
  1134. if (Keyboard.Modifiers == (ModifierKeys.Control | ModifierKeys.Shift))
  1135. {
  1136. if (e.Key == Key.Left)
  1137. {
  1138. pdfViewControl.PDFView.JumpEditingLoction(CEditingLocation.CEditingLoadTypePreWord, true);
  1139. e.Handled = true;
  1140. }
  1141. if (e.Key == Key.Right)
  1142. {
  1143. pdfViewControl.PDFView.JumpEditingLoction(CEditingLocation.CEditingLoadTypeNextWord, true);
  1144. e.Handled = true;
  1145. }
  1146. if (e.Key == Key.Up)
  1147. {
  1148. pdfViewControl.PDFView.JumpEditingLoction(CEditingLocation.CEditingLoadTypeSectionBegin, true);
  1149. e.Handled = true;
  1150. }
  1151. if (e.Key == Key.Down)
  1152. {
  1153. pdfViewControl.PDFView.JumpEditingLoction(CEditingLocation.CEditingLoadTypeSectionEnd, true);
  1154. e.Handled = true;
  1155. }
  1156. }
  1157. }
  1158. #endregion
  1159. #region Close window
  1160. protected override void OnClosing(CancelEventArgs e)
  1161. {
  1162. if (pdfViewControl.PDFView.UndoManager.CanSave)
  1163. {
  1164. MessageBoxResult result = MessageBox.Show("Do you want to save your changes before closing the application?", "Message", MessageBoxButton.YesNoCancel);
  1165. if (result == MessageBoxResult.Yes)
  1166. {
  1167. SaveFile();
  1168. }
  1169. else if (result == MessageBoxResult.No)
  1170. {
  1171. }
  1172. else
  1173. {
  1174. e.Cancel = true;
  1175. }
  1176. }
  1177. }
  1178. #endregion
  1179. #region
  1180. private void CommandBinding_Executed_Open(object sender, ExecutedRoutedEventArgs e)
  1181. {
  1182. OpenFile();
  1183. }
  1184. private void CommandBinding_Executed_Save(object sender, ExecutedRoutedEventArgs e)
  1185. {
  1186. if (CanSave)
  1187. {
  1188. SaveFile();
  1189. }
  1190. }
  1191. private void CommandBinding_Executed_SaveAs(object sender, ExecutedRoutedEventArgs e)
  1192. {
  1193. SaveAsFile();
  1194. }
  1195. private void CommandBinding_Executed_Undo(object sender, ExecutedRoutedEventArgs e)
  1196. {
  1197. if (pdfViewControl != null && pdfViewControl.PDFView != null && CanUndo)
  1198. {
  1199. pdfViewControl.PDFView.UndoManager?.Undo();
  1200. }
  1201. }
  1202. private void CommandBinding_Executed_Redo(object sender, ExecutedRoutedEventArgs e)
  1203. {
  1204. if (pdfViewControl != null && pdfViewControl.PDFView != null && CanRedo)
  1205. {
  1206. pdfViewControl.PDFView.UndoManager?.Redo();
  1207. }
  1208. }
  1209. private void CommandBinding_Executed_ControlLeftPanel(object sender, ExecutedRoutedEventArgs e)
  1210. {
  1211. LeftToolPanelButton.IsChecked = !LeftToolPanelButton.IsChecked;
  1212. ControlLeftPanel();
  1213. }
  1214. private void CommandBinding_Executed_ControlRightPanel(object sender, ExecutedRoutedEventArgs e)
  1215. {
  1216. RightPanelButton.IsChecked = !RightPanelButton.IsChecked;
  1217. ControlRightPanel();
  1218. }
  1219. private void CommandBinding_Executed_Bookmark(object sender, ExecutedRoutedEventArgs e)
  1220. {
  1221. ExpandLeftPanel(true);
  1222. LeftToolPanelButton.IsChecked = true;
  1223. BotaSideTool.SelectBotaTool(BOTATools.Bookmark);
  1224. }
  1225. private void CommandBinding_Executed_Outline(object sender, ExecutedRoutedEventArgs e)
  1226. {
  1227. ExpandLeftPanel(true);
  1228. LeftToolPanelButton.IsChecked = true;
  1229. BotaSideTool.SelectBotaTool(BOTATools.Outline);
  1230. }
  1231. private void CommandBinding_Executed_Thumbnail(object sender, ExecutedRoutedEventArgs e)
  1232. {
  1233. ExpandLeftPanel(true);
  1234. LeftToolPanelButton.IsChecked = true;
  1235. BotaSideTool.SelectBotaTool(BOTATools.Thumbnail);
  1236. }
  1237. private void CommandBinding_Executed_Search(object sender, ExecutedRoutedEventArgs e)
  1238. {
  1239. ExpandLeftPanel(true);
  1240. LeftToolPanelButton.IsChecked = true;
  1241. BotaSideTool.SelectBotaTool(BOTATools.Search);
  1242. }
  1243. private void CommandBinding_Executed_ScaleAdd(object sender, ExecutedRoutedEventArgs e)
  1244. {
  1245. double newZoom = CheckZoomLevel(pdfViewControl.PDFView.ZoomFactor + 0.01, true);
  1246. pdfViewControl.PDFView?.Zoom(newZoom);
  1247. }
  1248. private void CommandBinding_Executed_ScaleSubtract(object sender, ExecutedRoutedEventArgs e)
  1249. {
  1250. double newZoom = CheckZoomLevel(pdfViewControl.PDFView.ZoomFactor - 0.01, false);
  1251. pdfViewControl.PDFView?.Zoom(newZoom);
  1252. }
  1253. private void CommandBinding_Executed_DisplaySettings(object sender, ExecutedRoutedEventArgs e)
  1254. {
  1255. ViewSettingBtn.IsChecked = !ViewSettingBtn.IsChecked;
  1256. ShowViewSettings();
  1257. }
  1258. private void CommandBinding_Executed_DocumentInfo(object sender, ExecutedRoutedEventArgs e)
  1259. {
  1260. if (PopupBorder.Visibility != Visibility.Visible)
  1261. {
  1262. PasswordUI.Visibility = Visibility.Collapsed;
  1263. FileInfoUI.Visibility = Visibility.Visible;
  1264. FileInfoControl.InitWithPDFViewer(pdfViewControl.PDFView);
  1265. PopupBorder.Visibility = Visibility.Visible;
  1266. }
  1267. else
  1268. {
  1269. FileInfoUI.Visibility = Visibility.Collapsed;
  1270. PopupBorder.Visibility = Visibility.Collapsed;
  1271. }
  1272. }
  1273. #endregion
  1274. }
  1275. }