PDFImageEditControl.xaml.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349
  1. using ComPDFKitViewer.PdfViewer;
  2. using ComPDFKitViewer;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Windows;
  6. using System.Windows.Controls;
  7. using System.Windows.Media.Imaging;
  8. using ComPDFKit.PDFPage;
  9. using System.Windows.Controls.Primitives;
  10. using Microsoft.Win32;
  11. using System.Diagnostics;
  12. using System.Drawing;
  13. using System.IO;
  14. namespace Compdfkit_Tools.Edit
  15. {
  16. public partial class PDFImageEditControl : UserControl
  17. {
  18. public CPDFViewer PDFView { get; private set; }
  19. public PDFEditEvent EditEvent { get; set; }
  20. public List<PDFEditEvent> EditMultiEvents { get; set; }
  21. public PDFImageEditControl()
  22. {
  23. InitializeComponent();
  24. Loaded += PDFImageEditControl_Loaded;
  25. Unloaded += PDFImageEditControl_Unloaded;
  26. }
  27. private void PDFImageEditControl_Unloaded(object sender, RoutedEventArgs e)
  28. {
  29. RotateUI.RotationChanged -= RotateUI_RotationChanged;
  30. FlipUI.FlipChanged -= FlipUI_FlipChanged;
  31. }
  32. public void InitWithPDFViewer(CPDFViewer newPDFView)
  33. {
  34. PDFView = newPDFView;
  35. }
  36. public void SetPDFImageEditData(PDFEditEvent newEvent)
  37. {
  38. EditEvent = null;
  39. EditMultiEvents = null;
  40. if(ImageThumbBorder!= null)
  41. {
  42. ImageThumbBorder.Visibility = Visibility.Visible;
  43. }
  44. if (ImageReplaceBtn != null)
  45. {
  46. ImageReplaceBtn.Visibility = Visibility.Visible;
  47. }
  48. if (ImageClipBtn != null)
  49. {
  50. ImageClipBtn.Visibility = Visibility.Visible;
  51. }
  52. if (newEvent != null && newEvent.EditType == CPDFEditType.EditImage)
  53. {
  54. SetImageTransparency(newEvent.Transparency);
  55. }
  56. EditEvent = newEvent;
  57. SetImageThumb();
  58. }
  59. public void SetPDFImageMultiEditData(List<PDFEditEvent> editEvents)
  60. {
  61. EditEvent = null;
  62. EditMultiEvents = null;
  63. if (ImageThumbBorder != null)
  64. {
  65. ImageThumbBorder.Visibility = Visibility.Collapsed;
  66. }
  67. if(ImageReplaceBtn != null)
  68. {
  69. ImageReplaceBtn.Visibility = Visibility.Collapsed;
  70. }
  71. if(ImageClipBtn!=null)
  72. {
  73. ImageClipBtn.Visibility = Visibility.Collapsed;
  74. }
  75. if (ImageThumbUI != null)
  76. {
  77. ImageThumbUI.Source = null;
  78. }
  79. if (editEvents != null && editEvents.Count > 0)
  80. {
  81. PDFEditEvent editEvent = editEvents[0];
  82. if (editEvent != null && editEvent.EditType == CPDFEditType.EditImage)
  83. {
  84. SetImageTransparency(editEvent.Transparency);
  85. }
  86. }
  87. EditMultiEvents = editEvents;
  88. }
  89. private void PDFImageEditControl_Loaded(object sender, RoutedEventArgs e)
  90. {
  91. RotateUI.RotationChanged += RotateUI_RotationChanged;
  92. FlipUI.FlipChanged += FlipUI_FlipChanged;
  93. }
  94. private void FlipUI_FlipChanged(object sender, bool e)
  95. {
  96. if (EditEvent != null)
  97. {
  98. if(e)
  99. {
  100. EditEvent.VerticalMirror = true;
  101. }
  102. else
  103. {
  104. EditEvent.HorizontalMirror = true;
  105. }
  106. EditEvent.UpdatePDFEditByEventArgs();
  107. SetImageThumb();
  108. }
  109. if (EditMultiEvents != null)
  110. {
  111. foreach (PDFEditEvent editEvent in EditMultiEvents)
  112. {
  113. if (e)
  114. {
  115. editEvent.VerticalMirror = true;
  116. }
  117. else
  118. {
  119. editEvent.HorizontalMirror = true;
  120. }
  121. }
  122. PDFEditEvent.UpdatePDFEditList(EditMultiEvents);
  123. }
  124. }
  125. private void RotateUI_RotationChanged(object sender, double e)
  126. {
  127. if (EditEvent != null)
  128. {
  129. EditEvent.Rotate = (int)e;
  130. EditEvent.UpdatePDFEditByEventArgs();
  131. SetImageThumb();
  132. }
  133. if (EditMultiEvents != null)
  134. {
  135. foreach (PDFEditEvent editEvent in EditMultiEvents)
  136. {
  137. editEvent.Rotate = (int)e;
  138. }
  139. PDFEditEvent.UpdatePDFEditList(EditMultiEvents);
  140. }
  141. }
  142. private void Slider_DragStarted(object sender, DragStartedEventArgs e)
  143. {
  144. Slider slider = sender as Slider;
  145. if (slider != null)
  146. {
  147. slider.Tag = "false";
  148. }
  149. }
  150. private void SliderOpacity_DragCompleted(object sender, DragCompletedEventArgs e)
  151. {
  152. Slider slider = sender as Slider;
  153. if (slider != null)
  154. {
  155. slider.Tag = "true";
  156. }
  157. if (EditEvent != null)
  158. {
  159. EditEvent.Transparency = (int)(ImasgeOpacitySlider.Value * 255);
  160. EditEvent.UpdatePDFEditByEventArgs();
  161. SetImageThumb();
  162. }
  163. if (EditMultiEvents != null)
  164. {
  165. foreach (PDFEditEvent editEvent in EditMultiEvents)
  166. {
  167. editEvent.Transparency = (int)(ImasgeOpacitySlider.Value * 255);
  168. }
  169. PDFEditEvent.UpdatePDFEditList(EditMultiEvents);
  170. }
  171. }
  172. private void SliderOpacity_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
  173. {
  174. Slider slider = sender as Slider;
  175. if(OpacityTextBox != null)
  176. {
  177. OpacityTextBox.Text = string.Format("{0}%", (int)(ImasgeOpacitySlider.Value * 100));
  178. }
  179. if (slider != null && slider.Tag != null && slider.Tag.ToString() == "false")
  180. {
  181. return;
  182. }
  183. if (EditEvent != null)
  184. {
  185. EditEvent.Transparency = (int)(ImasgeOpacitySlider.Value * 255);
  186. EditEvent.UpdatePDFEditByEventArgs();
  187. SetImageThumb();
  188. }
  189. if (EditMultiEvents != null)
  190. {
  191. foreach (PDFEditEvent editEvent in EditMultiEvents)
  192. {
  193. editEvent.Transparency = (int)(ImasgeOpacitySlider.Value * 255);
  194. }
  195. PDFEditEvent.UpdatePDFEditList(EditMultiEvents);
  196. }
  197. }
  198. private void ImageReplaceBtn_Click(object sender, RoutedEventArgs e)
  199. {
  200. if(EditMultiEvents!=null && EditMultiEvents.Count>1)
  201. {
  202. return;
  203. }
  204. if (EditEvent != null)
  205. {
  206. OpenFileDialog openFileDialog = new OpenFileDialog();
  207. openFileDialog.Filter = "Image Files(*.jpg;*.jpeg;*.png;*.bmp)|*.jpg;*.jpeg;*.png;*.bmp;";
  208. if (openFileDialog.ShowDialog() == true)
  209. {
  210. EditEvent.ReplaceImagePath = openFileDialog.FileName;
  211. EditEvent.UpdatePDFEditByEventArgs();
  212. // EditEvent = null;
  213. SetImageThumb();
  214. }
  215. }
  216. }
  217. private void ImageExportBtn_Click(object sender, RoutedEventArgs e)
  218. {
  219. if (PDFView != null)
  220. {
  221. Dictionary<int, List<Bitmap>> imageDict = PDFView.GetSelectedImages();
  222. if (imageDict != null && imageDict.Count > 0)
  223. {
  224. System.Windows.Forms.FolderBrowserDialog folderBrowser = new System.Windows.Forms.FolderBrowserDialog();
  225. if (folderBrowser.ShowDialog() == System.Windows.Forms.DialogResult.OK)
  226. {
  227. string choosePath = folderBrowser.SelectedPath;
  228. string openPath = choosePath;
  229. try
  230. {
  231. foreach (int pageIndex in imageDict.Keys)
  232. {
  233. List<Bitmap> imageList = imageDict[pageIndex];
  234. foreach (Bitmap image in imageList)
  235. {
  236. string savePath = System.IO.Path.Combine(choosePath, Guid.NewGuid() + ".jpg");
  237. image.Save(savePath, System.Drawing.Imaging.ImageFormat.Jpeg);
  238. openPath = savePath;
  239. }
  240. }
  241. Process.Start("explorer", "/select,\"" + openPath + "\"");
  242. }
  243. catch (Exception ex)
  244. {
  245. }
  246. }
  247. }
  248. }
  249. }
  250. private void ImageClipBtn_Click(object sender, RoutedEventArgs e)
  251. {
  252. if(EditMultiEvents!=null && EditMultiEvents.Count>1)
  253. {
  254. return;
  255. }
  256. if (EditEvent != null)
  257. {
  258. EditEvent.ClipImage = true;
  259. EditEvent.UpdatePDFEditByEventArgs();
  260. }
  261. }
  262. private void OpacityComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
  263. {
  264. ComboBoxItem selectItem = OpacityComboBox.SelectedItem as ComboBoxItem;
  265. if (selectItem != null && selectItem.Content != null)
  266. {
  267. if (double.TryParse(selectItem.Content.ToString().TrimEnd('%'), out double newOpacity))
  268. {
  269. OpacityTextBox.Text = selectItem.Content.ToString();
  270. ImasgeOpacitySlider.Value = newOpacity / 100.0;
  271. }
  272. }
  273. }
  274. public void SetImageThumb()
  275. {
  276. if (PDFView != null && EditEvent!=null)
  277. {
  278. try
  279. {
  280. Dictionary<int, List<Bitmap>> imageDict = PDFView.GetSelectedImages();
  281. foreach (int pageIndex in imageDict.Keys)
  282. {
  283. List<Bitmap> imageList = imageDict[pageIndex];
  284. if (imageList.Count > 0)
  285. {
  286. Bitmap bitmapImage = imageList[0];
  287. MemoryStream memoryStream = new MemoryStream();
  288. bitmapImage.Save(memoryStream, bitmapImage.RawFormat);
  289. BitmapImage imageShow = new BitmapImage();
  290. imageShow.BeginInit();
  291. imageShow.StreamSource = memoryStream;
  292. imageShow.EndInit();
  293. ImageThumbUI.Source = imageShow;
  294. break;
  295. }
  296. }
  297. }
  298. catch (Exception ex)
  299. {
  300. }
  301. }
  302. }
  303. public void SetImageTransparency(double transparency)
  304. {
  305. ImasgeOpacitySlider.Value = transparency / 255D;
  306. OpacityTextBox.Text = string.Format("{0}%", (int)(Math.Round(ImasgeOpacitySlider.Value * 100)));
  307. }
  308. }
  309. }