星火微课系统客户端
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

XHMicroLessonSystemWindow.xaml.cs 28KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795
  1. using Aspose.Words;
  2. using Aspose.Words.Saving;
  3. using Common.system;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Drawing.Imaging;
  7. using System.IO;
  8. using System.Threading;
  9. using System.Windows;
  10. using System.Windows.Forms;
  11. using System.Windows.Ink;
  12. using System.Windows.Input;
  13. using System.Windows.Media;
  14. using System.Windows.Media.Imaging;
  15. using XHWK.Model;
  16. namespace XHWK.WKTool
  17. {
  18. /// <summary>
  19. /// 主页面
  20. /// </summary>
  21. public partial class XHMicroLessonSystemWindow : Window
  22. {
  23. #region 初始值
  24. /// <summary>
  25. /// 文件目录窗口
  26. /// </summary>
  27. //private CountdownWindow FileDirectoryWindows = null;
  28. private FolderBrowserDialog Ofd;
  29. private DialogResult Result;
  30. public readonly BlackboardNew myblackboard;
  31. private System.Windows.Forms.DialogResult result;
  32. private System.Windows.Forms.OpenFileDialog ofd;
  33. //声明一个 DrawingAttributes 类型的变量
  34. DrawingAttributes drawingAttributes;
  35. #endregion
  36. #region 初始化
  37. /// <summary>
  38. /// 主页面
  39. /// </summary>
  40. public XHMicroLessonSystemWindow()
  41. {
  42. InitializeComponent();
  43. myblackboard = new BlackboardNew(blackboard_canvas);
  44. APP.pageData.pagenum = 1;
  45. APP.pageData.currpage = 1;
  46. DataContext = APP.pageData;
  47. Initialize();
  48. }
  49. /// <summary>
  50. /// 初始化
  51. /// </summary>
  52. public void Initialize()
  53. {
  54. //创建 DrawingAttributes 类的一个实例
  55. drawingAttributes = new DrawingAttributes();
  56. //将 InkCanvas 的 DefaultDrawingAttributes 属性的值赋成创建的 DrawingAttributes 类的对象的引用
  57. //InkCanvas 通过 DefaultDrawingAttributes 属性来获取墨迹的各种设置,该属性的类型为 DrawingAttributes 型
  58. blackboard_canvas.DefaultDrawingAttributes = drawingAttributes;
  59. drawingAttributes.FitToCurve = true;
  60. wfhCamera.Visibility = Visibility.Hidden;
  61. }
  62. #endregion
  63. #region 事件
  64. /// <summary>
  65. /// 窗体移动
  66. /// </summary>
  67. /// <param name="sender"></param>
  68. /// <param name="e"></param>
  69. private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
  70. {
  71. DragMove();
  72. }
  73. /// <summary>
  74. /// 摄像头打开事件
  75. /// </summary>
  76. /// <param name="sender"></param>
  77. /// <param name="e"></param>
  78. private void RbnOpen_Click(object sender, RoutedEventArgs e)
  79. {
  80. //UCCamera win = new UCCamera();
  81. ////win.Topmost = true;
  82. //win.ShowDialog();
  83. wfhCamera.Visibility = Visibility.Visible;
  84. CameraHelper.IsDisplay = true;
  85. CameraHelper.SourcePlayer = player;
  86. CameraHelper.UpdateCameraDevices();
  87. if (CameraHelper.CameraDevices.Count > 0)
  88. {
  89. CameraHelper.SetCameraDevice(0);
  90. }
  91. }
  92. /// <summary>
  93. /// 摄像头关闭事件
  94. /// </summary>
  95. /// <param name="sender"></param>
  96. /// <param name="e"></param>
  97. private void RbnTurnOff_Click(object sender, RoutedEventArgs e)
  98. {
  99. wfhCamera.Visibility = Visibility.Hidden;
  100. CameraHelper.CloseDevice();
  101. }
  102. #endregion
  103. /// <summary>
  104. /// 录屏事件
  105. /// </summary>
  106. /// <param name="sender"></param>
  107. /// <param name="e"></param>
  108. private void BtnScreenRecording_Click(object sender, RoutedEventArgs e)
  109. {
  110. if(APP.IsLoginType==false)
  111. {
  112. Login();
  113. return;
  114. }
  115. if (APP.W_CountdownWindow == null)
  116. {
  117. APP.W_CountdownWindow = new CountdownWindow();
  118. //APP.W_CountdownWindow.Topmost = true;
  119. }
  120. else
  121. {
  122. APP.W_CountdownWindow.Initialize();
  123. APP.W_CountdownWindow.Topmost = true;
  124. }
  125. APP.W_CountdownWindow.Show();
  126. if (APP.W_ScreenRecordingToolbarWindow == null)
  127. {
  128. APP.W_ScreenRecordingToolbarWindow = new ScreenRecordingToolbarWindow
  129. {
  130. Topmost = true
  131. };
  132. APP.W_ScreenRecordingToolbarWindow.Initialize();
  133. }
  134. else
  135. {
  136. APP.W_ScreenRecordingToolbarWindow.Initialize();
  137. }
  138. //显示在右下角
  139. //APP.W_ScreenRecordingToolbarWindow.Left= PrimaryScreen.DESKTOP.Width - APP.W_ScreenRecordingToolbarWindow.Width - 10;
  140. //APP.W_ScreenRecordingToolbarWindow.Top= PrimaryScreen.DESKTOP.Height - APP.W_ScreenRecordingToolbarWindow.Height - 60;
  141. this.Hide();
  142. Hide();
  143. }
  144. /// <summary>
  145. /// 上传事件
  146. /// </summary>
  147. /// <param name="sender"></param>
  148. /// <param name="e"></param>
  149. private void BtnUpload_Click(object sender, RoutedEventArgs e)
  150. {
  151. if (APP.IsLoginType == false)
  152. {
  153. Login();
  154. return;
  155. }
  156. FileDirectoryWindow fileDirectoryWindow = new FileDirectoryWindow();
  157. fileDirectoryWindow.Show();
  158. }
  159. /// <summary>
  160. /// 关闭事件
  161. /// </summary>
  162. /// <param name="sender"></param>
  163. /// <param name="e"></param>
  164. private void BtnDown_Click(object sender, RoutedEventArgs e)
  165. {
  166. this.Close();
  167. }
  168. /// <summary>
  169. /// 设置 保存事件
  170. /// </summary>
  171. /// <param name="sender"></param>
  172. /// <param name="e"></param>
  173. private void BtnSave_Click(object sender, RoutedEventArgs e)
  174. {
  175. GridMain.Visibility = Visibility.Visible;
  176. gridSetUp.Visibility = Visibility.Collapsed;
  177. }
  178. /// <summary>
  179. /// 设置事件
  180. /// </summary>
  181. /// <param name="sender"></param>
  182. /// <param name="e"></param>
  183. private void BtnSetUp_Click(object sender, RoutedEventArgs e)
  184. {
  185. GridMain.Visibility = Visibility.Collapsed;
  186. gridSetUp.Visibility = Visibility.Visible;
  187. }
  188. /// <summary>
  189. /// 设置 浏览事件
  190. /// </summary>
  191. /// <param name="sender"></param>
  192. /// <param name="e"></param>
  193. private void BtnBrowse_Click(object sender, RoutedEventArgs e)
  194. {
  195. string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
  196. Ofd = new System.Windows.Forms.FolderBrowserDialog();
  197. Result = Ofd.ShowDialog();
  198. if (Result == System.Windows.Forms.DialogResult.OK)
  199. {
  200. if (Ofd.SelectedPath != "")
  201. {
  202. txbStoragePath.Text = Ofd.SelectedPath;
  203. //string ApplicationData = ZConfig.dataPath + "fileStorageAddress.txt";
  204. //string temp = ofd.SelectedPath;
  205. //System.IO.File.WriteAllText(ApplicationData, temp, Encoding.Default);
  206. }
  207. }
  208. }
  209. /// <summary>
  210. /// 画笔颜色事件 白色
  211. /// </summary>
  212. /// <param name="sender"></param>
  213. /// <param name="e"></param>
  214. private void BtnWhite_Click(object sender, RoutedEventArgs e)
  215. {
  216. //创建 DrawingAttributes 类的一个实例
  217. drawingAttributes = new DrawingAttributes();
  218. //将 InkCanvas 的 DefaultDrawingAttributes 属性的值赋成创建的 DrawingAttributes 类的对象的引用
  219. //InkCanvas 通过 DefaultDrawingAttributes 属性来获取墨迹的各种设置,该属性的类型为 DrawingAttributes 型
  220. blackboard_canvas.DefaultDrawingAttributes = drawingAttributes;
  221. //设置 DrawingAttributes 的 Color 属性设置颜色
  222. drawingAttributes.Color = Colors.White;
  223. }
  224. /// <summary>
  225. /// 画笔颜色事件 红色
  226. /// </summary>
  227. /// <param name="sender"></param>
  228. /// <param name="e"></param>
  229. private void BtnRed_Click(object sender, RoutedEventArgs e)
  230. {
  231. //设置 DrawingAttributes 的 Color 属性设置颜色
  232. drawingAttributes.Color = Colors.Red;
  233. }
  234. /// <summary>
  235. /// 画笔颜色事件 灰色
  236. /// </summary>
  237. /// <param name="sender"></param>
  238. /// <param name="e"></param>
  239. private void BtnGray_Click(object sender, RoutedEventArgs e)
  240. {
  241. drawingAttributes.Color = Colors.Gray;
  242. }
  243. /// <summary>
  244. /// 画笔颜色事件 青色
  245. /// </summary>
  246. /// <param name="sender"></param>
  247. /// <param name="e"></param>
  248. private void BtnCyanBlue_Click(object sender, RoutedEventArgs e)
  249. {
  250. drawingAttributes.Color = Colors.LimeGreen;
  251. }
  252. /// <summary>
  253. /// 画笔颜色事件 黄色
  254. /// </summary>
  255. /// <param name="sender"></param>
  256. /// <param name="e"></param>
  257. private void BtnYellow_Click(object sender, RoutedEventArgs e)
  258. {
  259. drawingAttributes.Color = Colors.Gold;
  260. }
  261. /// <summary>
  262. /// 画笔颜色事件 蓝色
  263. /// </summary>
  264. /// <param name="sender"></param>
  265. /// <param name="e"></param>
  266. private void BtnBlue_Click(object sender, RoutedEventArgs e)
  267. {
  268. drawingAttributes.Color = Colors.DeepSkyBlue;
  269. }
  270. /// <summary>
  271. /// 画笔粗细事件 细
  272. /// </summary>
  273. /// <param name="sender"></param>
  274. /// <param name="e"></param>
  275. private void RbnFine_Click(object sender, RoutedEventArgs e)
  276. {
  277. drawingAttributes.Width = 1;
  278. drawingAttributes.Height = 1;
  279. }
  280. /// <summary>
  281. /// 画笔粗细事件 中
  282. /// </summary>
  283. /// <param name="sender"></param>
  284. /// <param name="e"></param>
  285. private void RbnIn_Click(object sender, RoutedEventArgs e)
  286. {
  287. drawingAttributes.Width = 3;
  288. drawingAttributes.Height = 3;
  289. }
  290. /// <summary>
  291. /// 画笔粗细事件 粗
  292. /// </summary>
  293. /// <param name="sender"></param>
  294. /// <param name="e"></param>
  295. private void RbnCrude_Click(object sender, RoutedEventArgs e)
  296. {
  297. drawingAttributes.Width = 5;
  298. drawingAttributes.Height = 5;
  299. }
  300. /// <summary>
  301. /// 登陆事件
  302. /// </summary>
  303. /// <param name="sender"></param>
  304. /// <param name="e"></param>
  305. private void BtnLoginType_Click(object sender, RoutedEventArgs e)
  306. {
  307. Login();
  308. }
  309. /// <summary>
  310. /// 登陆
  311. /// </summary>
  312. private void Login()
  313. {
  314. if (APP.W_LoginWindow == null)
  315. {
  316. APP.W_LoginWindow = new LoginWindow();
  317. }
  318. else
  319. {
  320. APP.W_LoginWindow.Initialize();
  321. }
  322. APP.W_LoginWindow.ShowDialog();
  323. if (APP.IsLoginType)
  324. {
  325. txbLoginType.Text = APP.UserInfo.Username;
  326. }
  327. else
  328. {
  329. txbLoginType.Text = "未登录";
  330. }
  331. }
  332. /// <summary>
  333. /// 截图事件
  334. /// </summary>
  335. /// <param name="sender"></param>
  336. /// <param name="e"></param>
  337. private void BtnScreenshot_Click(object sender, RoutedEventArgs e)
  338. {
  339. if (APP.IsLoginType == false)
  340. {
  341. Login();
  342. return;
  343. }
  344. }
  345. /// <summary>
  346. /// 导入事件
  347. /// </summary>
  348. /// <param name="sender"></param>
  349. /// <param name="e"></param>
  350. private void BtnImport_Click(object sender, RoutedEventArgs e)
  351. {
  352. if (APP.IsLoginType == false)
  353. {
  354. Login();
  355. return;
  356. }
  357. try
  358. {
  359. string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
  360. ofd = new System.Windows.Forms.OpenFileDialog
  361. {
  362. Filter = "文档|*.docx;*.doc",
  363. InitialDirectory = desktopPath,
  364. Multiselect = false,
  365. AddExtension = true,
  366. DereferenceLinks = true
  367. };
  368. new Thread(
  369. o =>
  370. {
  371. Thread.Sleep(400);
  372. Dispatcher.Invoke(new Action(() =>
  373. {
  374. openDialog();
  375. }
  376. ));
  377. })
  378. {
  379. IsBackground = true
  380. }.Start();
  381. }
  382. catch (Exception ex)
  383. {
  384. LogHelper.WriteErrLog("【导入(BtnImport_Click)" + ex.Message, ex);
  385. }
  386. }
  387. private void openDialog()
  388. {
  389. result = ofd.ShowDialog();
  390. if (result == System.Windows.Forms.DialogResult.OK)
  391. {
  392. if (ofd.FileName != "")
  393. {
  394. string filepath = ofd.FileName;
  395. string path = AppDomain.CurrentDomain.BaseDirectory+ "Temp\\";
  396. APP.Paths = ConvertWordToImage(filepath, path, "", 0, 0, null, 0).ToArray();
  397. for(int i=0;i<APP.Paths.Length;i++)
  398. {
  399. APP.pageData.pagenum += 1;
  400. APP.pageData.currpage = APP.pageData.pagenum;
  401. myblackboard.changepage(APP.pageData.currpage - 1);
  402. }
  403. if (!string.IsNullOrWhiteSpace(txbCurrpage.Text) && APP.pageData.currpage < APP.Paths.Length)
  404. {
  405. imgCanvas.Source = new BitmapImage(new Uri(APP.Paths[Convert.ToInt32(txbCurrpage.Text) - 1]));
  406. }
  407. else
  408. {
  409. imgCanvas.Source = null;
  410. }
  411. }
  412. }
  413. }
  414. #region 录制窗口
  415. /// <summary>
  416. /// 录制窗口内容
  417. /// </summary>
  418. /// <param name="sender"></param>
  419. /// <param name="e"></param>
  420. private void BtnRecord_Click(object sender, RoutedEventArgs e)
  421. {
  422. if (APP.IsLoginType == false)
  423. {
  424. Login();
  425. return;
  426. }
  427. }
  428. /// <summary>
  429. /// 视频保存路径
  430. /// </summary>
  431. string RecordingPath;
  432. /// <summary>
  433. /// 图片保存路径
  434. /// </summary>
  435. string ImgPath;
  436. /// <summary>
  437. /// 音频保存路径名
  438. /// </summary>
  439. string AudioPathName;
  440. /// <summary>
  441. /// 视频保存路径名
  442. /// </summary>
  443. string VideoSavePathName;
  444. /// <summary>
  445. /// 暂停录制
  446. /// </summary>
  447. bool IsSuspendR = true;
  448. /// <summary>
  449. /// 是否首次录制
  450. /// </summary>
  451. bool IsFirstR = true;
  452. /// <summary>
  453. /// 图片
  454. /// </summary>
  455. int ImgNum = 0;
  456. /// <summary>
  457. /// 是否开始截图计数
  458. /// </summary>
  459. bool IsStartCount = false;
  460. /// <summary>
  461. /// 开始录制和暂停录制
  462. /// </summary>
  463. void StartRecord()
  464. {
  465. if (IsSuspendR)
  466. {
  467. if (IsFirstR)//是否第一次录制 初始化录制
  468. {
  469. RecordingPath = APP.WKData.WkPath;
  470. ImgPath = APP.WKData.WkPath+"temp/Image/";
  471. AudioPathName = APP.WKData.WkPath + "temp/audio/";
  472. FileToolsCommon.DeleteDirectory(APP.WKData.WkPath + "temp/");
  473. FileToolsCommon.CreateDirectory(RecordingPath);
  474. FileToolsCommon.CreateDirectory(ImgPath);
  475. FileToolsCommon.CreateDirectory(AudioPathName);
  476. AudioPathName += APP.WKData.WkName+".MP3";
  477. VideoSavePathName = RecordingPath + APP.WKData.WkName+"_录制."+ ((Enum_VideoType)int.Parse(FileToolsCommon.GetConfigValue("VideoType"))).ToString();
  478. if(FileToolsCommon.IsExistFile(VideoSavePathName))
  479. {
  480. }
  481. IsFirstR = false;
  482. ImgNum = 0;
  483. new Thread(new ThreadStart(new Action(() =>
  484. {
  485. while (true)
  486. {
  487. Thread.Sleep(200);
  488. if (IsStartCount)
  489. {
  490. ImgNum++;
  491. Dispatcher.Invoke(() =>
  492. {
  493. string FilePathName = ImgPath + ImgNum + ".png";
  494. ImageHelper.SaveUIToImage(GridMain, FilePathName, (int)GridMain.ActualWidth, (int)GridMain.ActualHeight);
  495. });
  496. }
  497. }
  498. }))).Start();
  499. }
  500. //继续录制
  501. IsSuspendR = false;
  502. //BtnRecording.Content = "暂停录制";
  503. ImgRecord.Source = new BitmapImage(new Uri("pack://application:,,,/Images/microLessonSystem_23.png"));
  504. try
  505. {
  506. APP.FFmpeg.StartRecordingAudio(AudioPathName);
  507. new Thread(new ThreadStart(new Action(() =>
  508. {
  509. Thread.Sleep(1000);
  510. //Dispatcher.Invoke(() =>
  511. //{
  512. IsStartCount = true;
  513. //});
  514. }))).Start();
  515. }
  516. catch (Exception ex)
  517. {
  518. System.Windows.MessageBox.Show(ex.Message);
  519. }
  520. }
  521. else
  522. {
  523. //暂停
  524. IsSuspendR = true;
  525. ImgRecord.Source = new BitmapImage(new Uri("pack://application:,,,/Images/microLessonSystem_14.png"));
  526. try
  527. {
  528. APP.FFmpeg.SuspendFFmpeg();
  529. new Thread(new ThreadStart(new Action(() =>
  530. {
  531. while (APP.FFmpeg.myProcess != null)
  532. {
  533. Thread.Sleep(100);
  534. }
  535. IsStartCount = false;
  536. }))).Start();
  537. }
  538. catch (Exception ex)
  539. {
  540. System.Windows.MessageBox.Show(ex.Message);
  541. }
  542. }
  543. }
  544. /// <summary>
  545. /// 停止录制并生成录制文件
  546. /// </summary>
  547. void EndRecord()
  548. {
  549. IsFirstR = true;
  550. IsSuspendR = true;
  551. ImgRecord.Source = new BitmapImage(new Uri("pack://application:,,,/Images/microLessonSystem_14.png"));
  552. try
  553. {
  554. APP.FFmpeg.StopFFmpeg(AudioPathName);
  555. new Thread(new ThreadStart(new Action(() =>
  556. {
  557. while (APP.FFmpeg.myProcess != null)
  558. {
  559. Thread.Sleep(100);
  560. }
  561. Dispatcher.Invoke(() =>
  562. {
  563. IsStartCount = false;
  564. });
  565. }))).Start();
  566. new Thread(new ThreadStart(new Action(() =>
  567. {
  568. while (APP.FFmpeg.myProcess != null)
  569. {
  570. Thread.Sleep(100);
  571. }
  572. }))).Start();
  573. APP.FFmpeg.SynthesisVideo(ImgPath, AudioPathName, VideoSavePathName, 5, (int)GridMain.ActualWidth, (int)GridMain.ActualHeight);
  574. }
  575. catch (Exception ex)
  576. {
  577. System.Windows.MessageBox.Show(ex.Message);
  578. }
  579. }
  580. #endregion
  581. /// <summary>
  582. /// 停止录制窗口内容
  583. /// </summary>
  584. /// <param name="sender"></param>
  585. /// <param name="e"></param>
  586. private void BtnStop_Click(object sender, RoutedEventArgs e)
  587. {
  588. if (APP.IsLoginType == false)
  589. {
  590. Login();
  591. return;
  592. }
  593. }
  594. /// <summary>
  595. /// 增加事件
  596. /// </summary>
  597. /// <param name="sender"></param>
  598. /// <param name="e"></param>
  599. private void BtnAdd_Click(object sender, RoutedEventArgs e)
  600. {
  601. if (APP.IsLoginType == false)
  602. {
  603. Login();
  604. return;
  605. }
  606. }
  607. /// <summary>
  608. /// 打印事件
  609. /// </summary>
  610. /// <param name="sender"></param>
  611. /// <param name="e"></param>
  612. private void BtnPrint_Click(object sender, RoutedEventArgs e)
  613. {
  614. }
  615. /// <summary>
  616. /// 我的
  617. /// </summary>
  618. /// <param name="sender"></param>
  619. /// <param name="e"></param>
  620. private void BtnMyMine_Click(object sender, RoutedEventArgs e)
  621. {
  622. if (APP.IsLoginType == false)
  623. {
  624. Login();
  625. return;
  626. }
  627. }
  628. /// <summary>
  629. /// 上一页
  630. /// </summary>
  631. /// <param name="sender"></param>
  632. /// <param name="e"></param>
  633. private void last_button_Click(object sender, RoutedEventArgs e)
  634. {
  635. if (APP.pageData.currpage > 1)
  636. {
  637. APP.pageData.currpage -= 1;
  638. myblackboard.changepage(APP.pageData.currpage - 1);
  639. if(APP.Paths.Length>0)
  640. {
  641. if (!string.IsNullOrWhiteSpace(txbCurrpage.Text) && APP.pageData.currpage < APP.Paths.Length&& APP.pageData.currpage > 0)
  642. {
  643. imgCanvas.Source = new BitmapImage(new Uri(APP.Paths[APP.pageData.currpage - 1]));
  644. }
  645. else
  646. {
  647. imgCanvas.Source = null;
  648. }
  649. }
  650. }
  651. }
  652. /// <summary>
  653. /// 下一页
  654. /// </summary>
  655. /// <param name="sender"></param>
  656. /// <param name="e"></param>
  657. private void next_btn_Click(object sender, RoutedEventArgs e)
  658. {
  659. if (APP.pageData.currpage < APP.pageData.pagenum)
  660. {
  661. APP.pageData.currpage += 1;
  662. myblackboard.changepage(APP.pageData.currpage - 1);
  663. if (APP.Paths.Length > 0)
  664. {
  665. if (!string.IsNullOrWhiteSpace(txbCurrpage.Text) && APP.pageData.currpage < APP.Paths.Length)
  666. {
  667. imgCanvas.Source = new BitmapImage(new Uri(APP.Paths[APP.pageData.currpage]));
  668. }
  669. else
  670. {
  671. imgCanvas.Source = null;
  672. }
  673. }
  674. }
  675. }
  676. /// <summary>
  677. /// 添加
  678. /// </summary>
  679. /// <param name="sender"></param>
  680. /// <param name="e"></param>
  681. private void add_button_Click(object sender, RoutedEventArgs e)
  682. {
  683. APP.pageData.pagenum += 1;
  684. APP.pageData.currpage = APP.pageData.pagenum;
  685. myblackboard.changepage(APP.pageData.currpage - 1);
  686. }
  687. /// <summary>
  688. /// 将Word文档转换为图片的方法(该方法基于第三方DLL),你可以像这样调用该方法: ConvertPDF2Image("F:\\PdfFile.doc", "F:\\",
  689. /// "ImageFile", 1, 20, ImageFormat.Png, 256);
  690. /// </summary>
  691. /// <param name="pdfInputPath">Word文件路径</param>
  692. /// <param name="imageOutputPath">图片输出路径,如果为空,默认值为Word所在路径</param>
  693. /// <param name="imageName">图片的名字,不需要带扩展名,如果为空,默认值为Word的名称</param>
  694. /// <param name="startPageNum">从PDF文档的第几页开始转换,如果为0,默认值为1</param>
  695. /// <param name="endPageNum">从PDF文档的第几页开始停止转换,如果为0,默认值为Word总页数</param>
  696. /// <param name="imageFormat">设置所需图片格式,如果为null,默认格式为PNG</param>
  697. /// <param name="resolution">设置图片的像素,数字越大越清晰,如果为0,默认值为128,建议最大值不要超过1024</param>
  698. public List<string> ConvertWordToImage(string wordInputPath, string imageOutputPath,
  699. string imageName, int startPageNum, int endPageNum, ImageFormat imageFormat, float resolution)
  700. {
  701. // 返回的图片绝对路径集合
  702. List<string> images = new List<string>();
  703. try
  704. {
  705. // open word file
  706. Aspose.Words.Document doc = new Aspose.Words.Document(wordInputPath);
  707. // validate parameter
  708. if (doc == null) { throw new Exception("Word文件无效或者Word文件被加密!"); }
  709. if (imageOutputPath.Trim().Length == 0) { imageOutputPath = Path.GetDirectoryName(wordInputPath); }
  710. if (!Directory.Exists(imageOutputPath)) { Directory.CreateDirectory(imageOutputPath); }
  711. if (imageName.Trim().Length == 0) { imageName = Path.GetFileNameWithoutExtension(wordInputPath); }
  712. if (startPageNum <= 0) { startPageNum = 1; }
  713. if (endPageNum > doc.PageCount || endPageNum <= 0) { endPageNum = doc.PageCount; }
  714. if (startPageNum > endPageNum) { int tempPageNum = startPageNum; startPageNum = endPageNum; endPageNum = startPageNum; }
  715. if (imageFormat == null) { imageFormat = ImageFormat.Png; }
  716. if (resolution <= 0) { resolution = 128; }
  717. ImageSaveOptions imageSaveOptions = new ImageSaveOptions(GetSaveFormat(imageFormat))
  718. {
  719. Resolution = resolution
  720. };
  721. // start to convert each page
  722. for (int i = startPageNum; i <= endPageNum; i++)
  723. {
  724. imageSaveOptions.PageIndex = i - 1;
  725. doc.Save(Path.Combine(imageOutputPath, imageName) + "_" + APP.num.ToString() + "." + imageFormat.ToString(), imageSaveOptions);
  726. images.Add(Path.Combine(imageOutputPath, imageName) + "_" + APP.num.ToString() + "." + imageFormat.ToString());
  727. APP.num++;
  728. }
  729. imageSaveOptions = null;
  730. doc = null;
  731. }
  732. catch (Exception ex)
  733. {
  734. System.Windows.MessageBox.Show("文档已打开,请关闭后重试!");
  735. LogHelper.WriteErrLog("【课堂考试(ExamWindow)】错误日志:" + ex.Message, ex);
  736. }
  737. return images;
  738. }
  739. private static SaveFormat GetSaveFormat(ImageFormat imageFormat)
  740. {
  741. SaveFormat sf;// = SaveFormat.Unknown;
  742. if (imageFormat.Equals(ImageFormat.Png))
  743. {
  744. sf = SaveFormat.Png;
  745. }
  746. else if (imageFormat.Equals(ImageFormat.Jpeg))
  747. {
  748. sf = SaveFormat.Jpeg;
  749. }
  750. else if (imageFormat.Equals(ImageFormat.Tiff))
  751. {
  752. sf = SaveFormat.Tiff;
  753. }
  754. else if (imageFormat.Equals(ImageFormat.Bmp))
  755. {
  756. sf = SaveFormat.Bmp;
  757. }
  758. else
  759. {
  760. sf = SaveFormat.Unknown;
  761. }
  762. return sf;
  763. }
  764. }
  765. }