PDFToolsHelper.cs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421
  1. using PDF_Office.Model.PDFTool;
  2. using PDF_Office.Properties;
  3. using PDFSettings;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. namespace PDF_Office.Helper
  10. {
  11. /// <summary>
  12. /// 预设需求:远程控制对PDF工具进行排序
  13. /// </summary>
  14. public enum PDFToolType
  15. {
  16. /// <summary>
  17. /// 普通工具
  18. /// </summary>
  19. Normal,
  20. /// <summary>
  21. /// 常用工具
  22. /// </summary>
  23. Common,
  24. /// <summary>
  25. ///付费工具
  26. /// </summary>
  27. Payment,
  28. /// <summary>
  29. /// 优势工具
  30. /// </summary>
  31. Advantage,
  32. /// <summary>
  33. /// 无需打开文档
  34. /// </summary>
  35. NoNeedToOpenDoc
  36. }
  37. public enum PDFFnType
  38. {
  39. Split,
  40. Extract,
  41. Insert,
  42. Compress,
  43. Merge,
  44. Print,
  45. Security,
  46. ConvertPDF,
  47. PDFToWord,
  48. PDFToExcel,
  49. PDFToPPT,
  50. ImageToPDF,
  51. OCR,
  52. WaterMark,
  53. HeaderFooter,
  54. BatesNumbers,
  55. Batch,
  56. Background,
  57. CompareDoc
  58. }
  59. /// <summary>
  60. /// PDF工具初始化类型
  61. /// </summary>
  62. internal class PDFToolsInit
  63. {
  64. public ToolItem toolItem { get; private set; }
  65. public PDFToolsInit()
  66. {
  67. toolItem = new ToolItem();
  68. }
  69. /// <summary>
  70. /// 图标
  71. /// </summary>
  72. public void SetImagePath(string path)
  73. {
  74. toolItem.FnImg = path;
  75. }
  76. /// <summary>
  77. /// 初始化UI显示内容
  78. /// </summary>
  79. public void SetContent(string fnName,string fnInfo)
  80. {
  81. toolItem.FnName = fnName;
  82. toolItem.FnInfo = fnInfo;
  83. }
  84. /// <summary>
  85. /// 初始化功能
  86. /// </summary>
  87. public void SetFnType(PDFFnType fnType)
  88. {
  89. toolItem.FnType = fnType;
  90. }
  91. }
  92. public class PDFToolsHelper
  93. {
  94. public List<ToolItem> AllTools = null;
  95. public List<ToolItem> QuickTools = null;
  96. public List<ToolItem> MoreTools = null;
  97. private static PDFToolsHelper pDFToolsHelper;
  98. public const int QuickToolCount = 8;//快捷工具显示的个数
  99. public static PDFToolsHelper GetInstance()
  100. {
  101. if (pDFToolsHelper == null)
  102. pDFToolsHelper = new PDFToolsHelper();
  103. return pDFToolsHelper;
  104. }
  105. private PDFToolsHelper()
  106. {
  107. InitPDFTools();
  108. }
  109. private void InitPDFTools()
  110. {
  111. AllTools = new List<ToolItem>();
  112. QuickTools = new List<ToolItem>();
  113. MoreTools = new List<ToolItem>();
  114. //测试代码
  115. //Settings.Default.AllPDFToolsList.Clear();
  116. //Settings.Default.QuickPDFToolsList.Clear();
  117. //Settings.Default.Save();
  118. InitAllTools();
  119. InitQuickTools();
  120. InitMoreTools();
  121. // ContianNewTools();
  122. }
  123. private void InitAllTools()
  124. {
  125. var split = new PDFToolsInit();
  126. split.SetFnType(PDFFnType.Split);
  127. split.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/split.png");
  128. split.SetContent("拆分", "Batch convert, compress, secure, watermark PDFs.");
  129. var extract = new PDFToolsInit();
  130. extract.SetFnType(PDFFnType.Extract);
  131. extract.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/extract.png");
  132. extract.SetContent("提取", "Batch convert, compress, secure, watermark PDFs.");
  133. var insert = new PDFToolsInit();
  134. insert.SetFnType(PDFFnType.Insert);
  135. insert.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/insert.png");
  136. insert.SetContent("插入", "Batch convert, compress, secure, watermark PDFs.");
  137. var compress = new PDFToolsInit();
  138. compress.SetFnType(PDFFnType.Compress);
  139. compress.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/compress.png");
  140. compress.SetContent("压缩", "Batch convert, compress, secure, watermark PDFs.");
  141. var merge = new PDFToolsInit();
  142. merge.SetFnType(PDFFnType.Merge);
  143. merge.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/merge.png");
  144. merge.SetContent("合并", "Batch convert, compress, secure, watermark PDFs.");
  145. var print = new PDFToolsInit();
  146. print.SetFnType(PDFFnType.Print);
  147. print.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/print.png");
  148. print.SetContent("打印", "Batch convert, compress, secure, watermark PDFs.");
  149. var security = new PDFToolsInit();
  150. security.SetFnType(PDFFnType.Security);
  151. security.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/security.png");
  152. security.SetContent("安全", "Batch convert, compress, secure, watermark PDFs.");
  153. var convertPDF = new PDFToolsInit();
  154. convertPDF.SetFnType(PDFFnType.ConvertPDF);
  155. convertPDF.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/convert.png");
  156. convertPDF.SetContent("转档PDF", "Batch convert, compress, secure, watermark PDFs.");
  157. var pDFToWord = new PDFToolsInit();
  158. pDFToWord.SetFnType(PDFFnType.PDFToWord);
  159. pDFToWord.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/pdf-to-word.png");
  160. pDFToWord.SetContent("PDF转Word", "Batch convert, compress, secure, watermark PDFs.");
  161. var pDFToExcel = new PDFToolsInit();
  162. pDFToExcel.SetFnType(PDFFnType.PDFToExcel);
  163. pDFToExcel.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/pdf-to-excel.png");
  164. pDFToExcel.SetContent("PDF转Excel", "Batch convert, compress, secure, watermark PDFs.");
  165. var pDFToPPT = new PDFToolsInit();
  166. pDFToPPT.SetFnType(PDFFnType.PDFToPPT);
  167. pDFToPPT.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/pdf-to-ppt.png");
  168. pDFToPPT.SetContent("PDF转PPT", "Batch convert, compress, secure, watermark PDFs.");
  169. var imageToPDF = new PDFToolsInit();
  170. imageToPDF.SetFnType(PDFFnType.ImageToPDF);
  171. imageToPDF.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/image.png");
  172. imageToPDF.SetContent("图片转PDF", "Batch convert, compress, secure, watermark PDFs.");
  173. var oCR = new PDFToolsInit();
  174. oCR.SetFnType(PDFFnType.OCR);
  175. oCR.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/ocr.png");
  176. oCR.SetContent("OCR", "Batch convert, compress, secure, watermark PDFs.");
  177. var waterMark = new PDFToolsInit();
  178. waterMark.SetFnType(PDFFnType.WaterMark);
  179. waterMark.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/watermark.png");
  180. waterMark.SetContent("水印", "Batch convert, compress, secure, watermark PDFs.");
  181. var headerFooter = new PDFToolsInit();
  182. headerFooter.SetFnType(PDFFnType.HeaderFooter);
  183. headerFooter.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/header&footer.png");
  184. headerFooter.SetContent("页眉页脚", "Batch convert, compress, secure, watermark PDFs.");
  185. var batesNumbers = new PDFToolsInit();
  186. batesNumbers.SetFnType(PDFFnType.BatesNumbers);
  187. batesNumbers.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/batesnumbers.png");
  188. batesNumbers.SetContent("贝茨Bates码", "Batch convert, compress, secure, watermark PDFs.");
  189. var batch = new PDFToolsInit();
  190. batch.SetFnType(PDFFnType.Batch);
  191. batch.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/batch.png");
  192. batch.SetContent("批量处理", "Batch convert, compress, secure, watermark PDFs.");
  193. var background = new PDFToolsInit();
  194. background.SetFnType(PDFFnType.Background);
  195. background.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/background.png");
  196. background.SetContent("背景", "Batch convert, compress, secure, watermark PDFs.");
  197. var compareDoc = new PDFToolsInit();
  198. compareDoc.SetFnType(PDFFnType.CompareDoc);
  199. compareDoc.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/compress.png");
  200. compareDoc.SetContent("文件对比", "Batch convert, compress, secure, watermark PDFs.");
  201. AllTools.Add(split.toolItem);
  202. AllTools.Add(extract.toolItem);
  203. AllTools.Add(insert.toolItem);
  204. AllTools.Add(compress.toolItem);
  205. AllTools.Add(merge.toolItem);
  206. AllTools.Add(print.toolItem);
  207. AllTools.Add(security.toolItem);
  208. AllTools.Add(convertPDF.toolItem);
  209. AllTools.Add(pDFToWord.toolItem);
  210. AllTools.Add(pDFToExcel.toolItem);
  211. AllTools.Add(pDFToPPT.toolItem);
  212. AllTools.Add(imageToPDF.toolItem);
  213. AllTools.Add(oCR.toolItem);
  214. AllTools.Add(waterMark.toolItem);
  215. AllTools.Add(headerFooter.toolItem);
  216. AllTools.Add(batesNumbers.toolItem);
  217. AllTools.Add(batch.toolItem);
  218. AllTools.Add(background.toolItem);
  219. AllTools.Add(compareDoc.toolItem);
  220. }
  221. /// <summary>
  222. /// 检查是否为新增工具
  223. /// </summary>
  224. private void ContianNewTools()
  225. {
  226. var cacheList = Settings.Default.AllPDFToolsList;
  227. foreach (var item in AllTools)
  228. {
  229. ToolItem toolItem = null;
  230. foreach (var cacheItem in cacheList)
  231. {
  232. var strFnTye = Enum.GetName(typeof(PDFFnType), item.FnType);
  233. if (cacheItem.FnTypeStr != strFnTye && cacheItem.IsNewTool == true)
  234. {
  235. toolItem = item;
  236. break;
  237. }
  238. }
  239. if(toolItem != null && toolItem.IsNewTool == true)
  240. {
  241. CacheToolItem cacheTool = new CacheToolItem();
  242. cacheTool.IsNewTool = true;
  243. cacheTool.ToolTypeId = toolItem.ToolTypeId;
  244. cacheTool.ToolTypeStr = Enum.GetName(typeof(PDFToolType), toolItem.ToolType);
  245. cacheTool.FnTypeStr = Enum.GetName(typeof(PDFFnType), toolItem.FnType);
  246. Settings.Default.AllPDFToolsList.Add(cacheTool);
  247. }
  248. }
  249. Settings.Default.Save();
  250. }
  251. /// <summary>
  252. /// 快捷工具
  253. /// </summary>
  254. private void InitQuickTools()
  255. {
  256. var cacheList = Settings.Default.AllPDFToolsList;
  257. if (cacheList == null)
  258. cacheList = new AllPDFToolsList();
  259. if(cacheList.Count > 0)
  260. {
  261. int currentCount = 0;
  262. foreach (var cacheItem in cacheList)
  263. {
  264. if (cacheItem.ToolLayOutType == 1 && currentCount < QuickToolCount)
  265. {
  266. foreach (var allItem in AllTools)
  267. {
  268. if (cacheItem.FnTypeStr == Enum.GetName(typeof(PDFFnType), allItem.FnType))
  269. {
  270. allItem.IsQuickTool = true;
  271. var index = QuickTools.FindIndex(t => t.ToolTypeId > allItem.ToolTypeId);
  272. if (index == -1)
  273. {
  274. allItem.ToolTypeId = cacheItem.ToolTypeId;
  275. QuickTools.Add(allItem);
  276. }
  277. else
  278. {
  279. allItem.ToolTypeId = index;
  280. QuickTools.Insert(index, allItem);
  281. }
  282. currentCount++;
  283. break;
  284. }
  285. }
  286. }
  287. }
  288. }
  289. else
  290. {
  291. //当所有工具大于等于快捷工具显示的个数时
  292. if (AllTools.Count >= QuickToolCount)
  293. {
  294. for (int i = 0; i < QuickToolCount; i++)
  295. {
  296. AllTools[i].ToolTypeId = i;
  297. AllTools[i].IsQuickTool = true;
  298. QuickTools.Add(AllTools[i]);
  299. }
  300. }
  301. else
  302. {
  303. for (int i = 0; i < AllTools.Count; i++)
  304. {
  305. AllTools[i].ToolTypeId = i;
  306. AllTools[i].IsQuickTool = true;
  307. QuickTools.Add(AllTools[i]);
  308. }
  309. }
  310. SaveAllTools();
  311. }
  312. }
  313. private void SaveAllTools()
  314. {
  315. var cacheList = Settings.Default.AllPDFToolsList;
  316. foreach (var item in AllTools)
  317. {
  318. CacheToolItem cacheItem = new CacheToolItem();
  319. cacheItem.ToolLayOutType = (item.IsQuickTool == true ? 1 : 0);
  320. cacheItem.IsNewTool = item.IsNewTool;
  321. cacheItem.ToolTypeId = item.ToolTypeId;
  322. cacheItem.ToolTypeStr = Enum.GetName(typeof(PDFToolType), item.ToolType);
  323. cacheItem.FnTypeStr = Enum.GetName(typeof(PDFFnType), item.FnType);
  324. cacheList.Add(cacheItem);
  325. }
  326. Settings.Default.Save();
  327. }
  328. private void InitMoreTools()
  329. {
  330. int currentCount = 0;
  331. foreach (var allItem in AllTools)
  332. {
  333. if (allItem.IsQuickTool == false)
  334. {
  335. allItem.ToolTypeId = currentCount;
  336. MoreTools.Add(allItem);
  337. currentCount++;
  338. }
  339. }
  340. }
  341. public void SaveCacheList()
  342. {
  343. var cacheLists = Settings.Default.AllPDFToolsList;
  344. CacheToolItem cacheItem = null;
  345. foreach (var item in AllTools)
  346. {
  347. cacheItem = cacheLists.Find(t => t.FnTypeStr == Enum.GetName(typeof(PDFFnType), item.FnType));
  348. if (cacheItem != null)
  349. {
  350. cacheItem.ToolTypeId = item.ToolTypeId;
  351. cacheItem.ToolLayOutType = (item.IsQuickTool == true ? 1 : 0);
  352. }
  353. }
  354. Settings.Default.Save();
  355. }
  356. }
  357. }