ContentEditControl.xaml.cs 40 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007
  1. using ComPDFKit.PDFAnnotation;
  2. using ComPDFKit.PDFDocument;
  3. using ComPDFKit.PDFPage;
  4. using ComPDFKit.PDFPage.Edit;
  5. using ComPDFKit.Tool;
  6. using ComPDFKit.Tool.SettingParam;
  7. using Compdfkit_Tools.Edit;
  8. using Compdfkit_Tools.Helper;
  9. using ComPDFKitViewer;
  10. using System;
  11. using System.Collections.Generic;
  12. using System.ComponentModel;
  13. using System.Diagnostics;
  14. using System.Drawing;
  15. using System.IO;
  16. using System.Runtime.CompilerServices;
  17. using System.Windows;
  18. using System.Windows.Controls.Primitives;
  19. using System.Windows.Forms;
  20. using System.Windows.Input;
  21. using System.Windows.Media;
  22. using static ComPDFKit.Tool.CPDFToolManager;
  23. using System.Windows.Media.Imaging;
  24. using ComPDFKit.Import;
  25. using ComPDFKit.Tool.Help;
  26. using ComPDFKit.Tool.UndoManger;
  27. using ComPDFKit.Viewer.Helper;
  28. using ContextMenu = System.Windows.Controls.ContextMenu;
  29. using KeyEventArgs = System.Windows.Input.KeyEventArgs;
  30. using KeyEventHandler = System.Windows.Input.KeyEventHandler;
  31. using MenuItem = System.Windows.Controls.MenuItem;
  32. using OpenFileDialog = Microsoft.Win32.OpenFileDialog;
  33. using UserControl = System.Windows.Controls.UserControl;
  34. namespace Compdfkit_Tools.PDFControl
  35. {
  36. public partial class ContentEditControl : UserControl, INotifyPropertyChanged
  37. {
  38. #region Property
  39. public PDFViewControl PdfViewControl;
  40. public PDFContentEditControl pdfContentEditControl = new PDFContentEditControl();
  41. private CPDFDisplaySettingsControl displaySettingsControl = null;
  42. private TextEditParam pdfTextCreateParam;
  43. private PDFEditParam imageAreaParam = null;
  44. private List<TextEditParam> lastPDFEditMultiEvents = null;
  45. private PanelState panelState = PanelState.GetInstance();
  46. private KeyEventHandler KeyDownHandler;
  47. public event PropertyChangedEventHandler PropertyChanged;
  48. public ICommand CloseTabCommand;
  49. public ICommand ExpandPropertyPanelCommand;
  50. private CPoint startPoint;
  51. private CPoint endPoint;
  52. private bool isUpdateStartPoint = true;
  53. public bool CanUndo
  54. {
  55. get
  56. {
  57. try
  58. {
  59. if (PdfViewControl != null && PdfViewControl.PDFViewTool != null)
  60. {
  61. CPDFViewerTool viewerTool = PdfViewControl.PDFViewTool;
  62. CPDFViewer pdfViewer = viewerTool.GetCPDFViewer();
  63. return pdfViewer.UndoManager.CanUndo;
  64. }
  65. }
  66. catch (Exception ex)
  67. {
  68. }
  69. return false;
  70. }
  71. }
  72. public bool CanRedo
  73. {
  74. get
  75. {
  76. try
  77. {
  78. if (PdfViewControl != null && PdfViewControl.PDFViewTool != null)
  79. {
  80. CPDFViewerTool viewerTool = PdfViewControl.PDFViewTool;
  81. CPDFViewer pdfViewer = viewerTool.GetCPDFViewer();
  82. return pdfViewer.UndoManager.CanRedo;
  83. }
  84. }
  85. catch (Exception ex)
  86. {
  87. }
  88. return false;
  89. }
  90. }
  91. private bool CanSave
  92. {
  93. get
  94. {
  95. try
  96. {
  97. if (PdfViewControl != null && PdfViewControl.PDFViewTool != null)
  98. {
  99. CPDFViewerTool viewerTool = PdfViewControl.PDFViewTool;
  100. CPDFViewer pdfViewer = viewerTool.GetCPDFViewer();
  101. return (pdfViewer.UndoManager.CanUndo | pdfViewer.UndoManager.CanRedo);
  102. }
  103. }
  104. catch (Exception ex)
  105. {
  106. }
  107. return false;
  108. }
  109. }
  110. public event EventHandler<bool> OnCanSaveChanged;
  111. public event EventHandler OnAnnotEditHandler;
  112. #endregion
  113. public ContentEditControl()
  114. {
  115. InitializeComponent();
  116. panelState.PropertyChanged -= PanelState_PropertyChanged;
  117. panelState.PropertyChanged += PanelState_PropertyChanged;
  118. }
  119. private void PanelState_PropertyChanged(object sender, PropertyChangedEventArgs e)
  120. {
  121. if (e.PropertyName == nameof(PanelState.IsLeftPanelExpand))
  122. {
  123. ExpandLeftPanel(panelState.IsLeftPanelExpand);
  124. }
  125. else if (e.PropertyName == nameof(PanelState.RightPanel))
  126. {
  127. if (panelState.RightPanel == PanelState.RightPanelState.PropertyPanel)
  128. {
  129. ExpandRightPropertyPanel(pdfContentEditControl, Visibility.Visible);
  130. }
  131. else if (panelState.RightPanel == PanelState.RightPanelState.ViewSettings)
  132. {
  133. ExpandRightPropertyPanel(displaySettingsControl, Visibility.Visible);
  134. }
  135. else
  136. {
  137. ExpandRightPropertyPanel(null, Visibility.Collapsed);
  138. }
  139. }
  140. }
  141. public void ClearPDFEditState(ToggleButton ignoreBtn = null)
  142. {
  143. List<ToggleButton> clearBtnList = new List<ToggleButton>()
  144. {
  145. PDFTextEditButton,
  146. PDFImageEditButton
  147. };
  148. foreach (ToggleButton item in clearBtnList)
  149. {
  150. if (ignoreBtn == item)
  151. {
  152. continue;
  153. }
  154. item.IsChecked = false;
  155. }
  156. PdfViewControl.PDFToolManager.SetCreateContentEditType(CPDFEditType.None);
  157. PdfViewControl.PDFViewTool.GetCPDFViewer().SetIsVisibleCustomMouse(false);
  158. PdfViewControl.PDFViewTool.GetCPDFViewer().SetIsShowStampMouse(false);
  159. }
  160. private void PDFTextEditButton_Click(object sender, RoutedEventArgs e)
  161. {
  162. ToggleButton senderBtn = sender as ToggleButton;
  163. if (senderBtn != null && PdfViewControl != null)
  164. {
  165. ClearPDFEditState(senderBtn);
  166. if (senderBtn.IsChecked == true)
  167. {
  168. TextEditParam textEditParam = new TextEditParam();
  169. textEditParam.EditType = CPDFEditType.EditText;
  170. textEditParam.IsBold = false;
  171. textEditParam.IsItalic = false;
  172. textEditParam.FontSize = 14;
  173. textEditParam.FontName = "Helvetica";
  174. textEditParam.FontColor = new byte[] { 0, 0, 0 };
  175. textEditParam.EditIndex = -1;
  176. textEditParam.TextAlign = TextAlignType.AlignLeft;
  177. textEditParam.Transparency = 255;
  178. pdfContentEditControl.SetPDFTextEditData(textEditParam);
  179. DefaultSettingParam defaultSettingParam = PdfViewControl.PDFViewTool.GetDefaultSettingParam();
  180. defaultSettingParam.SetPDFEditParamm(textEditParam);
  181. panelState.RightPanel = PanelState.RightPanelState.PropertyPanel;
  182. PdfViewControl.PDFToolManager.SetCreateContentEditType(CPDFEditType.EditText);
  183. }
  184. else
  185. {
  186. }
  187. // PDFEditEvent createParam = new PDFEditEvent();
  188. // createParam.EditType = CPDFEditType.EditText;
  189. // createParam.IsBold = false;
  190. // createParam.IsItalic = false;
  191. // createParam.FontSize = 14;
  192. // createParam.FontName = "Helvetica";
  193. // createParam.FontColor = Colors.Black;
  194. // createParam.TextAlign = TextAlignType.AlignLeft;
  195. // createParam.Transparency = 255;
  196. // if (PdfViewControl.PDFView != null && PdfViewControl.PDFView.Document != null)
  197. // {
  198. // CPDFDocument pdfDoc = PdfViewControl.PDFView.Document;
  199. // PdfViewControl.PDFView.ToolManager.EnableClickCreate = true;
  200. // PdfViewControl.PDFView.ToolManager.ClickCreateWidth = 100;
  201. // if (pdfDoc.PageCount > 0)
  202. // {
  203. // CPDFPage pdfPage = pdfDoc.PageAtIndex(0);
  204. // CPDFEditPage editPage = pdfPage.GetEditPage();
  205. // editPage.BeginEdit(CPDFEditType.EditText);
  206. // createParam.SystemFontNameList.AddRange(editPage.GetFontList());
  207. // editPage.EndEdit();
  208. // }
  209. // }
  210. // PdfViewControl.PDFView?.SetPDFEditType(CPDFEditType.EditText);
  211. // PdfViewControl.PDFView?.SetPDFEditCreateType(CPDFEditType.EditText);
  212. // PdfViewControl.PDFView?.SetMouseMode(MouseModes.PDFEdit);
  213. // PdfViewControl.PDFView?.ReloadDocument();
  214. // PdfViewControl.PDFView?.SetPDFEditParam(createParam);
  215. // pdfContentEditControl.SetPDFTextEditData(createParam);
  216. // panelState.RightPanel = PanelState.RightPanelState.PropertyPanel;
  217. // pdfTextCreateParam = createParam;
  218. //}
  219. //else
  220. //{
  221. // PdfViewControl.PDFView?.SetPDFEditCreateType(CPDFEditType.None);
  222. // PdfViewControl.PDFView?.SetPDFEditType(CPDFEditType.EditImage | CPDFEditType.EditText);
  223. // PdfViewControl.PDFView?.SetMouseMode(MouseModes.PDFEdit);
  224. // PdfViewControl.PDFView?.ReloadDocument();
  225. // pdfContentEditControl.ClearContentControl();
  226. // panelState.RightPanel = PanelState.RightPanelState.None;
  227. //}
  228. }
  229. }
  230. private void PDFImageEditButton_Click(object sender, RoutedEventArgs e)
  231. {
  232. ToggleButton senderBtn = sender as ToggleButton;
  233. if (senderBtn != null && PdfViewControl != null)
  234. {
  235. panelState.RightPanel = PanelState.RightPanelState.None;
  236. senderBtn.IsChecked = false;
  237. OpenFileDialog openFileDialog = new OpenFileDialog();
  238. openFileDialog.Filter = "Image Files(*.jpg;*.jpeg;*.png;*.bmp)|*.jpg;*.jpeg;*.png;*.bmp;";
  239. if (openFileDialog.ShowDialog() == true)
  240. {
  241. ClearPDFEditState(senderBtn);
  242. try
  243. {
  244. bool SetImage = PdfViewControl.PDFViewTool.GetCPDFViewer().SetStampMouseImage(openFileDialog.FileName);
  245. PdfViewControl.PDFToolManager.SetCreateImagePath(openFileDialog.FileName);
  246. PdfViewControl.PDFViewTool.GetCPDFViewer().SetIsVisibleCustomMouse(SetImage);
  247. PdfViewControl.PDFViewTool.GetCPDFViewer().SetIsShowStampMouse(SetImage);
  248. PdfViewControl.PDFToolManager.SetCreateContentEditType(CPDFEditType.EditImage);
  249. }
  250. catch
  251. {
  252. }
  253. //if (openFileDialog.ShowDialog() == true)
  254. //{
  255. // ClearPDFEditState(senderBtn);
  256. // PdfViewControl.PDFView?.ClearSelectPDFEdit();
  257. // PdfViewControl.PDFView?.SetPDFEditType(CPDFEditType.EditImage | CPDFEditType.EditText);
  258. // PdfViewControl.PDFView?.SetMouseMode(MouseModes.PDFEdit);
  259. // PdfViewControl.PDFView?.ReloadDocument();
  260. // PdfViewControl.PDFView?.SetPDFEditCreateType(CPDFEditType.EditImage);
  261. // PdfViewControl.PDFView?.AddPDFEditImage(openFileDialog.FileName);
  262. //}
  263. }
  264. }
  265. }
  266. public void ExpandLeftPanel(bool isExpand)
  267. {
  268. BotaContainer.Visibility = isExpand ? Visibility.Visible : Visibility.Collapsed;
  269. Splitter.Visibility = isExpand ? Visibility.Visible : Visibility.Collapsed;
  270. if (isExpand)
  271. {
  272. BodyGrid.ColumnDefinitions[0].Width = new GridLength(320);
  273. BodyGrid.ColumnDefinitions[1].Width = new GridLength(15);
  274. }
  275. else
  276. {
  277. BodyGrid.ColumnDefinitions[0].Width = new GridLength(0);
  278. BodyGrid.ColumnDefinitions[1].Width = new GridLength(0);
  279. }
  280. }
  281. private void UndoBtn_Click(object sender, RoutedEventArgs e)
  282. {
  283. if (PdfViewControl != null && PdfViewControl.PDFViewTool != null)
  284. {
  285. PdfViewControl.PDFViewTool.GetCPDFViewer()?.UndoManager?.Undo();
  286. //PdfViewControl.PDFToolManager.ClearSelect();
  287. PdfViewControl.PDFViewTool.GetCPDFViewer().UpdateRenderFrame();
  288. }
  289. }
  290. private void RedoBtn_Click(object sender, RoutedEventArgs e)
  291. {
  292. if (PdfViewControl != null && PdfViewControl.PDFViewTool != null)
  293. {
  294. PdfViewControl.PDFViewTool.GetCPDFViewer()?.UndoManager?.Redo();
  295. //PdfViewControl.PDFToolManager.ClearSelect();
  296. PdfViewControl.PDFViewTool.GetCPDFViewer().UpdateRenderFrame();
  297. }
  298. }
  299. public void SetViewSettings(Visibility visibility, CPDFDisplaySettingsControl displaySettingsControl = null)
  300. {
  301. this.PropertyContainer.Child = displaySettingsControl;
  302. this.PropertyContainer.Visibility = visibility;
  303. }
  304. public void SetBOTAContainer(CPDFBOTABarControl botaControl)
  305. {
  306. this.BotaContainer.Child = botaControl;
  307. }
  308. public void SetDisplaySettingsControl(CPDFDisplaySettingsControl displaySettingsControl)
  309. {
  310. this.displaySettingsControl = displaySettingsControl;
  311. }
  312. private void UserControl_Loaded(object sender, RoutedEventArgs e)
  313. {
  314. }
  315. private void UserControl_UnLoaded(object sender, RoutedEventArgs e)
  316. {
  317. }
  318. public void ExpandRightPropertyPanel(UIElement propertytPanel, Visibility visible)
  319. {
  320. PropertyContainer.Width = 260;
  321. PropertyContainer.Child = propertytPanel;
  322. PropertyContainer.Visibility = visible;
  323. }
  324. public void InitWithPDFViewer(PDFViewControl view)
  325. {
  326. PdfViewControl.PDFViewTool.GetCPDFViewer().UndoManager.PropertyChanged -= UndoManager_PropertyChanged;
  327. PdfViewControl.PDFViewTool.GetCPDFViewer().UndoManager.PropertyChanged += UndoManager_PropertyChanged;
  328. PdfViewControl.MouseLeftButtonDownHandler -= PDFToolManager_MouseLeftButtonDownHandler;
  329. PdfViewControl.MouseLeftButtonDownHandler += PDFToolManager_MouseLeftButtonDownHandler;
  330. PdfViewControl.MouseLeftButtonUpHandler -= PDFToolManager_MouseLeftButtonUpHandler;
  331. PdfViewControl.MouseLeftButtonUpHandler += PDFToolManager_MouseLeftButtonUpHandler;
  332. PdfViewControl.MouseRightButtonDownHandler -= PdfViewControl_MouseRightButtonDownHandler;
  333. PdfViewControl.MouseRightButtonDownHandler += PdfViewControl_MouseRightButtonDownHandler;
  334. PdfViewControl = view;
  335. PDFGrid.Child = PdfViewControl;
  336. FloatPageTool.InitWithPDFViewer(view);
  337. pdfContentEditControl.InitWithPDFViewer(view);
  338. DataContext = this;
  339. if(PdfViewControl != null)
  340. {
  341. PdfViewControl.PDFViewTool.IsManipulationEnabled = true;
  342. //pdfViewer.PDFEditMultiActiveHandler -= PDFEditMultiActiveHandler;
  343. //pdfViewer.PDFEditMultiActiveHandler += PDFEditMultiActiveHandler;
  344. if (KeyDownHandler != null)
  345. {
  346. PdfViewControl.PDFViewTool.RemoveHandler(KeyDownEvent, KeyDownHandler);
  347. }
  348. KeyDownHandler = new KeyEventHandler(PDFView_KeyDown);
  349. PdfViewControl.PDFViewTool.AddHandler(KeyDownEvent, KeyDownHandler, false);
  350. }
  351. }
  352. private void PDFEditEmptyPanel()
  353. {
  354. PropertyContainer.Child = pdfContentEditControl;
  355. if (pdfTextCreateParam != null && PdfViewControl != null && PdfViewControl.PDFView != null)
  356. {
  357. if (PdfViewControl.PDFToolManager.GetCreateContentEditType() == CPDFEditType.EditText)
  358. {
  359. pdfContentEditControl.SetPDFTextEditData(pdfTextCreateParam);
  360. }
  361. else if (PdfViewControl.PDFToolManager.GetCreateContentEditType() == CPDFEditType.None)
  362. {
  363. pdfContentEditControl.ClearContentControl();
  364. }
  365. }
  366. else
  367. {
  368. pdfContentEditControl.ClearContentControl();
  369. }
  370. }
  371. //private void PDFEditMultiActiveHandler(object sender, List<PDFEditEvent> e)
  372. //{
  373. // imageArea = null;
  374. // lastPDFEditMultiEvents = e;
  375. // if(e==null)
  376. // {
  377. // PDFEditEmptyPanel();
  378. // return;
  379. // }
  380. // if(e.Count>1)
  381. // {
  382. // List<CPDFEditType> editList= e.AsEnumerable().Select(x=>x.EditType).Distinct().ToList();
  383. // if(editList.Count>1)
  384. // {
  385. // PDFEditEmptyPanel();
  386. // return;
  387. // }
  388. // if (editList[0]==CPDFEditType.EditText)
  389. // {
  390. // pdfContentEditControl.SetPDFTextMultiEditData(e);
  391. // return;
  392. // }
  393. // if (editList[0]==CPDFEditType.EditImage)
  394. // {
  395. // UIElement pageView = sender as UIElement;
  396. // if (pageView != null)
  397. // {
  398. // pageView.MouseLeftButtonUp += PageView_MouseLeftButtonUp;
  399. // }
  400. // pdfContentEditControl.SetPDFImageMultiEditData(e);
  401. // }
  402. // }
  403. //}
  404. private CPoint GetPoint(CPDFEditTextArea textArea)
  405. {
  406. CPoint caretPoint = new CPoint();
  407. CPoint caretPointHigh = new CPoint();
  408. textArea.GetTextCursorPoints(ref caretPoint, ref caretPointHigh);
  409. var lineHeight = caretPoint.y - caretPointHigh.y;
  410. CRect caretRect = new CRect(caretPoint.x, caretPoint.y, caretPointHigh.x, caretPointHigh.y);
  411. caretPoint = new CPoint(caretRect.left, caretRect.top);
  412. return new CPoint(caretRect.left, (caretRect.top + caretRect.bottom) / 2);
  413. }
  414. public void PDFView_KeyDown(object sender, KeyEventArgs e)
  415. {
  416. if (PdfViewControl.PDFViewTool.GetViewerModel() != MouseModes.kContentEdit)
  417. {
  418. return;
  419. }
  420. int pageIndex = -1;
  421. CPDFEditTextArea textArea = PdfViewControl.PDFToolManager.GetSelectedEditAreaObject(ref pageIndex) as CPDFEditTextArea;
  422. if(textArea == null)
  423. {
  424. return;
  425. }
  426. if (Keyboard.Modifiers == ModifierKeys.Control)
  427. {
  428. if (e.Key == Key.Left)
  429. {
  430. textArea.GetPreWordCharPlace();
  431. UpdateTextArea(textArea);
  432. e.Handled = true;
  433. }
  434. if (e.Key == Key.Right)
  435. {
  436. textArea.GetNextWordCharPlace();
  437. UpdateTextArea(textArea);
  438. e.Handled = true;
  439. }
  440. if (e.Key == Key.Up)
  441. {
  442. textArea.GetSectionBeginCharPlace();
  443. UpdateTextArea(textArea);
  444. e.Handled = true;
  445. }
  446. if (e.Key == Key.Down)
  447. {
  448. textArea.GetSectionEndCharPlace();
  449. UpdateTextArea(textArea);
  450. e.Handled = true;
  451. }
  452. }
  453. if (Keyboard.Modifiers == ModifierKeys.Shift)
  454. {
  455. if (isUpdateStartPoint)
  456. {
  457. startPoint = GetPoint(textArea);
  458. isUpdateStartPoint = false;
  459. }
  460. if (e.Key == Key.Left)
  461. {
  462. textArea.GetPrevCharPlace();
  463. endPoint = GetPoint(textArea);
  464. textArea.GetSelectChars(startPoint, endPoint);
  465. UpdateTextArea(textArea);
  466. e.Handled = true;
  467. }
  468. if (e.Key == Key.Right)
  469. {
  470. textArea.GetNextCharPlace();
  471. endPoint = GetPoint(textArea);
  472. textArea.GetSelectChars(startPoint, endPoint);
  473. UpdateTextArea(textArea);
  474. e.Handled = true;
  475. }
  476. if (e.Key == Key.Up)
  477. {
  478. textArea.GetUpCharPlace();
  479. endPoint = GetPoint(textArea);
  480. textArea.GetSelectChars(startPoint, endPoint);
  481. UpdateTextArea(textArea);
  482. e.Handled = true;
  483. }
  484. if (e.Key == Key.Down)
  485. {
  486. textArea.GetDownCharPlace();
  487. endPoint = GetPoint(textArea);
  488. textArea.GetSelectChars(startPoint, endPoint);
  489. UpdateTextArea(textArea);
  490. e.Handled = true;
  491. }
  492. }
  493. if (Keyboard.Modifiers == ModifierKeys.Alt)
  494. {
  495. if (e.SystemKey == Key.Up)
  496. {
  497. textArea.GetLineBeginCharPlace();
  498. UpdateTextArea(textArea);
  499. e.Handled = true;
  500. }
  501. if (e.SystemKey == Key.Down)
  502. {
  503. textArea.GetLineEndCharPlace();
  504. UpdateTextArea(textArea);
  505. e.Handled = true;
  506. }
  507. }
  508. if (Keyboard.Modifiers == ModifierKeys.None)
  509. {
  510. var oldFrame = textArea.GetFrame();
  511. if (e.Key == Key.Left)
  512. {
  513. oldFrame.left -= 5;
  514. e.Handled = true;
  515. }
  516. if (e.Key == Key.Right)
  517. {
  518. oldFrame.left += 5;
  519. e.Handled = true;
  520. }
  521. if (e.Key == Key.Up)
  522. {
  523. oldFrame.top -= 5;
  524. e.Handled = true;
  525. }
  526. if (e.Key == Key.Down)
  527. {
  528. oldFrame.top += 5;
  529. e.Handled = true;
  530. }
  531. textArea.SetFrame(oldFrame);
  532. }
  533. if (Keyboard.Modifiers == (ModifierKeys.Control | ModifierKeys.Shift))
  534. {
  535. if (isUpdateStartPoint)
  536. {
  537. startPoint = GetPoint(textArea);
  538. isUpdateStartPoint = false;
  539. }
  540. if (e.Key == Key.Left)
  541. {
  542. textArea.GetPreWordCharPlace();
  543. endPoint = GetPoint(textArea);
  544. textArea.GetSelectChars(startPoint, endPoint);
  545. UpdateTextArea(textArea);
  546. e.Handled = true;
  547. }
  548. if (e.Key == Key.Right)
  549. {
  550. textArea.GetNextWordCharPlace();
  551. endPoint = GetPoint(textArea);
  552. textArea.GetSelectChars(startPoint, endPoint);
  553. UpdateTextArea(textArea);
  554. e.Handled = true;
  555. }
  556. if (e.Key == Key.Up)
  557. {
  558. textArea.GetSectionBeginCharPlace();
  559. endPoint = GetPoint(textArea);
  560. textArea.GetSelectChars(startPoint, endPoint);
  561. UpdateTextArea(textArea);
  562. e.Handled = true;
  563. }
  564. if (e.Key == Key.Down)
  565. {
  566. textArea.GetSectionEndCharPlace();
  567. endPoint = GetPoint(textArea);
  568. textArea.GetSelectChars(startPoint, endPoint);
  569. UpdateTextArea(textArea);
  570. e.Handled = true;
  571. }
  572. }
  573. }
  574. private void UpdateTextArea(CPDFEditTextArea textArea)
  575. {
  576. Rect oldRect = DataConversionForWPF.CRectConversionForRect(textArea.GetFrame());
  577. PdfViewControl.PDFViewTool.UpdateRender(oldRect,textArea);
  578. }
  579. private void UpdateImageArea(CPDFEditImageArea imageArea)
  580. {
  581. Rect oldRect = DataConversionForWPF.CRectConversionForRect(imageArea.GetFrame());
  582. PdfViewControl.PDFViewTool.UpdateRender(oldRect,imageArea);
  583. }
  584. private void PdfViewControl_MouseRightButtonDownHandler(object sender, MouseEventObject e)
  585. {
  586. ContextMenu ContextMenu = PdfViewControl.GetRightMenu();
  587. if (ContextMenu == null)
  588. {
  589. ContextMenu = new ContextMenu();
  590. }
  591. switch (e.hitTestType)
  592. {
  593. case MouseHitTestType.kTextEdit:
  594. case MouseHitTestType.kImageEdit:
  595. CreateImageEditMenu(sender, ref ContextMenu);
  596. break;
  597. default:
  598. ContextMenu.Items.Add(new MenuItem() { Header = "Paste", Command = ApplicationCommands.Paste, CommandTarget = (UIElement)sender });
  599. break;
  600. }
  601. PdfViewControl.SetRightMenu(ContextMenu);
  602. }
  603. private void CreateImageEditMenu(object sender, ref ContextMenu menu)
  604. {
  605. int index = -1;
  606. CPDFEditImageArea imageArea = PdfViewControl.PDFToolManager.GetSelectedEditAreaObject(ref index) as CPDFEditImageArea;
  607. MenuItem rotateLeftMenu = new MenuItem();
  608. rotateLeftMenu.Header = LanguageHelper.CommonManager.GetString("Menu_RotateLeft");
  609. rotateLeftMenu.Click += (o, p) =>
  610. {
  611. if (imageArea != null)
  612. {
  613. imageArea.Rotate(-90);
  614. pdfContentEditControl.RefreshThumb();
  615. UpdateImageArea(imageArea);
  616. }
  617. };
  618. menu.Items.Add(rotateLeftMenu);
  619. MenuItem rotateRightMenu = new MenuItem();
  620. rotateRightMenu.Header = LanguageHelper.CommonManager.GetString("Menu_RotateRight");
  621. rotateRightMenu.Click += (o, p) =>
  622. {
  623. if (imageArea != null)
  624. {
  625. imageArea.Rotate(90);
  626. pdfContentEditControl.RefreshThumb();
  627. UpdateImageArea(imageArea);
  628. }
  629. };
  630. menu.Items.Add(rotateRightMenu);
  631. MenuItem replaceMenu = new MenuItem();
  632. replaceMenu.Header = LanguageHelper.CommonManager.GetString("Menu_Replace");
  633. replaceMenu.Click += (o, p) =>
  634. {
  635. if (imageArea != null)
  636. {
  637. OpenFileDialog openFileDialog = new OpenFileDialog();
  638. openFileDialog.Filter = "Image Files(*.jpg;*.jpeg;*.png;*.bmp)|*.jpg;*.jpeg;*.png;*.bmp;";
  639. if (openFileDialog.ShowDialog() == true)
  640. {
  641. //byte[] fileData = File.ReadAllBytes(openFileDialog.FileName);
  642. //Bitmap bitmap = new Bitmap(openFileDialog.FileName);
  643. //imageArea.ReplaceImageArea(imageArea.GetFrame(), fileData, bitmap.Width, bitmap.Height);
  644. imageArea.ReplaceImageArea(imageArea.GetFrame(), openFileDialog.FileName,string.Empty);
  645. pdfContentEditControl.RefreshThumb();
  646. UpdateImageArea(imageArea);
  647. }
  648. }
  649. };
  650. menu.Items.Add(replaceMenu);
  651. MenuItem exportMenu = new MenuItem();
  652. exportMenu.Header = LanguageHelper.CommonManager.GetString("Menu_Export");
  653. exportMenu.Click += (o, p) =>
  654. {
  655. if (PdfViewControl != null && PdfViewControl.PDFView != null)
  656. {
  657. try
  658. {
  659. FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog();
  660. if (folderBrowserDialog.ShowDialog() == DialogResult.OK && imageArea != null)
  661. {
  662. string path = Path.GetTempPath();
  663. string uuid = Guid.NewGuid().ToString("N");
  664. string imagePath = Path.Combine(path, uuid + ".tmp");
  665. imageArea.ExtractImage(imagePath);
  666. Bitmap bitmapImage = new Bitmap(imagePath);
  667. string fileName = Path.Combine(folderBrowserDialog.SelectedPath, uuid + ".jpg");
  668. bitmapImage.Save(fileName, System.Drawing.Imaging.ImageFormat.Jpeg);
  669. Process.Start("explorer", "/select,\"" + fileName + "\"");
  670. }
  671. }
  672. catch (Exception ex)
  673. {
  674. }
  675. }
  676. };
  677. menu.Items.Add(exportMenu);
  678. MenuItem opacityMenu = new MenuItem();
  679. opacityMenu.Header = LanguageHelper.CommonManager.GetString("Menu_Opacity");
  680. menu.Items.Add(opacityMenu);
  681. AppendOpacityMenu(opacityMenu, imageArea, CPDFEditType.EditImage);
  682. MenuItem horizonMirror = new MenuItem();
  683. horizonMirror.Header = LanguageHelper.CommonManager.GetString("Menu_HFlip");
  684. horizonMirror.Click += (o, p) =>
  685. {
  686. imageArea?.HorizontalMirror();
  687. pdfContentEditControl.RefreshThumb();
  688. UpdateImageArea(imageArea);
  689. };
  690. menu.Items.Add(horizonMirror);
  691. MenuItem verticalMirror = new MenuItem();
  692. verticalMirror.Header = LanguageHelper.CommonManager.GetString("Menu_VFlip");
  693. verticalMirror.Click += (o, p) =>
  694. {
  695. if (imageArea != null)
  696. {
  697. imageArea?.VerticalMirror();
  698. pdfContentEditControl.RefreshThumb();
  699. UpdateImageArea(imageArea);
  700. }
  701. };
  702. menu.Items.Add(verticalMirror);
  703. MenuItem cropMenu = new MenuItem();
  704. cropMenu.Header = LanguageHelper.CommonManager.GetString("Menu_Crop");
  705. cropMenu.Click += (o, p) =>
  706. {
  707. if (imageArea != null)
  708. {
  709. }
  710. };
  711. menu.Items.Add(cropMenu);
  712. menu.Items.Add(new MenuItem() { Header = "Copy", Command = ApplicationCommands.Copy, CommandTarget = (UIElement)sender });
  713. menu.Items.Add(new MenuItem() { Header = "Cut", Command = ApplicationCommands.Cut, CommandTarget = (UIElement)sender });
  714. menu.Items.Add(new MenuItem() { Header = "Delete", Command = ApplicationCommands.Delete, CommandTarget = (UIElement)sender });
  715. menu.Items.Add(new MenuItem() { Header = "Paste", Command = ApplicationCommands.Paste, CommandTarget = (UIElement)sender });
  716. // if (editCommand.TextAreaCopied)
  717. // {
  718. // menu.Items.Add(new MenuItem() { Header = LanguageHelper.CommonManager.GetString("Menu_MatchPaste"), Command = CustomCommands.PasteWithoutStyle, CommandTarget = (UIElement)sender });
  719. // }
  720. }
  721. private void AppendOpacityMenu(MenuItem parentMenu, CPDFEditArea editArea, CPDFEditType editType)
  722. {
  723. List<int> opacityList = new List<int>()
  724. {
  725. 25,50,75,100
  726. };
  727. foreach (int opacity in opacityList)
  728. {
  729. MenuItem opacityMenu = new MenuItem();
  730. opacityMenu.Header = string.Format("{0}%", opacity);
  731. opacityMenu.Click += (o, p) =>
  732. {
  733. if (editArea != null && editType == CPDFEditType.EditImage)
  734. {
  735. CPDFEditImageArea editImageArea = editArea as CPDFEditImageArea;
  736. editImageArea?.SetImageTransparency((byte)Math.Ceiling(opacity * 255 / 100D));
  737. pdfContentEditControl.RefreshThumb();
  738. UpdateImageArea(editImageArea);
  739. }
  740. else if(editArea != null && editType == CPDFEditType.EditText)
  741. {
  742. CPDFEditTextArea editTextArea = editArea as CPDFEditTextArea;
  743. editTextArea?.SetCharsFontTransparency((byte)Math.Ceiling(opacity * 255 / 100D));
  744. pdfContentEditControl.RefreshThumb();
  745. UpdateTextArea(editTextArea);
  746. }
  747. };
  748. parentMenu.Items.Add(opacityMenu);
  749. }
  750. }
  751. private void PDFToolManager_MouseLeftButtonUpHandler(object sender, MouseEventObject e)
  752. {
  753. if (e.IsCreate)
  754. {
  755. PdfViewControl.SetIsShowStampMouse(false);
  756. }
  757. }
  758. private void PDFToolManager_MouseLeftButtonDownHandler(object sender, MouseEventObject e)
  759. {
  760. isUpdateStartPoint = true;
  761. if (PdfViewControl.PDFToolManager.GetToolType() != ToolType.ContentEdit)
  762. {
  763. PropertyContainer.Child = pdfContentEditControl;
  764. //if (pdfTextCreateParam != null && PdfViewControl != null && PdfViewControl.PDFView != null)
  765. //{
  766. // if (PdfViewControl.PDFView.GetPDFEditCreateType() == CPDFEditType.EditText)
  767. // {
  768. // pdfContentEditControl.SetPDFTextEditData(pdfTextCreateParam);
  769. // }
  770. // else if (PdfViewControl.PDFView.GetPDFEditCreateType() == CPDFEditType.None)
  771. // {
  772. // pdfContentEditControl.ClearContentControl();
  773. // }
  774. //}
  775. //else
  776. //{
  777. // pdfContentEditControl.ClearContentControl();
  778. //}
  779. return;
  780. }
  781. int PageIndex = -1;
  782. CPDFEditArea editAreaArea = PdfViewControl.PDFToolManager.GetSelectedEditAreaObject(ref PageIndex);
  783. if (editAreaArea == null)
  784. {
  785. return;
  786. }
  787. else
  788. {
  789. if (editAreaArea.Type == CPDFEditType.EditText)
  790. {
  791. PDFEditParam pDFEditParam = ParamConverter.CPDFDataConverterToPDFEitParam(PdfViewControl.PDFToolManager.GetDocument(), editAreaArea, PageIndex);
  792. pdfContentEditControl.SetPDFTextEditData((TextEditParam)pDFEditParam, true);
  793. PropertyContainer.Child = pdfContentEditControl;
  794. }
  795. else if (editAreaArea.Type == CPDFEditType.EditImage && PdfViewControl != null)
  796. {
  797. UIElement pageView = sender as UIElement;
  798. if (pageView != null)
  799. {
  800. pageView.MouseLeftButtonUp -= PageView_MouseLeftButtonUp;
  801. pageView.MouseLeftButtonUp += PageView_MouseLeftButtonUp;
  802. }
  803. PDFEditParam pDFEditParam = ParamConverter.CPDFDataConverterToPDFEitParam(PdfViewControl.PDFToolManager.GetDocument(), editAreaArea, PageIndex);
  804. pdfContentEditControl.SetPDFImageEditData((ImageEditParam)pDFEditParam);
  805. PropertyContainer.Child = pdfContentEditControl;
  806. }
  807. panelState.RightPanel = PanelState.RightPanelState.PropertyPanel;
  808. }
  809. }
  810. private void PdfViewControl_SplitPDFViewToolCreated(object sender, EventArgs e)
  811. {
  812. PdfViewControl.PDFViewTool.GetCPDFViewer().UndoManager.PropertyChanged -= UndoManager_PropertyChanged;
  813. PdfViewControl.PDFViewTool.GetCPDFViewer().UndoManager.PropertyChanged += UndoManager_PropertyChanged;
  814. }
  815. /// <summary>
  816. /// Text and Image Selected Event
  817. /// </summary>
  818. private void PDFView_PDFEditActiveHandler(object sender, PDFEditParam e)
  819. {
  820. imageAreaParam = e;
  821. if (e == null)
  822. {
  823. PropertyContainer.Child = pdfContentEditControl;
  824. //if (pdfTextCreateParam != null && PdfViewControl != null && PdfViewControl.PDFView != null)
  825. //{
  826. // if (PdfViewControl.PDFView.GetPDFEditCreateType() == CPDFEditType.EditText)
  827. // {
  828. // pdfContentEditControl.SetPDFTextEditData(pdfTextCreateParam);
  829. // }
  830. // else if (PdfViewControl.PDFView.GetPDFEditCreateType() == CPDFEditType.None)
  831. // {
  832. // pdfContentEditControl.ClearContentControl();
  833. // }
  834. //}
  835. //else
  836. //{
  837. // pdfContentEditControl.ClearContentControl();
  838. //}
  839. return;
  840. }
  841. if (e.EditType == CPDFEditType.EditText)
  842. {
  843. pdfContentEditControl.SetPDFTextEditData((TextEditParam)e, true);
  844. return;
  845. }
  846. if (e.EditType == CPDFEditType.EditImage && PdfViewControl != null)
  847. {
  848. UIElement pageView = sender as UIElement;
  849. if (pageView != null)
  850. {
  851. pageView.MouseLeftButtonUp -= PageView_MouseLeftButtonUp;
  852. pageView.MouseLeftButtonUp += PageView_MouseLeftButtonUp;
  853. }
  854. pdfContentEditControl.SetPDFImageEditData((ImageEditParam)e);
  855. return;
  856. }
  857. }
  858. private void PageView_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
  859. {
  860. UIElement pageView = sender as UIElement;
  861. if (pageView != null)
  862. {
  863. pageView.MouseLeftButtonUp -= PageView_MouseLeftButtonUp;
  864. }
  865. if (imageAreaParam != null)
  866. {
  867. pdfContentEditControl.SetPDFImageEditData((ImageEditParam)imageAreaParam);
  868. }
  869. }
  870. public void ClearViewerControl()
  871. {
  872. PDFGrid.Child = null;
  873. BotaContainer.Child = null;
  874. PropertyContainer.Child = null;
  875. displaySettingsControl = null;
  876. }
  877. #region Property changed
  878. protected void OnPropertyChanged([CallerMemberName] string name = null)
  879. {
  880. PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
  881. }
  882. public void UndoManager_PropertyChanged(object sender, PropertyChangedEventArgs e)
  883. {
  884. OnPropertyChanged(e.PropertyName);
  885. if (e.PropertyName == "CanSave")
  886. {
  887. OnCanSaveChanged?.Invoke(this, CanSave);
  888. }
  889. }
  890. #endregion
  891. private void CommandBinding_Executed_Undo(object sender, ExecutedRoutedEventArgs e)
  892. {
  893. if (PdfViewControl != null && PdfViewControl.PDFViewTool != null && CanUndo)
  894. {
  895. PdfViewControl.PDFViewTool.GetCPDFViewer()?.UndoManager?.Undo();
  896. }
  897. }
  898. private void CommandBinding_Executed_Redo(object sender, ExecutedRoutedEventArgs e)
  899. {
  900. if (PdfViewControl != null && PdfViewControl.PDFViewTool != null && CanRedo)
  901. {
  902. PdfViewControl.PDFViewTool.GetCPDFViewer()?.UndoManager?.Redo();
  903. }
  904. }
  905. }
  906. }