MainPage.xaml.cs 65 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565
  1. using ComPDFKit.PDFDocument;
  2. using ComPDFKit.PDFPage;
  3. using ComPDFKit.PDFPage.Edit;
  4. using Compdfkit_Tools.Data;
  5. using Compdfkit_Tools.Edit;
  6. using Compdfkit_Tools.Helper;
  7. using Compdfkit_Tools.PDFControl;
  8. using ComPDFKitViewer;
  9. using ComPDFKitViewer.AnnotEvent;
  10. using ComPDFKitViewer.PdfViewer;
  11. using Microsoft.Win32;
  12. using System;
  13. using System.Collections.Generic;
  14. using System.ComponentModel;
  15. using System.Diagnostics;
  16. using System.Drawing;
  17. using System.IO;
  18. using System.Linq;
  19. using System.Runtime.CompilerServices;
  20. using System.Text;
  21. using System.Threading.Tasks;
  22. using System.Windows;
  23. using System.Windows.Controls;
  24. using System.Windows.Controls.Primitives;
  25. using System.Windows.Data;
  26. using System.Windows.Documents;
  27. using System.Windows.Input;
  28. using System.Windows.Media;
  29. using System.Windows.Media.Imaging;
  30. using System.Windows.Navigation;
  31. using Path = System.IO.Path;
  32. namespace PDFViewer
  33. {
  34. public partial class MainPage : UserControl, INotifyPropertyChanged
  35. {
  36. #region Property
  37. private bool isFirstLoad = true;
  38. private string currentMode = "Viewer";
  39. private PDFViewControl passwordViewer;
  40. private PDFViewControl pdfViewControl = new PDFViewControl();
  41. private CPDFAnnotationControl pdfAnnotationControl = null;
  42. private UIElement pdfEditControl = null;
  43. private CPDFPageEditControl pageEditControl = null;
  44. private FromPropertyControl pdfFormControl = new FromPropertyControl();
  45. private PDFImageEditControl imageEditControl = null;
  46. private CPDFDisplaySettingsControl displayPanel = null;
  47. private double[] zoomLevelList = { 1f, 8f, 12f, 25, 33f, 50, 66f, 75, 100, 125, 150, 200, 300, 400, 600, 800, 1000 };
  48. public bool CanSave
  49. {
  50. get
  51. {
  52. if (pdfViewControl != null && pdfViewControl.PDFView != null)
  53. {
  54. return pdfViewControl.PDFView.UndoManager.CanSave;
  55. }
  56. return false;
  57. }
  58. }
  59. public bool CanUndo
  60. {
  61. get
  62. {
  63. if (pdfViewControl != null && pdfViewControl.PDFView != null)
  64. {
  65. return pdfViewControl.PDFView.UndoManager.CanUndo;
  66. }
  67. return false;
  68. }
  69. }
  70. public bool CanRedo
  71. {
  72. get
  73. {
  74. if (pdfViewControl != null && pdfViewControl.PDFView != null)
  75. {
  76. return pdfViewControl.PDFView.UndoManager.CanRedo;
  77. }
  78. return false;
  79. }
  80. }
  81. private PDFEditEvent lastPDFEditEvent = null;
  82. public event Func<string[], bool> CheckExistBeforeOpenFileEvent;
  83. public event PropertyChangedEventHandler PropertyChanged;
  84. public event EventHandler FileChangeEvent;
  85. private PDFEditEvent pdfTextCreateParam;
  86. private PDFTextEditControl textEditControl = new PDFTextEditControl();
  87. #endregion
  88. public MainPage()
  89. {
  90. InitializeComponent();
  91. DataContext = this;
  92. if (pdfFormControl != null)
  93. {
  94. pdfFormControl = new FromPropertyControl();
  95. }
  96. }
  97. #region Initial Load Unload
  98. public void InitialPDFViewControl(PDFViewControl newPDFViewer)
  99. {
  100. pdfAnnotationControl.SetPDFViewer(newPDFViewer.PDFView);
  101. FormBarControl.InitWithPDFViewer(newPDFViewer.PDFView, pdfFormControl);
  102. pdfFormControl.SetPDFViewer(newPDFViewer.PDFView);
  103. pdfAnnotationControl.AnnotationCancel();
  104. AnnotationBarControl.ClearAllToolState();
  105. ExpandRightPropertyPanel(null, Visibility.Collapsed);
  106. newPDFViewer.PDFView.WidgetClickHandler += PDFView_WidgetClickHandler;
  107. newPDFViewer.CustomSignHandle = true;
  108. }
  109. private void UserControl_Loaded(object sender, RoutedEventArgs e)
  110. {
  111. pdfAnnotationControl = new CPDFAnnotationControl();
  112. BotaSideTool.AddBOTAContent(BOTATools.Thumbnail | BOTATools.Outline | BOTATools.Bookmark | BOTATools.Search | BOTATools.Annotation);
  113. LoadDocument();
  114. }
  115. public void SetPDFViewer(PDFViewControl newPdfViewer)
  116. {
  117. if (newPdfViewer != null)
  118. {
  119. pdfViewControl = newPdfViewer;
  120. }
  121. }
  122. private void CPDFTitleBarControl_Loaded(object sender, RoutedEventArgs e)
  123. {
  124. CPDFTitleBarControl.OpenFileEvent -= CPDFTitleBarControl_OpenFileEvent;
  125. CPDFTitleBarControl.OpenFileEvent += CPDFTitleBarControl_OpenFileEvent;
  126. CPDFTitleBarControl.SaveAsFileEvent -= CPDFTitleBarControl_SaveAsFileEvent;
  127. CPDFTitleBarControl.SaveAsFileEvent += CPDFTitleBarControl_SaveAsFileEvent;
  128. CPDFTitleBarControl.SaveFileEvent -= CPDFTitleBarControl_SaveFileEvent;
  129. CPDFTitleBarControl.SaveFileEvent += CPDFTitleBarControl_SaveFileEvent; ;
  130. }
  131. private void AnnotationBarControl_Unloaded(object sender, RoutedEventArgs e)
  132. {
  133. AnnotationBarControl.AnnotationPropertyChanged -= AnnotationBarControl_AnnotationPropertyChanged;
  134. AnnotationBarControl.AnnotationCancel -= AnnotationBarControl_AnnotationCancel;
  135. }
  136. private void AnnotationBarControl_Loaded(object sender, RoutedEventArgs e)
  137. {
  138. CPDFAnnotationType[] annotationProperties = { CPDFAnnotationType.Highlight, CPDFAnnotationType.Underline, CPDFAnnotationType.Strikeout, CPDFAnnotationType.Squiggly, CPDFAnnotationType.Freehand, CPDFAnnotationType.FreeText, CPDFAnnotationType.Note, CPDFAnnotationType.Circle, CPDFAnnotationType.Square, CPDFAnnotationType.Arrow, CPDFAnnotationType.Line, CPDFAnnotationType.Image, CPDFAnnotationType.Stamp, CPDFAnnotationType.Signature, CPDFAnnotationType.Link, CPDFAnnotationType.Audio };
  139. AnnotationBarControl.InitAnnotationBar(annotationProperties);
  140. AnnotationBarControl.AnnotationPropertyChanged += AnnotationBarControl_AnnotationPropertyChanged;
  141. AnnotationBarControl.AnnotationCancel += AnnotationBarControl_AnnotationCancel;
  142. }
  143. #endregion
  144. #region UI
  145. /// <summary>
  146. /// InfoChanged
  147. /// When the PDF zoom ratio changes, the value of the zoom control also changes.
  148. /// </summary>
  149. private void PdfViewer_InfoChanged(object sender, KeyValuePair<string, object> e)
  150. {
  151. if (e.Key == "Zoom")
  152. {
  153. CPDFSaclingControl.SetZoomTextBoxText(string.Format("{0}", (int)((double)e.Value * 100)));
  154. }
  155. }
  156. private void EditLink_Click(object sender, RoutedEventArgs e)
  157. {
  158. RightPanelButton.IsChecked = true;
  159. PropertyContainer.Visibility = Visibility.Visible;
  160. }
  161. private double CheckZoomLevel(double zoom, bool IsGrowth)
  162. {
  163. double standardZoom = 100;
  164. if (zoom <= 0.01)
  165. {
  166. return 0.01;
  167. }
  168. if (zoom >= 10)
  169. {
  170. return 10;
  171. }
  172. zoom *= 100;
  173. for (int i = 0; i < zoomLevelList.Length - 1; i++)
  174. {
  175. if (zoom > zoomLevelList[i] && zoom <= zoomLevelList[i + 1] && IsGrowth)
  176. {
  177. standardZoom = zoomLevelList[i + 1];
  178. break;
  179. }
  180. if (zoom >= zoomLevelList[i] && zoom < zoomLevelList[i + 1] && !IsGrowth)
  181. {
  182. standardZoom = zoomLevelList[i];
  183. break;
  184. }
  185. }
  186. return standardZoom / 100;
  187. }
  188. private void PDFView_AnnotEditHandler(object sender, List<ComPDFKitViewer.AnnotEvent.AnnotEditEvent> e)
  189. {
  190. BotaSideTool.LoadAnnotationList();
  191. }
  192. private void UndoManager_PropertyChanged(object sender, PropertyChangedEventArgs e)
  193. {
  194. OnPropertyChanged(e.PropertyName);
  195. }
  196. private void PasswordUI_Closed(object sender, EventArgs e)
  197. {
  198. PopupBorder.Visibility = Visibility.Collapsed;
  199. PasswordUI.Visibility = Visibility.Collapsed;
  200. }
  201. private void PasswordUI_Canceled(object sender, EventArgs e)
  202. {
  203. PopupBorder.Visibility = Visibility.Collapsed;
  204. PasswordUI.Visibility = Visibility.Collapsed;
  205. }
  206. private void PasswordUI_Confirmed(object sender, string e)
  207. {
  208. if (passwordViewer != null && passwordViewer.PDFView != null && passwordViewer.PDFView.Document != null)
  209. {
  210. passwordViewer.PDFView.Document.UnlockWithPassword(e);
  211. if (passwordViewer.PDFView.Document.IsLocked == false)
  212. {
  213. PasswordUI.SetShowError("", Visibility.Collapsed);
  214. PasswordUI.ClearPassword();
  215. PasswordUI.Visibility = Visibility.Collapsed;
  216. PopupBorder.Visibility = Visibility.Collapsed;
  217. pdfViewControl = passwordViewer;
  218. LoadDocument();
  219. FileChangeEvent?.Invoke(null, EventArgs.Empty);
  220. }
  221. else
  222. {
  223. PasswordUI.SetShowError("error", Visibility.Visible);
  224. }
  225. }
  226. }
  227. private void SaveFileBtn_Click(object sender, RoutedEventArgs e)
  228. {
  229. SaveFile();
  230. }
  231. private void PageView_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
  232. {
  233. UIElement pageView = sender as UIElement;
  234. if (pageView != null)
  235. {
  236. pageView.MouseLeftButtonUp -= PageView_MouseLeftButtonUp;
  237. }
  238. if (lastPDFEditEvent != null && lastPDFEditEvent.EditType == CPDFEditType.EditImage)
  239. {
  240. if (imageEditControl == null)
  241. {
  242. imageEditControl = new PDFImageEditControl();
  243. }
  244. imageEditControl.InitWithPDFViewer(pdfViewControl.PDFView);
  245. imageEditControl.SetPDFImageEditData(lastPDFEditEvent);
  246. pdfEditControl = imageEditControl as UIElement;
  247. PropertyContainer.Child = pdfEditControl;
  248. }
  249. }
  250. private void PageInfoBtn_Click(object sender, RoutedEventArgs e)
  251. {
  252. PasswordUI.Visibility = Visibility.Collapsed;
  253. FileInfoUI.Visibility = Visibility.Visible;
  254. FileInfoControl.InitWithPDFViewer(pdfViewControl.PDFView);
  255. PopupBorder.Visibility = Visibility.Visible;
  256. }
  257. private void FileInfoCloseBtn_Click(object sender, RoutedEventArgs e)
  258. {
  259. PopupBorder.Visibility = Visibility.Collapsed;
  260. }
  261. private void PDFTextEditButton_Click(object sender, RoutedEventArgs e)
  262. {
  263. ToggleButton senderBtn = sender as ToggleButton;
  264. if (senderBtn != null && pdfViewControl != null)
  265. {
  266. ClearPDFEditState(senderBtn);
  267. if (senderBtn.IsChecked == true)
  268. {
  269. pdfViewControl.PDFView?.SetMouseMode(MouseModes.PanTool);
  270. pdfViewControl.PDFView?.SetPDFEditType(CPDFEditType.EditText);
  271. pdfViewControl.PDFView?.SetPDFEditCreateType(CPDFEditType.EditText);
  272. pdfViewControl.PDFView?.SetMouseMode(MouseModes.PDFEdit);
  273. pdfViewControl.PDFView?.ReloadDocument();
  274. PDFEditEvent createParam = new PDFEditEvent();
  275. createParam.EditType = CPDFEditType.EditText;
  276. createParam.IsBold = false;
  277. createParam.IsItalic = false;
  278. createParam.FontSize = 14;
  279. createParam.FontName = "Helvetica";
  280. createParam.FontColor = Colors.Black;
  281. createParam.TextAlign = TextAlignType.AlignLeft;
  282. createParam.Transparency = 255;
  283. pdfViewControl.PDFView?.SetPDFEditParam(createParam);
  284. if (textEditControl == null)
  285. {
  286. textEditControl = new PDFTextEditControl();
  287. }
  288. textEditControl.SetPDFTextEditData(createParam);
  289. ExpandRightPropertyPanel(textEditControl, Visibility.Visible);
  290. if ((bool)ViewSettingBtn.IsChecked)
  291. {
  292. ViewSettingBtn.IsChecked = false;
  293. }
  294. pdfTextCreateParam = createParam;
  295. }
  296. else
  297. {
  298. pdfViewControl.PDFView?.SetPDFEditCreateType(CPDFEditType.None);
  299. pdfViewControl.PDFView?.SetPDFEditType(CPDFEditType.EditImage | CPDFEditType.EditText);
  300. pdfViewControl.PDFView?.SetMouseMode(MouseModes.PDFEdit);
  301. pdfViewControl.PDFView?.ReloadDocument();
  302. LeftToolPanelButton.IsChecked = false;
  303. if ((bool)ViewSettingBtn.IsChecked)
  304. {
  305. return;
  306. }
  307. ExpandRightPropertyPanel(null, Visibility.Collapsed);
  308. }
  309. }
  310. }
  311. private void PDFImageEditButton_Click(object sender, RoutedEventArgs e)
  312. {
  313. ToggleButton senderBtn = sender as ToggleButton;
  314. if (senderBtn != null && pdfViewControl != null)
  315. {
  316. senderBtn.IsChecked = false;
  317. OpenFileDialog openFileDialog = new OpenFileDialog();
  318. openFileDialog.Filter = "Image Files(*.jpg;*.jpeg;*.png;*.bmp)|*.jpg;*.jpeg;*.png;*.bmp;";
  319. if (openFileDialog.ShowDialog() == true)
  320. {
  321. ClearPDFEditState(senderBtn);
  322. pdfViewControl.PDFView?.ClearSelectPDFEdit();
  323. pdfViewControl.PDFView?.SetPDFEditType(CPDFEditType.EditImage | CPDFEditType.EditText);
  324. pdfViewControl.PDFView?.SetMouseMode(MouseModes.PDFEdit);
  325. pdfViewControl.PDFView?.ReloadDocument();
  326. RightPanelButton.IsChecked = false;
  327. if (PropertyContainer.Child != null && !(bool)ViewSettingBtn.IsChecked)
  328. {
  329. ExpandRightPropertyPanel(null, Visibility.Collapsed);
  330. }
  331. pdfViewControl.PDFView?.SetPDFEditCreateType(CPDFEditType.EditImage);
  332. pdfViewControl.PDFView?.AddPDFEditImage(openFileDialog.FileName);
  333. }
  334. }
  335. }
  336. private void UndoBtn_Click(object sender, RoutedEventArgs e)
  337. {
  338. if (pdfViewControl != null && pdfViewControl.PDFView != null)
  339. {
  340. pdfViewControl.PDFView.UndoManager?.Undo();
  341. }
  342. }
  343. private void RedoBtn_Click(object sender, RoutedEventArgs e)
  344. {
  345. if (pdfViewControl != null && pdfViewControl.PDFView != null)
  346. {
  347. pdfViewControl.PDFView.UndoManager?.Redo();
  348. }
  349. }
  350. private void ClearPDFEditState(ToggleButton ignoreBtn = null)
  351. {
  352. List<ToggleButton> clearBtnList = new List<ToggleButton>()
  353. {
  354. PDFTextEditButton,
  355. PDFImageEditButton
  356. };
  357. foreach (ToggleButton item in clearBtnList)
  358. {
  359. if (ignoreBtn == item)
  360. {
  361. continue;
  362. }
  363. item.IsChecked = false;
  364. }
  365. }
  366. private void PdfAnnotationControl_ClearAnnotationBar(object sender, EventArgs e)
  367. {
  368. AnnotationBarControl.ClearAllToolState();
  369. }
  370. private void AnnotationBarControl_AnnotationCancel(object sender, EventArgs e)
  371. {
  372. pdfAnnotationControl.AnnotationCancel();
  373. ExpandRightPropertyPanel(null, Visibility.Collapsed);
  374. RightPanelButton.IsChecked = false;
  375. ViewSettingBtn.IsChecked = false;
  376. }
  377. #endregion
  378. #region ContextMenu
  379. /// <summary>
  380. /// Annotation Context menu
  381. /// </summary>
  382. private void PDFView_AnnotCommandHandler(object sender, ComPDFKitViewer.AnnotEvent.AnnotCommandArgs e)
  383. {
  384. switch (e.CommandType)
  385. {
  386. case CommandType.Context:
  387. e.Handle = true;
  388. if (e.CommandTarget == TargetType.Annot)
  389. {
  390. e.Handle = true;
  391. e.PopupMenu = new ContextMenu();
  392. if (e.PressOnLink && AnnotationBarControl.CurrentMode == "Link")
  393. {
  394. e.PopupMenu.Items.Add(new MenuItem() { Header = "Delete", Command = ApplicationCommands.Delete, CommandTarget = (UIElement)sender });
  395. MenuItem propertyMenu = new MenuItem();
  396. propertyMenu = new MenuItem();
  397. propertyMenu.Header = "Edit";
  398. WeakEventManager<MenuItem, RoutedEventArgs>.AddHandler(propertyMenu, "Click", EditLink_Click);
  399. propertyMenu.CommandParameter = e;
  400. e.PopupMenu.Items.Add(propertyMenu);
  401. }
  402. else if (e.PressOnAnnot)
  403. {
  404. e.PopupMenu.Items.Add(new MenuItem() { Header = "Delete", Command = ApplicationCommands.Delete, CommandTarget = (UIElement)sender });
  405. e.PopupMenu.Items.Add(new MenuItem() { Header = "Copy", Command = ApplicationCommands.Copy, CommandTarget = (UIElement)sender });
  406. e.PopupMenu.Items.Add(new MenuItem() { Header = "Cut", Command = ApplicationCommands.Cut, CommandTarget = (UIElement)sender });
  407. }
  408. else if (e.PressOnMedia || e.PressOnSound)
  409. {
  410. e.Handle = true;
  411. e.PopupMenu.Items.Add(new MenuItem() { Header = "Play", Command = MediaCommands.Play, CommandTarget = (UIElement)sender, CommandParameter = e });
  412. e.PopupMenu.Items.Add(new MenuItem() { Header = "Delete", Command = ApplicationCommands.Delete, CommandTarget = (UIElement)sender });
  413. }
  414. else if (e.PressOnSelectedText)
  415. {
  416. e.PopupMenu.Items.Add(new MenuItem() { Header = "Copy", Command = ApplicationCommands.Copy, CommandTarget = (UIElement)sender });
  417. }
  418. else
  419. {
  420. e.Handle = true;
  421. e.PopupMenu = new ContextMenu();
  422. if (currentMode == "Annotations")
  423. {
  424. e.PopupMenu.Items.Add(new MenuItem() { Header = "Paste", Command = ApplicationCommands.Paste, CommandTarget = (UIElement)sender });
  425. e.PopupMenu.Items.Add(new Separator());
  426. }
  427. MenuItem fitWidthMenu = new MenuItem();
  428. fitWidthMenu.Header = "Automatically Resize";
  429. fitWidthMenu.Click += (o, p) =>
  430. {
  431. if (pdfViewControl != null)
  432. {
  433. pdfViewControl.PDFView?.ChangeFitMode(FitMode.FitWidth);
  434. }
  435. };
  436. e.PopupMenu.Items.Add(fitWidthMenu);
  437. MenuItem fitSizeMenu = new MenuItem();
  438. fitSizeMenu.Header = "Actual Size";
  439. fitSizeMenu.Click += (o, p) =>
  440. {
  441. if (pdfViewControl != null)
  442. {
  443. pdfViewControl.PDFView?.ChangeFitMode(FitMode.FitSize);
  444. }
  445. };
  446. e.PopupMenu.Items.Add(fitSizeMenu);
  447. MenuItem zoomInMenu = new MenuItem();
  448. zoomInMenu.Header = "Zoom In";
  449. zoomInMenu.Click += (o, p) =>
  450. {
  451. if (pdfViewControl != null)
  452. {
  453. double newZoom = CheckZoomLevel(pdfViewControl.PDFView.ZoomFactor + 0.01, true);
  454. pdfViewControl.PDFView?.Zoom(newZoom);
  455. }
  456. };
  457. e.PopupMenu.Items.Add(zoomInMenu);
  458. MenuItem zoomOutMenu = new MenuItem();
  459. zoomOutMenu.Header = "Zoom Out";
  460. zoomOutMenu.Click += (o, p) =>
  461. {
  462. if (pdfViewControl != null)
  463. {
  464. double newZoom = CheckZoomLevel(pdfViewControl.PDFView.ZoomFactor - 0.01, false);
  465. pdfViewControl.PDFView?.Zoom(newZoom);
  466. }
  467. };
  468. e.PopupMenu.Items.Add(zoomOutMenu);
  469. e.PopupMenu.Items.Add(new Separator());
  470. MenuItem singleView = new MenuItem();
  471. singleView.Header = "Single Page";
  472. singleView.Click += (o, p) =>
  473. {
  474. if (pdfViewControl != null)
  475. {
  476. pdfViewControl.PDFView?.ChangeViewMode(ViewMode.Single);
  477. }
  478. };
  479. e.PopupMenu.Items.Add(singleView);
  480. MenuItem singleContinuousView = new MenuItem();
  481. singleContinuousView.Header = "Single Page Continuous";
  482. singleContinuousView.Click += (o, p) =>
  483. {
  484. if (pdfViewControl != null)
  485. {
  486. pdfViewControl.PDFView?.ChangeViewMode(ViewMode.SingleContinuous);
  487. }
  488. };
  489. e.PopupMenu.Items.Add(singleContinuousView);
  490. MenuItem doubleView = new MenuItem();
  491. doubleView.Header = "Two Pages";
  492. doubleView.Click += (o, p) =>
  493. {
  494. if (pdfViewControl != null)
  495. {
  496. pdfViewControl.PDFView?.ChangeViewMode(ViewMode.Double);
  497. }
  498. };
  499. e.PopupMenu.Items.Add(doubleView);
  500. MenuItem doubleContinuousView = new MenuItem();
  501. doubleContinuousView.Header = "Two Pages Continuous";
  502. doubleContinuousView.Click += (o, p) =>
  503. {
  504. if (pdfViewControl != null)
  505. {
  506. pdfViewControl.PDFView?.ChangeViewMode(ViewMode.DoubleContinuous);
  507. }
  508. };
  509. e.PopupMenu.Items.Add(doubleContinuousView);
  510. }
  511. }
  512. else if (e.CommandTarget == TargetType.ImageSelection)
  513. {
  514. if (pdfViewControl != null && pdfViewControl.PDFView != null && pdfViewControl.PDFView.GetSelectImageCount() > 0)
  515. {
  516. e.Handle = true;
  517. e.PopupMenu = new ContextMenu();
  518. MenuItem imageCopyMenu = new MenuItem();
  519. imageCopyMenu = new MenuItem();
  520. imageCopyMenu.Header = "Copy Images";
  521. WeakEventManager<MenuItem, RoutedEventArgs>.AddHandler(imageCopyMenu, "Click", CopyImage_Click);
  522. imageCopyMenu.CommandParameter = e;
  523. e.PopupMenu.Items.Add(imageCopyMenu);
  524. MenuItem imageExtraMenu = new MenuItem();
  525. imageExtraMenu = new MenuItem();
  526. imageExtraMenu.Header = "Extract Images";
  527. WeakEventManager<MenuItem, RoutedEventArgs>.AddHandler(imageExtraMenu, "Click", ExtraImage_Click);
  528. imageExtraMenu.CommandParameter = e;
  529. e.PopupMenu.Items.Add(imageExtraMenu);
  530. }
  531. }
  532. break;
  533. case CommandType.Copy:
  534. e.DoCommand();
  535. break;
  536. case CommandType.Cut:
  537. case CommandType.Paste:
  538. case CommandType.Delete:
  539. e.DoCommand();
  540. break;
  541. default:
  542. break;
  543. }
  544. }
  545. /// <summary>
  546. /// TextEdit context menu.
  547. /// </summary>
  548. private void PDFEditTextContextMenu(object sender, PDFEditCommand editCommand)
  549. {
  550. editCommand.PopupMenu = new ContextMenu();
  551. if (lastPDFEditEvent != null)
  552. {
  553. editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "Copy", Command = ApplicationCommands.Copy, CommandTarget = (UIElement)sender });
  554. editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "Cut", Command = ApplicationCommands.Cut, CommandTarget = (UIElement)sender });
  555. editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "Delete", Command = ApplicationCommands.Delete, CommandTarget = (UIElement)sender });
  556. editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "Paste", Command = ApplicationCommands.Paste, CommandTarget = (UIElement)sender });
  557. }
  558. else
  559. {
  560. editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "Paste", Command = ApplicationCommands.Paste, CommandTarget = (UIElement)sender });
  561. if (editCommand.TextAreaCopied)
  562. {
  563. editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "Paste And Match Style", Command = CustomCommands.PasteMatchStyle, CommandTarget = (UIElement)sender });
  564. }
  565. }
  566. }
  567. /// <summary>
  568. /// ImageEdit right-click menu.
  569. /// </summary>
  570. private void PDFEditImageContextMenu(object sender, PDFEditCommand editCommand)
  571. {
  572. editCommand.PopupMenu = new ContextMenu();
  573. if (lastPDFEditEvent != null)
  574. {
  575. MenuItem rotateLeftMenu = new MenuItem();
  576. rotateLeftMenu.Header = "Left Rotate";
  577. rotateLeftMenu.Click += (o, p) =>
  578. {
  579. if (lastPDFEditEvent != null && lastPDFEditEvent.EditType == CPDFEditType.EditImage)
  580. {
  581. lastPDFEditEvent.Rotate = -90;
  582. lastPDFEditEvent.UpdatePDFEditByEventArgs();
  583. imageEditControl?.SetImageThumb();
  584. }
  585. };
  586. editCommand.PopupMenu.Items.Add(rotateLeftMenu);
  587. MenuItem rotateRightMenu = new MenuItem();
  588. rotateRightMenu.Header = "Right Rotate";
  589. rotateRightMenu.Click += (o, p) =>
  590. {
  591. if (lastPDFEditEvent != null && lastPDFEditEvent.EditType == CPDFEditType.EditImage)
  592. {
  593. lastPDFEditEvent.Rotate = 90;
  594. lastPDFEditEvent.UpdatePDFEditByEventArgs();
  595. imageEditControl?.SetImageThumb();
  596. }
  597. };
  598. editCommand.PopupMenu.Items.Add(rotateRightMenu);
  599. MenuItem replaceMenu = new MenuItem();
  600. replaceMenu.Header = "Replace";
  601. replaceMenu.Click += (o, p) =>
  602. {
  603. if (lastPDFEditEvent != null && lastPDFEditEvent.EditType == CPDFEditType.EditImage)
  604. {
  605. OpenFileDialog openFileDialog = new OpenFileDialog();
  606. openFileDialog.Filter = "Image Files(*.jpg;*.jpeg;*.png;*.bmp)|*.jpg;*.jpeg;*.png;*.bmp;";
  607. if (openFileDialog.ShowDialog() == true)
  608. {
  609. lastPDFEditEvent.ReplaceImagePath = openFileDialog.FileName;
  610. lastPDFEditEvent.UpdatePDFEditByEventArgs();
  611. pdfViewControl.PDFView?.ClearSelectPDFEdit();
  612. imageEditControl?.SetImageThumb();
  613. }
  614. }
  615. };
  616. editCommand.PopupMenu.Items.Add(replaceMenu);
  617. MenuItem exportMenu = new MenuItem();
  618. exportMenu.Header = "Export";
  619. exportMenu.Click += (o, p) =>
  620. {
  621. if (pdfViewControl != null && pdfViewControl.PDFView != null)
  622. {
  623. Dictionary<int, List<Bitmap>> imageDict = pdfViewControl.PDFView.GetSelectedImages();
  624. if (imageDict != null && imageDict.Count > 0)
  625. {
  626. System.Windows.Forms.FolderBrowserDialog folderBrowser = new System.Windows.Forms.FolderBrowserDialog();
  627. if (folderBrowser.ShowDialog() == System.Windows.Forms.DialogResult.OK)
  628. {
  629. string choosePath = folderBrowser.SelectedPath;
  630. string openPath = choosePath;
  631. foreach (int pageIndex in imageDict.Keys)
  632. {
  633. List<Bitmap> imageList = imageDict[pageIndex];
  634. foreach (Bitmap image in imageList)
  635. {
  636. string savePath = System.IO.Path.Combine(choosePath, Guid.NewGuid() + ".jpg");
  637. image.Save(savePath, System.Drawing.Imaging.ImageFormat.Jpeg);
  638. openPath = savePath;
  639. }
  640. }
  641. Process.Start("explorer", "/select,\"" + openPath + "\"");
  642. }
  643. }
  644. }
  645. };
  646. editCommand.PopupMenu.Items.Add(exportMenu);
  647. MenuItem opacityMenu = new MenuItem();
  648. opacityMenu.Header = "Opacity";
  649. editCommand.PopupMenu.Items.Add(opacityMenu);
  650. AppendOpacityMenu(opacityMenu);
  651. MenuItem horizonMirror = new MenuItem();
  652. horizonMirror.Header = "HMirror";
  653. horizonMirror.Click += (o, p) =>
  654. {
  655. if (lastPDFEditEvent != null && lastPDFEditEvent.EditType == CPDFEditType.EditImage)
  656. {
  657. lastPDFEditEvent.HorizontalMirror = true;
  658. lastPDFEditEvent.UpdatePDFEditByEventArgs();
  659. }
  660. };
  661. editCommand.PopupMenu.Items.Add(horizonMirror);
  662. MenuItem verticalMirror = new MenuItem();
  663. verticalMirror.Header = "VMirror";
  664. verticalMirror.Click += (o, p) =>
  665. {
  666. if (lastPDFEditEvent != null && lastPDFEditEvent.EditType == CPDFEditType.EditImage)
  667. {
  668. lastPDFEditEvent.VerticalMirror = true;
  669. lastPDFEditEvent.UpdatePDFEditByEventArgs();
  670. }
  671. };
  672. editCommand.PopupMenu.Items.Add(verticalMirror);
  673. MenuItem cropMenu = new MenuItem();
  674. cropMenu.Header = "Crop";
  675. cropMenu.Click += (o, p) =>
  676. {
  677. if (lastPDFEditEvent != null && lastPDFEditEvent.EditType == CPDFEditType.EditImage)
  678. {
  679. lastPDFEditEvent.ClipImage = true;
  680. lastPDFEditEvent.UpdatePDFEditByEventArgs();
  681. }
  682. };
  683. editCommand.PopupMenu.Items.Add(cropMenu);
  684. editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "Copy", Command = ApplicationCommands.Copy, CommandTarget = (UIElement)sender });
  685. editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "Cut", Command = ApplicationCommands.Cut, CommandTarget = (UIElement)sender });
  686. editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "Delete", Command = ApplicationCommands.Delete, CommandTarget = (UIElement)sender });
  687. editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "Paste", Command = ApplicationCommands.Paste, CommandTarget = (UIElement)sender });
  688. }
  689. else
  690. {
  691. editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "Paste", Command = ApplicationCommands.Paste, CommandTarget = (UIElement)sender });
  692. }
  693. }
  694. /// <summary>
  695. /// ImageEdit transparency submenu.
  696. /// </summary>
  697. private void AppendOpacityMenu(MenuItem parentMenu)
  698. {
  699. List<int> opacityList = new List<int>()
  700. {
  701. 25,50,75,100
  702. };
  703. foreach (int opacity in opacityList)
  704. {
  705. MenuItem opacityMenu = new MenuItem();
  706. opacityMenu.Header = string.Format("{0}%", opacity);
  707. opacityMenu.Click += (o, p) =>
  708. {
  709. if (lastPDFEditEvent != null && lastPDFEditEvent.EditType == CPDFEditType.EditImage)
  710. {
  711. lastPDFEditEvent.Transparency = (int)Math.Ceiling(opacity * 255 / 100D);
  712. lastPDFEditEvent.UpdatePDFEditByEventArgs();
  713. }
  714. };
  715. parentMenu.Items.Add(opacityMenu);
  716. }
  717. }
  718. private void ExtraImage_Click(object sender, RoutedEventArgs e)
  719. {
  720. System.Windows.Forms.FolderBrowserDialog folderDialog = new System.Windows.Forms.FolderBrowserDialog();
  721. if (folderDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
  722. {
  723. string choosePath = folderDialog.SelectedPath;
  724. string openPath = choosePath;
  725. Dictionary<int, List<Bitmap>> imageDict = pdfViewControl.PDFView?.GetSelectedImages();
  726. if (imageDict != null && imageDict.Count > 0)
  727. {
  728. foreach (int pageIndex in imageDict.Keys)
  729. {
  730. List<Bitmap> imageList = imageDict[pageIndex];
  731. foreach (Bitmap image in imageList)
  732. {
  733. string savePath = Path.Combine(choosePath, Guid.NewGuid() + ".jpg");
  734. image.Save(savePath, System.Drawing.Imaging.ImageFormat.Jpeg);
  735. openPath = savePath;
  736. }
  737. }
  738. }
  739. Process.Start("explorer", "/select,\"" + openPath + "\"");
  740. }
  741. }
  742. private void CopyImage_Click(object sender, RoutedEventArgs e)
  743. {
  744. Dictionary<int, List<Bitmap>> imageDict = pdfViewControl.PDFView?.GetSelectedImages();
  745. if (imageDict != null && imageDict.Count > 0)
  746. {
  747. foreach (int pageIndex in imageDict.Keys)
  748. {
  749. List<Bitmap> imageList = imageDict[pageIndex];
  750. foreach (Bitmap image in imageList)
  751. {
  752. MemoryStream ms = new MemoryStream();
  753. image.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
  754. BitmapImage imageData = new BitmapImage();
  755. imageData.BeginInit();
  756. imageData.StreamSource = ms;
  757. imageData.CacheOption = BitmapCacheOption.OnLoad;
  758. imageData.EndInit();
  759. imageData.Freeze();
  760. Clipboard.SetImage(imageData);
  761. break;
  762. }
  763. }
  764. }
  765. }
  766. #endregion
  767. #region Property changed
  768. protected void OnPropertyChanged([CallerMemberName] string name = null)
  769. {
  770. PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
  771. }
  772. #endregion
  773. #region Open and save file
  774. public void InitWithFilePath(string filePath)
  775. {
  776. pdfViewControl = new PDFViewControl();
  777. pdfViewControl.PDFView.InitDocument(filePath);
  778. }
  779. private void LoadDocument()
  780. {
  781. //Load the Document
  782. pdfViewControl.PDFView?.Load();
  783. //Highlight the link annotation
  784. pdfViewControl.PDFView?.SetShowLink(true);
  785. //Add PDFViewControl to PDFGrid
  786. PDFGrid.Child = pdfViewControl;
  787. // Register the InfoChanged event handler,
  788. // which is used to notify the CPDFScalingControl of real-time changes in the displayed number when the page size changes.
  789. pdfViewControl.PDFView.InfoChanged -= PdfViewer_InfoChanged;
  790. pdfViewControl.PDFView.InfoChanged += PdfViewer_InfoChanged;
  791. //
  792. pdfViewControl.PDFView.PDFEditCommandHandler -= PDFView_PDFEditCommandHandler;
  793. pdfViewControl.PDFView.PDFEditCommandHandler += PDFView_PDFEditCommandHandler;
  794. pdfViewControl.PDFView.AnnotCommandHandler -= PDFView_AnnotCommandHandler;
  795. pdfViewControl.PDFView.AnnotCommandHandler += PDFView_AnnotCommandHandler;
  796. pdfViewControl.PDFView.UndoManager.PropertyChanged -= UndoManager_PropertyChanged;
  797. pdfViewControl.PDFView.UndoManager.PropertyChanged += UndoManager_PropertyChanged;
  798. pdfViewControl.PDFView.SetFormFieldHighlight(true);
  799. PasswordUI.Closed -= PasswordUI_Closed;
  800. PasswordUI.Canceled -= PasswordUI_Canceled;
  801. PasswordUI.Confirmed -= PasswordUI_Confirmed;
  802. PasswordUI.Confirmed += PasswordUI_Confirmed;
  803. PasswordUI.Canceled += PasswordUI_Canceled;
  804. PasswordUI.Closed += PasswordUI_Closed;
  805. pdfViewControl.PDFView.ChangeFitMode(FitMode.FitWidth);
  806. CPDFSaclingControl.InitWithPDFViewer(pdfViewControl.PDFView);
  807. CPDFSaclingControl.SetZoomTextBoxText(string.Format("{0}", (int)(pdfViewControl.PDFView.ZoomFactor * 100)));
  808. InitialPDFViewControl(pdfViewControl);
  809. pdfViewControl.PDFView.SetMouseMode(MouseModes.Viewer);
  810. FloatPageTool.InitWithPDFViewer(pdfViewControl.PDFView);
  811. BotaSideTool.InitWithPDFViewer(pdfViewControl.PDFView);
  812. BotaSideTool.SelectBotaTool(BOTATools.Thumbnail);
  813. ViewSettingBtn.IsChecked = false;
  814. PropertyContainer.Child = null;
  815. PropertyContainer.Visibility = Visibility.Collapsed;
  816. ModeComboBox.SelectedIndex = 0;
  817. }
  818. /// <summary>
  819. /// Save the file to another PDF file.
  820. /// </summary>
  821. public void SaveAsFile()
  822. {
  823. {
  824. if (pdfViewControl != null && pdfViewControl.PDFView != null && pdfViewControl.PDFView.Document != null)
  825. {
  826. CPDFDocument pdfDoc = pdfViewControl.PDFView.Document;
  827. SaveFileDialog saveDialog = new SaveFileDialog();
  828. saveDialog.Filter = "(*.pdf)|*.pdf";
  829. saveDialog.DefaultExt = ".pdf";
  830. saveDialog.OverwritePrompt = true;
  831. if (saveDialog.ShowDialog() == true)
  832. {
  833. pdfDoc.WriteToFilePath(saveDialog.FileName);
  834. }
  835. }
  836. }
  837. }
  838. /// <summary>
  839. /// Save the file in the current path.
  840. /// </summary>
  841. public void SaveFile()
  842. {
  843. if (pdfViewControl != null && pdfViewControl.PDFView != null && pdfViewControl.PDFView.Document != null)
  844. {
  845. CPDFDocument pdfDoc = pdfViewControl.PDFView.Document;
  846. if (pdfDoc.WriteToLoadedPath())
  847. {
  848. pdfViewControl.PDFView.UndoManager.CanSave = false;
  849. return;
  850. }
  851. SaveFileDialog saveDialog = new SaveFileDialog();
  852. saveDialog.Filter = "(*.pdf)|*.pdf";
  853. saveDialog.DefaultExt = ".pdf";
  854. saveDialog.OverwritePrompt = true;
  855. if (saveDialog.ShowDialog() == true)
  856. {
  857. pdfDoc.WriteToFilePath(saveDialog.FileName);
  858. }
  859. }
  860. }
  861. public void OpenFile()
  862. {
  863. string filePath = CommonHelper.GetFilePathOrEmpty();
  864. string oldFilePath = pdfViewControl.PDFView.Document.FilePath;
  865. if (!string.IsNullOrEmpty(filePath) && pdfViewControl != null)
  866. {
  867. if (pdfViewControl.PDFView != null && pdfViewControl.PDFView.Document != null)
  868. {
  869. if (oldFilePath.ToLower() == filePath.ToLower())
  870. {
  871. return;
  872. }
  873. }
  874. if ((bool)CheckExistBeforeOpenFileEvent?.Invoke(new string[] { filePath, oldFilePath }))
  875. {
  876. return;
  877. }
  878. passwordViewer = new PDFViewControl();
  879. passwordViewer.PDFView.InitDocument(filePath);
  880. if (passwordViewer.PDFView.Document == null)
  881. {
  882. MessageBox.Show("Open File Failed");
  883. return;
  884. }
  885. if (passwordViewer.PDFView.Document.IsLocked)
  886. {
  887. PasswordUI.SetShowText(System.IO.Path.GetFileName(filePath) + " password encrypted.");
  888. PasswordUI.ClearPassword();
  889. PopupBorder.Visibility = Visibility.Visible;
  890. PasswordUI.Visibility = Visibility.Visible;
  891. }
  892. else
  893. {
  894. pdfViewControl = passwordViewer;
  895. LoadDocument();
  896. FileChangeEvent?.Invoke(null, EventArgs.Empty);
  897. }
  898. }
  899. }
  900. private void OpenFile_Click(object sender, RoutedEventArgs e)
  901. {
  902. OpenFile();
  903. }
  904. #endregion
  905. #region ToolPanel expand and collapse
  906. private void ExpandLeftPanel(bool isExpand)
  907. {
  908. BotaSideTool.Visibility = isExpand ? Visibility.Visible : Visibility.Collapsed;
  909. Splitter.Visibility = isExpand ? Visibility.Visible : Visibility.Collapsed;
  910. if (isExpand)
  911. {
  912. BodyGrid.ColumnDefinitions[0].Width = new GridLength(320);
  913. BodyGrid.ColumnDefinitions[1].Width = new GridLength(15);
  914. }
  915. else
  916. {
  917. BodyGrid.ColumnDefinitions[0].Width = new GridLength(0);
  918. BodyGrid.ColumnDefinitions[1].Width = new GridLength(0);
  919. }
  920. }
  921. private void LeftToolPanelButton_Click(object sender, RoutedEventArgs e)
  922. {
  923. ToggleButton expandBtn = sender as ToggleButton;
  924. if (expandBtn != null)
  925. {
  926. bool isExpand = expandBtn.IsChecked == true;
  927. ExpandLeftPanel(isExpand);
  928. }
  929. }
  930. private void ExpandSearchBtn_Click(object sender, RoutedEventArgs e)
  931. {
  932. ExpandLeftPanel(true);
  933. LeftToolPanelButton.IsChecked = true;
  934. BotaSideTool.SelectBotaTool(BOTATools.Search);
  935. }
  936. private void ViewSettingBtn_Click(object sender, RoutedEventArgs e)
  937. {
  938. ToggleButton toggleButton = sender as ToggleButton;
  939. if (toggleButton != null)
  940. {
  941. if (toggleButton.IsChecked == true)
  942. {
  943. if (displayPanel == null)
  944. {
  945. displayPanel = new CPDFDisplaySettingsControl();
  946. }
  947. displayPanel.InitWithPDFViewer(pdfViewControl.PDFView);
  948. PropertyContainer.Child = displayPanel;
  949. PropertyContainer.Visibility = Visibility.Visible;
  950. if ((bool)RightPanelButton.IsChecked)
  951. {
  952. RightPanelButton.IsChecked = false;
  953. }
  954. }
  955. else
  956. {
  957. PropertyContainer.Child = null;
  958. PropertyContainer.Visibility = Visibility.Collapsed;
  959. }
  960. }
  961. }
  962. public void ExpandRightPropertyPanel(UIElement properytPanel, Visibility visible)
  963. {
  964. PropertyContainer.Width = 260;
  965. PropertyContainer.Child = properytPanel;
  966. PropertyContainer.Visibility = visible;
  967. if (visible == Visibility.Hidden || visible == Visibility.Collapsed)
  968. {
  969. RightPanelButton.IsChecked = false;
  970. }
  971. }
  972. private void RightPanelButton_Click(object sender, RoutedEventArgs e)
  973. {
  974. ToggleButton toggleButton = sender as ToggleButton;
  975. if (toggleButton != null)
  976. {
  977. if (toggleButton.IsChecked == true)
  978. {
  979. if (currentMode == "Annotation")
  980. {
  981. ExpandRightPropertyPanel(pdfAnnotationControl, Visibility.Visible);
  982. }
  983. else if (currentMode == "Edit")
  984. {
  985. ExpandRightPropertyPanel(pdfEditControl, Visibility.Visible);
  986. }
  987. else if (currentMode == "Forms")
  988. {
  989. ExpandRightPropertyPanel(pdfFormControl, Visibility.Visible);
  990. }
  991. else
  992. {
  993. bool expandEmpty = true;
  994. if (currentMode == "Content Editor")
  995. {
  996. if (pdfTextCreateParam != null && pdfViewControl != null && pdfViewControl.PDFView != null)
  997. {
  998. if (pdfViewControl.PDFView.GetPDFEditCreateType() == CPDFEditType.EditText)
  999. {
  1000. if (textEditControl == null)
  1001. {
  1002. textEditControl = new PDFTextEditControl();
  1003. }
  1004. textEditControl.SetPDFTextEditData(pdfTextCreateParam);
  1005. ExpandRightPropertyPanel(textEditControl, Visibility.Visible);
  1006. expandEmpty = false;
  1007. }
  1008. }
  1009. }
  1010. if (expandEmpty)
  1011. {
  1012. ExpandRightPropertyPanel(pdfAnnotationControl, Visibility.Visible);
  1013. }
  1014. }
  1015. if ((bool)ViewSettingBtn.IsChecked)
  1016. {
  1017. ViewSettingBtn.IsChecked = false;
  1018. }
  1019. }
  1020. else
  1021. {
  1022. ExpandRightPropertyPanel(null, Visibility.Collapsed);
  1023. }
  1024. }
  1025. }
  1026. #endregion
  1027. #region Event handle
  1028. private void AnnotationBarControl_AnnotationPropertyChanged(object sender, CPDFAnnotationType e)
  1029. {
  1030. pdfAnnotationControl.LoadAnnotationPanel(e);
  1031. if (e != CPDFAnnotationType.Audio && e != CPDFAnnotationType.Image)
  1032. {
  1033. ExpandRightPropertyPanel(pdfAnnotationControl, Visibility.Visible);
  1034. RightPanelButton.IsChecked = true;
  1035. }
  1036. }
  1037. private void PDFView_AnnotActiveHandler(object sender, AnnotAttribEvent e)
  1038. {
  1039. PropertyContainer.Child = pdfAnnotationControl;
  1040. pdfAnnotationControl.SetAnnotEventData(e);
  1041. }
  1042. private void PDFView_WidgetClickHandler(object sender, WidgetArgs e)
  1043. {
  1044. if (e is WidgetSignArgs)
  1045. {
  1046. RightPanelButton.IsChecked = true;
  1047. ExpandRightPropertyPanel(pdfFormControl, Visibility.Visible);
  1048. pdfFormControl.SetPropertyForType(e, null);
  1049. }
  1050. else
  1051. {
  1052. RightPanelButton.IsChecked = false;
  1053. ExpandRightPropertyPanel(null, Visibility.Collapsed);
  1054. }
  1055. }
  1056. private void PDFView_PDFEditCommandHandler(object sender, PDFEditCommand e)
  1057. {
  1058. if (e == null)
  1059. {
  1060. return;
  1061. }
  1062. if (e.EditType == CPDFEditType.EditText)
  1063. {
  1064. e.Handle = true;
  1065. PDFEditTextContextMenu(sender, e);
  1066. }
  1067. if (e.EditType == CPDFEditType.EditImage)
  1068. {
  1069. e.Handle = true;
  1070. PDFEditImageContextMenu(sender, e);
  1071. }
  1072. }
  1073. /// <summary>
  1074. /// Text and Image Selected Event
  1075. /// </summary>
  1076. private void PDFView_PDFEditActiveHandler(object sender, ComPDFKitViewer.PDFEditEvent e)
  1077. {
  1078. lastPDFEditEvent = e;
  1079. if ((bool)ViewSettingBtn.IsChecked)
  1080. {
  1081. ViewSettingBtn.IsChecked = false;
  1082. RightPanelButton.IsChecked = true;
  1083. }
  1084. if (e == null)
  1085. {
  1086. pdfEditControl = null;
  1087. PropertyContainer.Child = pdfEditControl;
  1088. if (pdfTextCreateParam != null && pdfViewControl != null && pdfViewControl.PDFView != null)
  1089. {
  1090. if (pdfViewControl.PDFView.GetPDFEditCreateType() == CPDFEditType.EditText)
  1091. {
  1092. if (textEditControl == null)
  1093. {
  1094. textEditControl = new PDFTextEditControl();
  1095. }
  1096. textEditControl.SetPDFTextEditData(pdfTextCreateParam);
  1097. PropertyContainer.Child = textEditControl;
  1098. }
  1099. }
  1100. return;
  1101. }
  1102. if (Mouse.RightButton == MouseButtonState.Pressed)
  1103. {
  1104. return;
  1105. }
  1106. if (e.EditType == CPDFEditType.EditText)
  1107. {
  1108. if (textEditControl == null)
  1109. {
  1110. textEditControl = new PDFTextEditControl();
  1111. }
  1112. textEditControl.SetPDFTextEditData(e);
  1113. pdfEditControl = textEditControl as UIElement;
  1114. PropertyContainer.Child = pdfEditControl;
  1115. return;
  1116. }
  1117. if (e.EditType == CPDFEditType.EditImage && pdfViewControl != null)
  1118. {
  1119. RightPanelButton.IsChecked = true;
  1120. UIElement pageView = sender as UIElement;
  1121. if (pageView != null)
  1122. {
  1123. pageView.MouseLeftButtonUp += PageView_MouseLeftButtonUp; ;
  1124. }
  1125. return;
  1126. }
  1127. }
  1128. private void PDFView_FormEditHandler(object sender, List<AnnotEditEvent> e)
  1129. {
  1130. if (e != null && e.Count > 0)
  1131. {
  1132. AnnotEditEvent editEvent = e[e.Count - 1];
  1133. if (editEvent.EditAction == ActionType.Add)
  1134. {
  1135. pdfViewControl.PDFView.SelectAnnotation(editEvent.PageIndex, editEvent.AnnotIndex);
  1136. }
  1137. }
  1138. }
  1139. private void PDFView_FormActiveHandler(object sender, AnnotAttribEvent e)
  1140. {
  1141. if (e == null || e.IsAnnotCreateReset)
  1142. {
  1143. pdfFormControl.SetPropertyForType(null, null);
  1144. }
  1145. else
  1146. {
  1147. switch (e.GetAnnotTypes())
  1148. {
  1149. case AnnotArgsType.WidgetViewForm:
  1150. WidgetArgs formArgs = e.GetAnnotHandlerEventArgs(AnnotArgsType.WidgetViewForm).First() as WidgetArgs;
  1151. switch (formArgs.WidgeType)
  1152. {
  1153. case ComPDFKit.PDFAnnotation.Form.C_WIDGET_TYPE.WIDGET_PUSHBUTTON:
  1154. case ComPDFKit.PDFAnnotation.Form.C_WIDGET_TYPE.WIDGET_COMBOBOX:
  1155. case ComPDFKit.PDFAnnotation.Form.C_WIDGET_TYPE.WIDGET_LISTBOX:
  1156. ExpandRightPropertyPanel(pdfFormControl, Visibility.Visible);
  1157. if ((bool)ViewSettingBtn.IsChecked)
  1158. {
  1159. ViewSettingBtn.IsChecked = false;
  1160. }
  1161. RightPanelButton.IsChecked = true;
  1162. break;
  1163. default:
  1164. break;
  1165. }
  1166. pdfFormControl.SetPropertyForType(formArgs, e);
  1167. break;
  1168. }
  1169. }
  1170. }
  1171. private void PageEditControl_ExitPageEdit(object sender, EventArgs e)
  1172. {
  1173. ModeComboBox.SelectedIndex = 0;
  1174. }
  1175. private void PageEditControl_PageMoved(object sender, RoutedEventArgs e)
  1176. {
  1177. if (pdfViewControl == null || pdfViewControl.PDFView == null)
  1178. {
  1179. return;
  1180. }
  1181. BotaSideTool.InitWithPDFViewer(pdfViewControl.PDFView);
  1182. }
  1183. private void CPDFPageEditBarControl_PageEditEvent(object sender, string e)
  1184. {
  1185. pageEditControl.PageEdit(e);
  1186. }
  1187. private void CPDFTitleBarControl_SaveFileEvent(object sender, EventArgs e)
  1188. {
  1189. SaveFile();
  1190. }
  1191. private void CPDFTitleBarControl_SaveAsFileEvent(object sender, EventArgs e)
  1192. {
  1193. SaveAsFile();
  1194. }
  1195. private void CPDFTitleBarControl_OpenFileEvent(object sender, EventArgs e)
  1196. {
  1197. OpenFile();
  1198. }
  1199. #endregion
  1200. #region Change mode
  1201. /// <summary>
  1202. /// Actions performed when switching modes:
  1203. /// Separated into actions performed upon entering and exiting the mode.
  1204. /// </summary>
  1205. private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
  1206. {
  1207. pdfTextCreateParam = null;
  1208. if (isFirstLoad)
  1209. {
  1210. isFirstLoad = false;
  1211. return;
  1212. }
  1213. var item = (sender as ComboBox).SelectedItem as ComboBoxItem;
  1214. //Behavior when exit mode
  1215. switch (currentMode)
  1216. {
  1217. case "Viewer":
  1218. break;
  1219. /*
  1220. * Behavior when exit Edit mode
  1221. * Clear and collapse the ToolBar
  1222. * Clear And collapse the property panel.
  1223. * Change the mousemode to PanTool
  1224. * Unsubscribe the event handles
  1225. * Clear the undo history
  1226. */
  1227. case "Annotations":
  1228. AnnotationBarControl.Visibility = Visibility.Collapsed;
  1229. AnnotationBarControl.ClearAllToolState();
  1230. pdfAnnotationControl.ClearPanel();
  1231. if (!(bool)ViewSettingBtn.IsChecked)
  1232. {
  1233. ExpandRightPropertyPanel(null, Visibility.Collapsed);
  1234. }
  1235. pdfViewControl.PDFView?.SetMouseMode(MouseModes.PanTool);
  1236. pdfViewControl.PDFView.AnnotEditHandler -= PDFView_AnnotEditHandler;
  1237. pdfAnnotationControl.ClearAnnotationBar -= PdfAnnotationControl_ClearAnnotationBar;
  1238. pdfViewControl.PDFView.AnnotActiveHandler -= PDFView_AnnotActiveHandler;
  1239. pdfViewControl.PDFView?.UndoManager.ClearHistory();
  1240. break;
  1241. /*
  1242. * Behavior when exit edit mode:
  1243. * Collapsed the ToolBar
  1244. * Highlight the link annotation
  1245. * Set the mode to not allow edit
  1246. * Set the mouse mode to PanTool
  1247. * Reload Document
  1248. * Unsubscribe click event.
  1249. * Clear And collapse the property panel.
  1250. * Clear and collapse the ToolBar
  1251. * Clear undo history
  1252. * CPDFDisplaySettingsControl
  1253. * Enable the configuration of the split view.
  1254. */
  1255. case "Content Editor":
  1256. PDFEditTool.Visibility = Visibility.Collapsed;
  1257. pdfViewControl.PDFView?.SetShowLink(true);
  1258. pdfViewControl.PDFView?.SetPDFEditType(CPDFEditType.None);
  1259. pdfViewControl.PDFView?.SetMouseMode(MouseModes.PanTool);
  1260. pdfViewControl.PDFView?.ReloadDocument();
  1261. pdfViewControl.PDFView.PDFEditActiveHandler -= PDFView_PDFEditActiveHandler;
  1262. if (!(bool)ViewSettingBtn.IsChecked)
  1263. {
  1264. ExpandRightPropertyPanel(null, Visibility.Collapsed);
  1265. }
  1266. ClearPDFEditState();
  1267. pdfViewControl.PDFView?.UndoManager.ClearHistory();
  1268. if (displayPanel != null)
  1269. {
  1270. displayPanel.SetVisibilityWhenContentEdit(Visibility.Visible);
  1271. }
  1272. break;
  1273. /*
  1274. * Behavior when exit form mode:
  1275. * Clear and collapsed the ToolBar
  1276. * Clear And Collapse the property panel.
  1277. * Unsubscribe event.
  1278. * Clear undo history
  1279. */
  1280. case "Forms":
  1281. if (!(bool)ViewSettingBtn.IsChecked)
  1282. {
  1283. ExpandRightPropertyPanel(null, Visibility.Collapsed);
  1284. }
  1285. FormBarControl.ClearAllToolState();
  1286. FormBarControl.Visibility = Visibility.Collapsed;
  1287. pdfViewControl.PDFView?.SetMouseMode(MouseModes.PanTool);
  1288. pdfViewControl.PDFView.AnnotActiveHandler -= PDFView_FormActiveHandler;
  1289. pdfViewControl.PDFView.AnnotEditHandler -= PDFView_FormEditHandler;
  1290. pdfViewControl.PDFView?.UndoManager.ClearHistory();
  1291. break;
  1292. /*
  1293. * Unsubscribe event.
  1294. * Show Undo Redo Button
  1295. * Collapse PageEditBarControl
  1296. * Replace PDFGrid.Child to pdfViewControl.
  1297. * Reload Document
  1298. * Enable Button
  1299. */
  1300. case "Docs Editor":
  1301. pageEditControl.ExitPageEdit -= PageEditControl_ExitPageEdit;
  1302. pageEditControl.PageMoved -= PageEditControl_PageMoved;
  1303. PageEditBarControl.PageEditEvent -= CPDFPageEditBarControl_PageEditEvent;
  1304. UndoRedoStackPanel.Visibility = Visibility.Visible;
  1305. PageEditBarControl.Visibility = Visibility.Collapsed;
  1306. PDFGrid.Child = pdfViewControl;
  1307. FloatPageTool.Visibility = Visibility.Visible;
  1308. pdfViewControl.PDFView.ReloadDocument();
  1309. LeftToolPanelButton.IsEnabled = true;
  1310. SearchButton.IsEnabled = true;
  1311. RightPanelButton.IsEnabled = true;
  1312. ViewSettingBtn.IsEnabled = true;
  1313. break;
  1314. default:
  1315. break;
  1316. }
  1317. /*
  1318. * Behavior when switching to Viewer mode:
  1319. * Hide the ToolBar
  1320. * Set mousemode to Viewer
  1321. */
  1322. if ((string)item.Content == "Viewer")
  1323. {
  1324. ToolBarContainer.Visibility = Visibility.Collapsed;
  1325. pdfViewControl.PDFView.SetMouseMode(MouseModes.Viewer);
  1326. }
  1327. /*
  1328. * Behavior when switching to Annotation mode:
  1329. * Show the ToolBar
  1330. * Show the AnnotationBar
  1331. */
  1332. else if ((string)item.Content == "Annotations")
  1333. {
  1334. ToolBarContainer.Visibility = Visibility.Visible;
  1335. AnnotationBarControl.Visibility = Visibility.Visible;
  1336. pdfViewControl.PDFView.SetMouseMode(MouseModes.PanTool);
  1337. pdfAnnotationControl.ClearAnnotationBar += PdfAnnotationControl_ClearAnnotationBar;
  1338. pdfViewControl.PDFView.AnnotEditHandler += PDFView_AnnotEditHandler;
  1339. pdfViewControl.PDFView.AnnotActiveHandler += PDFView_AnnotActiveHandler;
  1340. }
  1341. /*
  1342. * Behavior when switching to Edit mode:
  1343. * Show the ToolBar
  1344. * Show the EditBar
  1345. * Set the mode to allow editing of both text and images
  1346. * Set the mouse mode to PDFEdit
  1347. * Reload Document
  1348. * Set the splite mode to None and unable the split setting
  1349. */
  1350. else if ((string)item.Content == "Content Editor")
  1351. {
  1352. ToolBarContainer.Visibility = Visibility.Visible;
  1353. PDFEditTool.Visibility = Visibility.Visible;
  1354. PageEditBarControl.Visibility = Visibility.Collapsed;
  1355. pdfViewControl.PDFView?.SetPDFEditType(CPDFEditType.EditText | CPDFEditType.EditImage);
  1356. pdfViewControl.PDFView?.SetPDFEditCreateType(CPDFEditType.None);
  1357. pdfViewControl.PDFView?.SetMouseMode(MouseModes.PDFEdit);
  1358. pdfViewControl.PDFView?.ReloadDocument();
  1359. pdfViewControl.PDFView.PDFEditActiveHandler += PDFView_PDFEditActiveHandler;
  1360. pdfViewControl.PDFView.SetSplitMode(SplitMode.None);
  1361. if (displayPanel != null)
  1362. {
  1363. displayPanel.SetVisibilityWhenContentEdit(Visibility.Collapsed);
  1364. }
  1365. }
  1366. /*
  1367. * Behavior when switching to Form mode:
  1368. *
  1369. */
  1370. else if ((string)item.Content == "Forms")
  1371. {
  1372. ToolBarContainer.Visibility = Visibility.Visible;
  1373. FormBarControl.Visibility = Visibility.Visible;
  1374. pdfViewControl.PDFView?.SetShowLink(true);
  1375. pdfViewControl.PDFView?.SetMouseMode(MouseModes.FormEditTool);
  1376. pdfViewControl.PDFView?.ReloadDocument();
  1377. pdfViewControl.PDFView.AnnotActiveHandler += PDFView_FormActiveHandler;
  1378. pdfViewControl.PDFView.AnnotEditHandler += PDFView_FormEditHandler;
  1379. }
  1380. /*
  1381. *
  1382. */
  1383. else if ((string)item.Content == "Docs Editor")
  1384. {
  1385. ToolBarContainer.Visibility = Visibility.Visible;
  1386. if (pageEditControl == null)
  1387. {
  1388. pageEditControl = new CPDFPageEditControl();
  1389. }
  1390. pageEditControl.ExitPageEdit += PageEditControl_ExitPageEdit; ;
  1391. pageEditControl.PageMoved += PageEditControl_PageMoved; ;
  1392. PageEditBarControl.PageEditEvent += CPDFPageEditBarControl_PageEditEvent;
  1393. pageEditControl.LoadThumbnails(pdfViewControl.PDFView);
  1394. PDFGrid.Child = pageEditControl;
  1395. UndoRedoStackPanel.Visibility = Visibility.Collapsed;
  1396. PageEditBarControl.Visibility = Visibility.Visible;
  1397. LeftToolPanelButton.IsChecked = false;
  1398. LeftToolPanelButton.IsEnabled = false;
  1399. SearchButton.IsEnabled = false;
  1400. RightPanelButton.IsChecked = false;
  1401. RightPanelButton.IsEnabled = false;
  1402. ViewSettingBtn.IsChecked = false;
  1403. ViewSettingBtn.IsEnabled = false;
  1404. ExpandLeftPanel(false);
  1405. ExpandRightPropertyPanel(null, Visibility.Collapsed);
  1406. FloatPageTool.Visibility = Visibility.Collapsed;
  1407. }
  1408. currentMode = (string)item.Content;
  1409. }
  1410. #endregion
  1411. }
  1412. }