Browse Source

【PDF工具 - 批量】Convert PDF UI 完善

lizhe 2 years ago
parent
commit
2869a66b39
49 changed files with 2598 additions and 174 deletions
  1. 91 27
      PDF Office/PDF Office.xcodeproj/project.pbxproj
  2. 120 8
      PDF Office/PDF Office.xcodeproj/xcuserdata/lizhe.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
  3. 6 0
      PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/Contents.json
  4. 74 0
      PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_arrow_gray_down_s_norm_on.imageset/Color=gray, Style=down, Size=s, State=norm, Disabled=false.pdf
  5. 21 0
      PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_arrow_gray_down_s_norm_on.imageset/Contents.json
  6. 74 0
      PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_arrow_gray_up_s_norm_on.imageset/Color=gray, Style=up, Size=s, State=norm, Disabled=false.pdf
  7. 21 0
      PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_arrow_gray_up_s_norm_on.imageset/Contents.json
  8. 21 0
      PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_checkbox_hov_on.imageset/Contents.json
  9. 143 0
      PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_checkbox_hov_on.imageset/State=hov, Disabled=false-1.pdf
  10. 21 0
      PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_checkbox_multisel_off.imageset/Contents.json
  11. 155 0
      PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_checkbox_multisel_off.imageset/State=multisel, Disabled=true.pdf
  12. 21 0
      PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_checkbox_multisel_on.imageset/Contents.json
  13. 87 0
      PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_checkbox_multisel_on.imageset/State=multisel, Disabled=false.pdf
  14. 21 0
      PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_checkbox_sel_off.imageset/Contents.json
  15. 167 0
      PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_checkbox_sel_off.imageset/State=sel, Disabled=true-1.pdf
  16. 21 0
      PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_checkbox_sel_on.imageset/Contents.json
  17. 99 0
      PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_checkbox_sel_on.imageset/State=sel, Disabled=false-1.pdf
  18. 21 0
      PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_checkbox_unsel_off.imageset/Contents.json
  19. 143 0
      PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_checkbox_unsel_off.imageset/State=unsel, Disabled=true-1.pdf
  20. 21 0
      PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_checkbox_unsel_on.imageset/Contents.json
  21. 143 0
      PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_checkbox_unsel_on.imageset/State=unsel, Disabled=false-1.pdf
  22. 21 0
      PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_radio_hov_on.imageset/Contents.json
  23. 111 0
      PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_radio_hov_on.imageset/State=hov, Disabled=false.pdf
  24. 21 0
      PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_radio_sel_off.imageset/Contents.json
  25. 123 0
      PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_radio_sel_off.imageset/State=sel, Disabled=true.pdf
  26. 21 0
      PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_radio_sel_on.imageset/Contents.json
  27. 123 0
      PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_radio_sel_on.imageset/State=sel, Disabled=false.pdf
  28. 21 0
      PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_radio_unsel_off.imageset/Contents.json
  29. 111 0
      PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_radio_unsel_off.imageset/State=unsel, Disabled=true.pdf
  30. 21 0
      PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_radio_unsel_on.imageset/Contents.json
  31. 111 0
      PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_radio_unsel_on.imageset/State=unsel, Disabled=false.pdf
  32. 34 7
      PDF Office/PDF Office/Class/PDFTools/Batch/View/Choose/ConverPDF/KMBatchConverPDFView.swift
  33. 60 0
      PDF Office/PDF Office/Class/PDFTools/Batch/Tool/KMImageTitleButton/KMImageTitleButton.xib
  34. 1 1
      PDF Office/PDF Office/Class/PDFTools/Batch/View/Choose/Background/KMBatchBackgroundView.swift
  35. 1 1
      PDF Office/PDF Office/Class/PDFTools/Batch/View/Choose/BatchRemove/KMBatchBatchRemoveView.swift
  36. 1 1
      PDF Office/PDF Office/Class/PDFTools/Batch/View/Choose/BatesNumber/KMBatchBatesNumberView.swift
  37. 1 1
      PDF Office/PDF Office/Class/PDFTools/Batch/View/Choose/Compress/KMBatchCompressView.swift
  38. 143 0
      PDF Office/PDF Office/Class/PDFTools/Batch/View/Choose/ConvertPDF/KMBatchConvertPDFView.swift
  39. 27 107
      PDF Office/PDF Office/Class/PDFTools/Batch/View/Choose/ConverPDF/KMBatchConverPDFView.xib
  40. 37 0
      PDF Office/PDF Office/Class/PDFTools/Batch/View/Choose/ConvertPDF/Model/KMBatchConvertPDFViewModel.swift
  41. 88 0
      PDF Office/PDF Office/Class/PDFTools/Batch/View/Choose/ConvertPDF/Presenter/KMBatchConvertPDFViewPresenter.swift
  42. 1 1
      PDF Office/PDF Office/Class/PDFTools/Batch/View/Choose/Header&Footer/KMBatchHeaderAndFooterView.swift
  43. 2 2
      PDF Office/PDF Office/Class/PDFTools/Batch/View/Choose/KMBatchBatchSettingItemView/KMBatchBatchSettingItemView.swift
  44. 7 6
      PDF Office/PDF Office/Class/PDFTools/Batch/View/Choose/KMBatchSettingView.swift
  45. 1 1
      PDF Office/PDF Office/Class/PDFTools/Batch/View/Choose/Security/KMBatchSecurityView.swift
  46. 1 1
      PDF Office/PDF Office/Class/PDFTools/Batch/View/Choose/Watermark/KMBatchWatermarkView.swift
  47. 6 6
      PDF Office/PDF Office/Class/PDFTools/ImageToPDF/View/KMBatchProcessingView/KMBatchProcessingView.swift
  48. 9 1
      PDF Office/PDF Office/Class/PDFTools/OCR/Model/KMOCRModel.swift
  49. 3 3
      PDF Office/PDF Office/Class/PDFTools/Secure/Controller/KMRemovePasswordAlertWindowController.xib

+ 91 - 27
PDF Office/PDF Office.xcodeproj/project.pbxproj

@@ -904,12 +904,12 @@
 		ADB1FE612975189600ED072D /* KMBatchProcessingDeleteTableCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADB1FE602975189600ED072D /* KMBatchProcessingDeleteTableCell.xib */; };
 		ADB1FE622975189600ED072D /* KMBatchProcessingDeleteTableCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADB1FE602975189600ED072D /* KMBatchProcessingDeleteTableCell.xib */; };
 		ADB1FE632975189600ED072D /* KMBatchProcessingDeleteTableCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADB1FE602975189600ED072D /* KMBatchProcessingDeleteTableCell.xib */; };
-		ADB1FE6E29752BB700ED072D /* KMBatchConverPDFView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADB1FE6D29752BB700ED072D /* KMBatchConverPDFView.swift */; };
-		ADB1FE6F29752BB700ED072D /* KMBatchConverPDFView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADB1FE6D29752BB700ED072D /* KMBatchConverPDFView.swift */; };
-		ADB1FE7029752BB700ED072D /* KMBatchConverPDFView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADB1FE6D29752BB700ED072D /* KMBatchConverPDFView.swift */; };
-		ADB1FE7229752ED500ED072D /* KMBatchConverPDFView.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADB1FE7129752ED500ED072D /* KMBatchConverPDFView.xib */; };
-		ADB1FE7329752ED500ED072D /* KMBatchConverPDFView.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADB1FE7129752ED500ED072D /* KMBatchConverPDFView.xib */; };
-		ADB1FE7429752ED500ED072D /* KMBatchConverPDFView.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADB1FE7129752ED500ED072D /* KMBatchConverPDFView.xib */; };
+		ADB1FE6E29752BB700ED072D /* KMBatchConvertPDFView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADB1FE6D29752BB700ED072D /* KMBatchConvertPDFView.swift */; };
+		ADB1FE6F29752BB700ED072D /* KMBatchConvertPDFView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADB1FE6D29752BB700ED072D /* KMBatchConvertPDFView.swift */; };
+		ADB1FE7029752BB700ED072D /* KMBatchConvertPDFView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADB1FE6D29752BB700ED072D /* KMBatchConvertPDFView.swift */; };
+		ADB1FE7229752ED500ED072D /* KMBatchConvertPDFView.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADB1FE7129752ED500ED072D /* KMBatchConvertPDFView.xib */; };
+		ADB1FE7329752ED500ED072D /* KMBatchConvertPDFView.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADB1FE7129752ED500ED072D /* KMBatchConvertPDFView.xib */; };
+		ADB1FE7429752ED500ED072D /* KMBatchConvertPDFView.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADB1FE7129752ED500ED072D /* KMBatchConvertPDFView.xib */; };
 		ADB1FE7629752F0900ED072D /* KMBatchCompressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADB1FE7529752F0900ED072D /* KMBatchCompressView.swift */; };
 		ADB1FE7729752F0900ED072D /* KMBatchCompressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADB1FE7529752F0900ED072D /* KMBatchCompressView.swift */; };
 		ADB1FE7829752F0900ED072D /* KMBatchCompressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADB1FE7529752F0900ED072D /* KMBatchCompressView.swift */; };
@@ -958,9 +958,9 @@
 		ADB1FEB2297543CF00ED072D /* KMBatchSettingView.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADB1FEB1297543CF00ED072D /* KMBatchSettingView.xib */; };
 		ADB1FEB3297543CF00ED072D /* KMBatchSettingView.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADB1FEB1297543CF00ED072D /* KMBatchSettingView.xib */; };
 		ADB1FEB4297543CF00ED072D /* KMBatchSettingView.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADB1FEB1297543CF00ED072D /* KMBatchSettingView.xib */; };
-		ADB1FEB729754F9D00ED072D /* KMBatchBatchSettingItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADB1FEB629754F9D00ED072D /* KMBatchBatchSettingItemView.swift */; };
-		ADB1FEB829754F9D00ED072D /* KMBatchBatchSettingItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADB1FEB629754F9D00ED072D /* KMBatchBatchSettingItemView.swift */; };
-		ADB1FEB929754F9D00ED072D /* KMBatchBatchSettingItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADB1FEB629754F9D00ED072D /* KMBatchBatchSettingItemView.swift */; };
+		ADB1FEB729754F9D00ED072D /* KMBatchSettingItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADB1FEB629754F9D00ED072D /* KMBatchSettingItemView.swift */; };
+		ADB1FEB829754F9D00ED072D /* KMBatchSettingItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADB1FEB629754F9D00ED072D /* KMBatchSettingItemView.swift */; };
+		ADB1FEB929754F9D00ED072D /* KMBatchSettingItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADB1FEB629754F9D00ED072D /* KMBatchSettingItemView.swift */; };
 		ADB2D6E6294740F30029D2B3 /* KMPrintPaperSetWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADB2D6E4294740F30029D2B3 /* KMPrintPaperSetWindowController.swift */; };
 		ADB2D6E7294740F30029D2B3 /* KMPrintPaperSetWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADB2D6E4294740F30029D2B3 /* KMPrintPaperSetWindowController.swift */; };
 		ADB2D6E8294740F30029D2B3 /* KMPrintPaperSetWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADB2D6E4294740F30029D2B3 /* KMPrintPaperSetWindowController.swift */; };
@@ -1123,6 +1123,18 @@
 		ADD1B70A29471FA500C3FFF7 /* KMPrintChoosePresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADD1B70929471FA500C3FFF7 /* KMPrintChoosePresenter.swift */; };
 		ADD1B70B29471FA500C3FFF7 /* KMPrintChoosePresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADD1B70929471FA500C3FFF7 /* KMPrintChoosePresenter.swift */; };
 		ADD1B70C29471FA500C3FFF7 /* KMPrintChoosePresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADD1B70929471FA500C3FFF7 /* KMPrintChoosePresenter.swift */; };
+		ADE614A32977952C00F62ED7 /* KMBatchConvertPDFViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE614A22977952C00F62ED7 /* KMBatchConvertPDFViewModel.swift */; };
+		ADE614A42977952C00F62ED7 /* KMBatchConvertPDFViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE614A22977952C00F62ED7 /* KMBatchConvertPDFViewModel.swift */; };
+		ADE614A52977952C00F62ED7 /* KMBatchConvertPDFViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE614A22977952C00F62ED7 /* KMBatchConvertPDFViewModel.swift */; };
+		ADE614A72977954000F62ED7 /* KMBatchConvertPDFViewPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE614A62977954000F62ED7 /* KMBatchConvertPDFViewPresenter.swift */; };
+		ADE614A82977954000F62ED7 /* KMBatchConvertPDFViewPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE614A62977954000F62ED7 /* KMBatchConvertPDFViewPresenter.swift */; };
+		ADE614A92977954000F62ED7 /* KMBatchConvertPDFViewPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE614A62977954000F62ED7 /* KMBatchConvertPDFViewPresenter.swift */; };
+		ADE614AC29779C5200F62ED7 /* KMImageTitleButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE614AB29779C5200F62ED7 /* KMImageTitleButton.swift */; };
+		ADE614AD29779C5200F62ED7 /* KMImageTitleButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE614AB29779C5200F62ED7 /* KMImageTitleButton.swift */; };
+		ADE614AE29779C5200F62ED7 /* KMImageTitleButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE614AB29779C5200F62ED7 /* KMImageTitleButton.swift */; };
+		ADE614B129779C6D00F62ED7 /* KMImageTitleButton.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADE614B029779C6D00F62ED7 /* KMImageTitleButton.xib */; };
+		ADE614B229779C6D00F62ED7 /* KMImageTitleButton.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADE614B029779C6D00F62ED7 /* KMImageTitleButton.xib */; };
+		ADE614B329779C6D00F62ED7 /* KMImageTitleButton.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADE614B029779C6D00F62ED7 /* KMImageTitleButton.xib */; };
 		BB0542152965705D00F2665C /* KMCropTipView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB0542142965705D00F2665C /* KMCropTipView.swift */; };
 		BB0542162965705D00F2665C /* KMCropTipView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB0542142965705D00F2665C /* KMCropTipView.swift */; };
 		BB0542172965705D00F2665C /* KMCropTipView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB0542142965705D00F2665C /* KMCropTipView.swift */; };
@@ -2453,8 +2465,8 @@
 		ADB1FE472970264500ED072D /* KMBatchCollectionViewPrensenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMBatchCollectionViewPrensenter.swift; sourceTree = "<group>"; };
 		ADB1FE5C2975182100ED072D /* KMBatchProcessingDeleteTableCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMBatchProcessingDeleteTableCell.swift; sourceTree = "<group>"; };
 		ADB1FE602975189600ED072D /* KMBatchProcessingDeleteTableCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMBatchProcessingDeleteTableCell.xib; sourceTree = "<group>"; };
-		ADB1FE6D29752BB700ED072D /* KMBatchConverPDFView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMBatchConverPDFView.swift; sourceTree = "<group>"; };
-		ADB1FE7129752ED500ED072D /* KMBatchConverPDFView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMBatchConverPDFView.xib; sourceTree = "<group>"; };
+		ADB1FE6D29752BB700ED072D /* KMBatchConvertPDFView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMBatchConvertPDFView.swift; sourceTree = "<group>"; };
+		ADB1FE7129752ED500ED072D /* KMBatchConvertPDFView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMBatchConvertPDFView.xib; sourceTree = "<group>"; };
 		ADB1FE7529752F0900ED072D /* KMBatchCompressView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMBatchCompressView.swift; sourceTree = "<group>"; };
 		ADB1FE7929752F1100ED072D /* KMBatchCompressView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMBatchCompressView.xib; sourceTree = "<group>"; };
 		ADB1FE7D29752F2900ED072D /* KMBatchSecurityView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMBatchSecurityView.swift; sourceTree = "<group>"; };
@@ -2471,7 +2483,7 @@
 		ADB1FEA92975310A00ED072D /* KMBatchBatchRemoveView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMBatchBatchRemoveView.xib; sourceTree = "<group>"; };
 		ADB1FEAD297543C000ED072D /* KMBatchSettingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMBatchSettingView.swift; sourceTree = "<group>"; };
 		ADB1FEB1297543CF00ED072D /* KMBatchSettingView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMBatchSettingView.xib; sourceTree = "<group>"; };
-		ADB1FEB629754F9D00ED072D /* KMBatchBatchSettingItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMBatchBatchSettingItemView.swift; sourceTree = "<group>"; };
+		ADB1FEB629754F9D00ED072D /* KMBatchSettingItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMBatchSettingItemView.swift; sourceTree = "<group>"; };
 		ADB2D6E4294740F30029D2B3 /* KMPrintPaperSetWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPrintPaperSetWindowController.swift; sourceTree = "<group>"; };
 		ADB2D6E5294740F30029D2B3 /* KMPrintPaperSetWindowController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMPrintPaperSetWindowController.xib; sourceTree = "<group>"; };
 		ADB2D6EC2947415E0029D2B3 /* KMPrintPaperSetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPrintPaperSetView.swift; sourceTree = "<group>"; };
@@ -2529,6 +2541,10 @@
 		ADD1B7012946C8AD00C3FFF7 /* KMBaseTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMBaseTextField.swift; sourceTree = "<group>"; };
 		ADD1B7052946CBB600C3FFF7 /* KMBaseTextFormatter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMBaseTextFormatter.swift; sourceTree = "<group>"; };
 		ADD1B70929471FA500C3FFF7 /* KMPrintChoosePresenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPrintChoosePresenter.swift; sourceTree = "<group>"; };
+		ADE614A22977952C00F62ED7 /* KMBatchConvertPDFViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMBatchConvertPDFViewModel.swift; sourceTree = "<group>"; };
+		ADE614A62977954000F62ED7 /* KMBatchConvertPDFViewPresenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMBatchConvertPDFViewPresenter.swift; sourceTree = "<group>"; };
+		ADE614AB29779C5200F62ED7 /* KMImageTitleButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMImageTitleButton.swift; sourceTree = "<group>"; };
+		ADE614B029779C6D00F62ED7 /* KMImageTitleButton.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMImageTitleButton.xib; sourceTree = "<group>"; };
 		BB0542142965705D00F2665C /* KMCropTipView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMCropTipView.swift; sourceTree = "<group>"; };
 		BB162E8D294FFC0C0088E9D1 /* KMWatermarkPDFView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMWatermarkPDFView.swift; sourceTree = "<group>"; };
 		BB162E91294FFE020088E9D1 /* KMWatermarkModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMWatermarkModel.swift; sourceTree = "<group>"; };
@@ -3854,6 +3870,7 @@
 		ADB1FE21297005DF00ED072D /* Batch */ = {
 			isa = PBXGroup;
 			children = (
+				ADE614AA29779BE100F62ED7 /* Tool */,
 				ADB1FE4B2972958100ED072D /* Source */,
 				ADB1FE2E297008B000ED072D /* View */,
 				ADB1FE26297006DF00ED072D /* KMBatchWindowController.swift */,
@@ -3927,20 +3944,22 @@
 				ADB1FE6829752B0900ED072D /* Watermark */,
 				ADB1FE6729752B0000ED072D /* Security */,
 				ADB1FE662975212300ED072D /* Compress */,
-				ADB1FE652975211700ED072D /* ConverPDF */,
+				ADB1FE652975211700ED072D /* ConvertPDF */,
 				ADB1FEAD297543C000ED072D /* KMBatchSettingView.swift */,
 				ADB1FEB1297543CF00ED072D /* KMBatchSettingView.xib */,
 			);
 			path = Choose;
 			sourceTree = "<group>";
 		};
-		ADB1FE652975211700ED072D /* ConverPDF */ = {
+		ADB1FE652975211700ED072D /* ConvertPDF */ = {
 			isa = PBXGroup;
 			children = (
-				ADB1FE6D29752BB700ED072D /* KMBatchConverPDFView.swift */,
-				ADB1FE7129752ED500ED072D /* KMBatchConverPDFView.xib */,
+				ADE614A12977951000F62ED7 /* Model */,
+				ADE614A02977950A00F62ED7 /* Presenter */,
+				ADB1FE6D29752BB700ED072D /* KMBatchConvertPDFView.swift */,
+				ADB1FE7129752ED500ED072D /* KMBatchConvertPDFView.xib */,
 			);
-			path = ConverPDF;
+			path = ConvertPDF;
 			sourceTree = "<group>";
 		};
 		ADB1FE662975212300ED072D /* Compress */ = {
@@ -4009,7 +4028,7 @@
 		ADB1FEB529754F7900ED072D /* KMBatchBatchSettingItemView */ = {
 			isa = PBXGroup;
 			children = (
-				ADB1FEB629754F9D00ED072D /* KMBatchBatchSettingItemView.swift */,
+				ADB1FEB629754F9D00ED072D /* KMBatchSettingItemView.swift */,
 			);
 			path = KMBatchBatchSettingItemView;
 			sourceTree = "<group>";
@@ -4299,6 +4318,39 @@
 			path = TextField;
 			sourceTree = "<group>";
 		};
+		ADE614A02977950A00F62ED7 /* Presenter */ = {
+			isa = PBXGroup;
+			children = (
+				ADE614A62977954000F62ED7 /* KMBatchConvertPDFViewPresenter.swift */,
+			);
+			path = Presenter;
+			sourceTree = "<group>";
+		};
+		ADE614A12977951000F62ED7 /* Model */ = {
+			isa = PBXGroup;
+			children = (
+				ADE614A22977952C00F62ED7 /* KMBatchConvertPDFViewModel.swift */,
+			);
+			path = Model;
+			sourceTree = "<group>";
+		};
+		ADE614AA29779BE100F62ED7 /* Tool */ = {
+			isa = PBXGroup;
+			children = (
+				ADE614AF29779C5600F62ED7 /* KMImageTitleButton */,
+			);
+			path = Tool;
+			sourceTree = "<group>";
+		};
+		ADE614AF29779C5600F62ED7 /* KMImageTitleButton */ = {
+			isa = PBXGroup;
+			children = (
+				ADE614AB29779C5200F62ED7 /* KMImageTitleButton.swift */,
+				ADE614B029779C6D00F62ED7 /* KMImageTitleButton.xib */,
+			);
+			path = KMImageTitleButton;
+			sourceTree = "<group>";
+		};
 		BB162E95295062B40088E9D1 /* Tools */ = {
 			isa = PBXGroup;
 			children = (
@@ -5744,7 +5796,7 @@
 				9FA607E128FD4C9F00B46586 /* KMHomePopViewController.xib in Resources */,
 				9F0CB4B82977BC1000007028 /* KMPropertiesPanelPreviewSubVC.xib in Resources */,
 				89D2D2B92947316900BFF5FE /* Quick Start Guide_Widget.pdf in Resources */,
-				ADB1FE7229752ED500ED072D /* KMBatchConverPDFView.xib in Resources */,
+				ADB1FE7229752ED500ED072D /* KMBatchConvertPDFView.xib in Resources */,
 				9FDD0F9C2952FF4D000C4DAD /* comp-light.json in Resources */,
 				AD9527B229503D620039D2BC /* Untitled.pdf in Resources */,
 				F3B7DFA42949C8E300333201 /* CPDFListView.xcassets in Resources */,
@@ -5769,6 +5821,7 @@
 				9F1F82DD292F84D60092C4B4 /* KMHomeInsertActionViewController.xib in Resources */,
 				9F78EFBE28F7C1CC001E66F4 /* KMHomeViewController.xib in Resources */,
 				9FDD0F9F2952FF4D000C4DAD /* global.json in Resources */,
+				ADE614B129779C6D00F62ED7 /* KMImageTitleButton.xib in Resources */,
 				8931684C296E436B0073EA59 /* KMSignatureWindowController.xib in Resources */,
 				8942F7FB2926089200389627 /* KMSignatureViewController.xib in Resources */,
 				9FDD0FBA295D5230000C4DAD /* KMToolbarController.xib in Resources */,
@@ -5947,6 +6000,7 @@
 				BB6DD81029347F77001F0544 /* KMSecureEncryptWindowController.xib in Resources */,
 				ADB1FEA32975303F00ED072D /* KMBatchBatesNumberView.xib in Resources */,
 				89E4E7302963FBA2002DBA6F /* KMPropertiesViewPopController.xib in Resources */,
+				ADE614B229779C6D00F62ED7 /* KMImageTitleButton.xib in Resources */,
 				BB2F61542966A91D001CB369 /* KMBackgroundPropertyHomeController.xib in Resources */,
 				9F0CB4632966C9E200007028 /* KMFormPropertPanelViewController.xib in Resources */,
 				ADB2D6FE294882B70029D2B3 /* KMTextFieldStepperView.xib in Resources */,
@@ -5955,7 +6009,7 @@
 				ADB1FE9329752F7D00ED072D /* KMBatchBackgroundView.xib in Resources */,
 				AD44D657292C9E8C00A94554 /* KMImageToPDFChooseView.xib in Resources */,
 				9F853A092947137500DF644E /* newtab.pdf in Resources */,
-				ADB1FE7329752ED500ED072D /* KMBatchConverPDFView.xib in Resources */,
+				ADB1FE7329752ED500ED072D /* KMBatchConvertPDFView.xib in Resources */,
 				9F0CB4A329683E2600007028 /* KMPropertiesPanelSizeSubVC.xib in Resources */,
 				BBC34820295593F0008D2CD1 /* KMBackgroundListController.xib in Resources */,
 				9F1F82C0292E01860092C4B4 /* KMCloudEmptyCollectionViewItem.xib in Resources */,
@@ -6204,7 +6258,7 @@
 				ADB1FE2D297006DF00ED072D /* KMBatchWindowController.xib in Resources */,
 				9FDD0F69294AB645000C4DAD /* KMMainViewController.xib in Resources */,
 				9FBA0EF328FFC716001117AF /* KMHomeFastToolViewController.xib in Resources */,
-				ADB1FE7429752ED500ED072D /* KMBatchConverPDFView.xib in Resources */,
+				ADB1FE7429752ED500ED072D /* KMBatchConvertPDFView.xib in Resources */,
 				8942F7F52926087200389627 /* KMSearchViewController.xib in Resources */,
 				BBFE6E7A2930E53000142C01 /* KMMergePopoverViewController.xib in Resources */,
 				89D9897128FD50EF003A3E87 /* KMAnnotationCollectionViewItem.xib in Resources */,
@@ -6250,6 +6304,7 @@
 				AD4B4552294072B90076FA14 /* KMOCRWindowController.xib in Resources */,
 				BB2EDF75296ECE17003BCF58 /* KMPageEditThumbnailItem.xib in Resources */,
 				BB8F4554295A9FA50037EA22 /* KMCreateHeaderFooterController.xib in Resources */,
+				ADE614B329779C6D00F62ED7 /* KMImageTitleButton.xib in Resources */,
 				BB897263294C5DDA0045787C /* KMWatermarkPropertyInfoController.xib in Resources */,
 				9F8539F82947137500DF644E /* sadfavicon.png in Resources */,
 				9F8539FB2947137500DF644E /* newtab_p.pdf in Resources */,
@@ -6290,11 +6345,12 @@
 				BB8F453F295A98960037EA22 /* KMHeaderFooterPropertyController.swift in Sources */,
 				89316840296E436B0073EA59 /* KMSignature.m in Sources */,
 				BB8F4565295AA3ED0037EA22 /* KMHeaderFooterManager.swift in Sources */,
-				ADB1FEB729754F9D00ED072D /* KMBatchBatchSettingItemView.swift in Sources */,
+				ADB1FEB729754F9D00ED072D /* KMBatchSettingItemView.swift in Sources */,
 				ADCB990B292B6ADC00B51A03 /* KMImageToPDFChoosePresenter.swift in Sources */,
 				F34BF926295303E8002C25A2 /* NSCursor+PDFListView.m in Sources */,
 				F34BF92B295304AB002C25A2 /* NSShadow+PDFListView.m in Sources */,
 				9F705F8D291E579F005199AD /* KMHistoryFileTableView.swift in Sources */,
+				ADE614AC29779C5200F62ED7 /* KMImageTitleButton.swift in Sources */,
 				9F78EFC628F7E965001E66F4 /* KMHomeViewController+UI.swift in Sources */,
 				BB8F4582295B0F900037EA22 /* KMHeaderFooterMarginInfoView.swift in Sources */,
 				9FDD0FAA29534FCC000C4DAD /* KMAliasLight.swift in Sources */,
@@ -6371,6 +6427,7 @@
 				89E4E71D2963F77C002DBA6F /* KMSelfSignAnnotationFreeText.m in Sources */,
 				9FDD0F64294AB645000C4DAD /* KMMainViewController.swift in Sources */,
 				89D2D2FB294C806000BFF5FE /* KMPDFThumbnailItem.swift in Sources */,
+				ADE614A72977954000F62ED7 /* KMBatchConvertPDFViewPresenter.swift in Sources */,
 				BBC745EA295F067B0072C2ED /* KMCropSettingWindowController.swift in Sources */,
 				89752DF62938A236003FF08E /* PublicKey.swift in Sources */,
 				89E4E73E2964160F002DBA6F /* KMAnnotationLinkViewController.m in Sources */,
@@ -6650,6 +6707,7 @@
 				F3732323292DFFFE0013862C /* CPDFListView+Extension.m in Sources */,
 				BB4EEF4C2976544F003A3537 /* KMRedactAligementView.swift in Sources */,
 				9F1FE4C029406E4700E952CA /* NSWindow+CTThemed.m in Sources */,
+				ADE614A32977952C00F62ED7 /* KMBatchConvertPDFViewModel.swift in Sources */,
 				F37322E1292DF9410013862C /* CPDFChoiceWidgetAnnotation+PDFListView.m in Sources */,
 				9F0CB48729683DC400007028 /* KMPropertiesPanelPresetColorSubVC.swift in Sources */,
 				ADBA0464292CB90B00BF9184 /* KMBatchProcessingTableRowView.swift in Sources */,
@@ -6673,7 +6731,7 @@
 				BB6DD814293486FA001F0544 /* KMSecureEncryptPasswordCellView.swift in Sources */,
 				BB897269294DB41D0045787C /* KMWatermarkAdjectivePositionView.swift in Sources */,
 				BB8B173C2907CDD9001C5EA5 /* NibLoadable.swift in Sources */,
-				ADB1FE6E29752BB700ED072D /* KMBatchConverPDFView.swift in Sources */,
+				ADB1FE6E29752BB700ED072D /* KMBatchConvertPDFView.swift in Sources */,
 				BB8F4557295AA1270037EA22 /* KMHeaderFooterPropertyInfoController.swift in Sources */,
 				BBC745F7296178BD0072C2ED /* KMCropTools.swift in Sources */,
 				AD9527DB2952EE700039D2BC /* KMPrintPage_C.swift in Sources */,
@@ -6785,11 +6843,12 @@
 				BB8F4540295A98960037EA22 /* KMHeaderFooterPropertyController.swift in Sources */,
 				89316841296E436B0073EA59 /* KMSignature.m in Sources */,
 				BB8F4566295AA3ED0037EA22 /* KMHeaderFooterManager.swift in Sources */,
-				ADB1FEB829754F9D00ED072D /* KMBatchBatchSettingItemView.swift in Sources */,
+				ADB1FEB829754F9D00ED072D /* KMBatchSettingItemView.swift in Sources */,
 				BB99ACC3292DE22E0048AFD9 /* KMMergeViewController.swift in Sources */,
 				9F78EFC728F7E965001E66F4 /* KMHomeViewController+UI.swift in Sources */,
 				9FBA0EFA2900188F001117AF /* KMFastToolCollectionView.swift in Sources */,
 				9FBA0EFF29015A82001117AF /* KMFastToolCollectionViewItem.swift in Sources */,
+				ADE614AD29779C5200F62ED7 /* KMImageTitleButton.swift in Sources */,
 				9F1F82EF293609F60092C4B4 /* CPDFDocument+PageEditManager.swift in Sources */,
 				BB8F4583295B0F900037EA22 /* KMHeaderFooterMarginInfoView.swift in Sources */,
 				9F1FE51229407B4000E952CA /* KMFileSearchView.swift in Sources */,
@@ -6866,6 +6925,7 @@
 				89E4E71E2963F77C002DBA6F /* KMSelfSignAnnotationFreeText.m in Sources */,
 				9FDD0FA729533494000C4DAD /* KMJSONParser.swift in Sources */,
 				9FDD0F70294AD13C000C4DAD /* KMMainViewController+Action.swift in Sources */,
+				ADE614A82977954000F62ED7 /* KMBatchConvertPDFViewPresenter.swift in Sources */,
 				BBC745EB295F067B0072C2ED /* KMCropSettingWindowController.swift in Sources */,
 				ADCB98C62924730000B51A03 /* KMBatchProcessingTableViewModel.swift in Sources */,
 				89E4E73F2964160F002DBA6F /* KMAnnotationLinkViewController.m in Sources */,
@@ -7145,6 +7205,7 @@
 				BBA8B7A42935CD740097D183 /* KMRemovePasswordAlertWindowController.swift in Sources */,
 				BB4EEF4D2976544F003A3537 /* KMRedactAligementView.swift in Sources */,
 				F37322EE292DF9410013862C /* CPDFMarkupAnnotation+PDFListView.m in Sources */,
+				ADE614A42977952C00F62ED7 /* KMBatchConvertPDFViewModel.swift in Sources */,
 				9F1FE4FA29406E4700E952CA /* CTTabStripView.m in Sources */,
 				9F0CB48829683DC400007028 /* KMPropertiesPanelPresetColorSubVC.swift in Sources */,
 				ADCB98C2292472F200B51A03 /* KMBatchProcessingTableViewPresenter.swift in Sources */,
@@ -7168,7 +7229,7 @@
 				F37322E8292DF9410013862C /* CPDFAnnotationModel.m in Sources */,
 				BB6DD822293497B6001F0544 /* KMSecureEncryptModel.swift in Sources */,
 				AD9527BB295291F20039D2BC /* KMPrintPage.swift in Sources */,
-				ADB1FE6F29752BB700ED072D /* KMBatchConverPDFView.swift in Sources */,
+				ADB1FE6F29752BB700ED072D /* KMBatchConvertPDFView.swift in Sources */,
 				BB8F4558295AA1270037EA22 /* KMHeaderFooterPropertyInfoController.swift in Sources */,
 				BBC745F8296178BD0072C2ED /* KMCropTools.swift in Sources */,
 				ADD1B6D82946BDFD00C3FFF7 /* KMPrintChoosePageSizeView.swift in Sources */,
@@ -7312,6 +7373,7 @@
 				BB897243294C028A0045787C /* KMWatermarkAdjectiveSegementControl.swift in Sources */,
 				BBAFC84C298519F700D0648E /* KMSavePanelAccessoryController.m in Sources */,
 				9F1FE4B629406E4700E952CA /* CTBrowser.m in Sources */,
+				ADE614A52977952C00F62ED7 /* KMBatchConvertPDFViewModel.swift in Sources */,
 				9FDD0FAC29534FCC000C4DAD /* KMAliasLight.swift in Sources */,
 				BBF38A64294F53FD0086D025 /* KMWatermarkFileView.swift in Sources */,
 				899700F828F4051B009AF911 /* KMAnnotationViewController.swift in Sources */,
@@ -7443,6 +7505,7 @@
 				ADB1FEA82975305500ED072D /* KMBatchBatchRemoveView.swift in Sources */,
 				AD9527DD2952EE700039D2BC /* KMPrintPage_C.swift in Sources */,
 				9FDD0FB9295D5230000C4DAD /* KMToolbarController.swift in Sources */,
+				ADE614AE29779C5200F62ED7 /* KMImageTitleButton.swift in Sources */,
 				9F1F82F0293609F60092C4B4 /* CPDFDocument+PageEditManager.swift in Sources */,
 				F37322DD292DF9410013862C /* CPDFPage+PDFListView.m in Sources */,
 				89E4E7022963D4A0002DBA6F /* KMComboBox.m in Sources */,
@@ -7557,6 +7620,7 @@
 				BB2EDF56296E815E003BCF58 /* KMPageEditBaseItemView.swift in Sources */,
 				BB35C49B2974E18D00D46EE2 /* CustomAlertView.m in Sources */,
 				9F1FE49829406E4700E952CA /* common.c in Sources */,
+				ADE614A92977954000F62ED7 /* KMBatchConvertPDFViewPresenter.swift in Sources */,
 				F3599224292CA27B000D25DE /* CPDFListViewRuntime.m in Sources */,
 				ADD1B6E12946BFD500C3FFF7 /* KMPrintChoosePageSizeSizeView.swift in Sources */,
 				9FBA0EE328FEC253001117AF /* KMProductPromotionViewController.swift in Sources */,
@@ -7637,7 +7701,7 @@
 				BB1A34AA295EA30100B80B3E /* NSBitmapImageRep_SKExtensions.m in Sources */,
 				9F0CB4A9296CF19600007028 /* KMPropertiesPanelListMenuSubVC.swift in Sources */,
 				BBC3482629559506008D2CD1 /* KMBackgroundManager.swift in Sources */,
-				ADB1FEB929754F9D00ED072D /* KMBatchBatchSettingItemView.swift in Sources */,
+				ADB1FEB929754F9D00ED072D /* KMBatchSettingItemView.swift in Sources */,
 				9F8539CD29430BF300DF644E /* KMBrowserWindowController.swift in Sources */,
 				BB8F4567295AA3ED0037EA22 /* KMHeaderFooterManager.swift in Sources */,
 				9F705F78291A3A84005199AD /* KMHistoryFileDeleteWindowController.swift in Sources */,
@@ -7714,7 +7778,7 @@
 				8942F7EB2925E1C400389627 /* KMLiftSideCellView.swift in Sources */,
 				BB86C20C28F5569F005AD968 /* NSGeometry_SKExtensions.m in Sources */,
 				9F1F82D4292F6D510092C4B4 /* KMPDFInsertPreviewViewController.swift in Sources */,
-				ADB1FE7029752BB700ED072D /* KMBatchConverPDFView.swift in Sources */,
+				ADB1FE7029752BB700ED072D /* KMBatchConvertPDFView.swift in Sources */,
 				9F705F8F291E579F005199AD /* KMHistoryFileTableView.swift in Sources */,
 				9F0CB4812967F64D00007028 /* KMPropertiesPanelReadOnlySubVC.swift in Sources */,
 				BB49ECE7293EF54800C82CA2 /* KMCustomPDFView.swift in Sources */,

+ 120 - 8
PDF Office/PDF Office.xcodeproj/xcuserdata/lizhe.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -743,8 +743,8 @@
             filePath = "PDF Office/Class/PDFTools/Batch/View/Choose/KMBatchSettingView.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "62"
-            endingLineNumber = "62"
+            startingLineNumber = "63"
+            endingLineNumber = "63"
             landmarkName = "reloadData()"
             landmarkType = "7">
          </BreakpointContent>
@@ -759,8 +759,8 @@
             filePath = "PDF Office/Class/PDFTools/Batch/View/Choose/ConverPDF/KMBatchConverPDFView.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "21"
-            endingLineNumber = "21"
+            startingLineNumber = "36"
+            endingLineNumber = "36"
             landmarkName = "init?(coder:)"
             landmarkType = "7">
          </BreakpointContent>
@@ -775,8 +775,8 @@
             filePath = "PDF Office/Class/PDFTools/Batch/View/Choose/ConverPDF/KMBatchConverPDFView.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "28"
-            endingLineNumber = "28"
+            startingLineNumber = "43"
+            endingLineNumber = "43"
             landmarkName = "init(frame:)"
             landmarkType = "7">
          </BreakpointContent>
@@ -791,11 +791,123 @@
             filePath = "PDF Office/Class/PDFTools/Batch/View/Choose/KMBatchSettingView.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "58"
-            endingLineNumber = "58"
+            startingLineNumber = "59"
+            endingLineNumber = "59"
             landmarkName = "setup()"
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "3283ABA0-1A0F-4485-A9E1-A6A44EF3F4AE"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Office/Class/PDFTools/Batch/View/Choose/ConvertPDF/KMBatchConvertPDFView.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "123"
+            endingLineNumber = "123"
+            landmarkName = "languageAction(_:)"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "B98F2351-BC13-4E4C-AB5C-3ECCBEAECEDD"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Office/Class/PDFTools/Batch/View/Choose/ConvertPDF/KMBatchConvertPDFView.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "113"
+            endingLineNumber = "113"
+            landmarkName = "convertPDFTypeAction(_:)"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "FA15D326-F4E0-4CCE-A607-3AA73712FBB8"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Office/Class/PDFTools/Batch/View/Choose/KMBatchSettingView.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "81"
+            endingLineNumber = "81"
+            landmarkName = "fetchCurrentView(type:)"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "CF8DC3BB-F297-4788-9082-1297671DA9D9"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Office/Class/PDFTools/Batch/View/Choose/ConvertPDF/KMBatchConvertPDFView.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "69"
+            endingLineNumber = "69"
+            landmarkName = "setup()"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "522B788A-FC1F-4B72-954D-DE1514ECA6DF"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Office/Class/PDFTools/Batch/View/Choose/ConvertPDF/KMBatchConvertPDFView.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "75"
+            endingLineNumber = "75"
+            landmarkName = "setup()"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "BE4B8ADD-7888-4D03-8C54-40C87FFB5DC5"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Office/Class/PDFTools/Batch/View/Choose/ConvertPDF/Presenter/KMBatchConvertPDFViewPresenter.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "34"
+            endingLineNumber = "34"
+            landmarkName = "retainPageLayoutAction(button:)"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "69A3D29A-3DB5-4B22-A66F-96DB16BB1628"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Office/Class/PDFTools/Batch/View/Choose/ConvertPDF/KMBatchConvertPDFView.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "92"
+            endingLineNumber = "92"
+            landmarkName = "reloadData()"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
    </Breakpoints>
 </Bucket>

+ 6 - 0
PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 74 - 0
PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_arrow_gray_down_s_norm_on.imageset/Color=gray, Style=down, Size=s, State=norm, Disabled=false.pdf

@@ -0,0 +1,74 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 0.969727 2.551849 cm
+0.580392 0.596078 0.611765 scn
+5.030269 1.883876 m
+1.060660 5.853485 l
+0.000000 4.792825 l
+4.499939 0.292886 l
+4.792832 -0.000007 5.267706 -0.000007 5.560599 0.292886 c
+10.060537 4.792825 l
+8.999878 5.853485 l
+5.030269 1.883876 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  327
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 12.000000 12.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000417 00000 n
+0000000439 00000 n
+0000000612 00000 n
+0000000686 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+745
+%%EOF

+ 21 - 0
PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_arrow_gray_down_s_norm_on.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "filename" : "Color=gray, Style=down, Size=s, State=norm, Disabled=false.pdf",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 74 - 0
PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_arrow_gray_up_s_norm_on.imageset/Color=gray, Style=up, Size=s, State=norm, Disabled=false.pdf

@@ -0,0 +1,74 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+-1.000000 0.000000 -0.000000 -1.000000 11.030274 9.448181 cm
+0.580392 0.596078 0.611765 scn
+5.030269 1.883876 m
+1.060660 5.853485 l
+0.000000 4.792825 l
+4.499939 0.292886 l
+4.792832 -0.000007 5.267706 -0.000007 5.560599 0.292886 c
+10.060537 4.792825 l
+8.999878 5.853485 l
+5.030269 1.883876 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  330
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 12.000000 12.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000420 00000 n
+0000000442 00000 n
+0000000615 00000 n
+0000000689 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+748
+%%EOF

+ 21 - 0
PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_arrow_gray_up_s_norm_on.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "filename" : "Color=gray, Style=up, Size=s, State=norm, Disabled=false.pdf",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 21 - 0
PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_checkbox_hov_on.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "filename" : "State=hov, Disabled=false-1.pdf",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 143 - 0
PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_checkbox_hov_on.imageset/State=hov, Disabled=false-1.pdf

@@ -0,0 +1,143 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+q
+1.000000 0.000000 -0.000000 1.000000 1.000000 1.000000 cm
+1.000000 1.000000 1.000000 scn
+0.000000 12.000000 m
+0.000000 13.104569 0.895431 14.000000 2.000000 14.000000 c
+12.000000 14.000000 l
+13.104569 14.000000 14.000000 13.104569 14.000000 12.000000 c
+14.000000 2.000000 l
+14.000000 0.895431 13.104569 0.000000 12.000000 0.000000 c
+2.000000 0.000000 l
+0.895430 0.000000 0.000000 0.895431 0.000000 2.000000 c
+0.000000 12.000000 l
+h
+f
+n
+Q
+1.000000 13.000000 m
+1.000000 14.104569 1.895431 15.000000 3.000000 15.000000 c
+13.000000 15.000000 l
+14.104569 15.000000 15.000000 14.104569 15.000000 13.000000 c
+15.000000 3.000000 l
+15.000000 1.895431 14.104569 1.000000 13.000000 1.000000 c
+3.000000 1.000000 l
+1.895430 1.000000 1.000000 1.895431 1.000000 3.000000 c
+1.000000 13.000000 l
+h
+W*
+n
+q
+1.000000 0.000000 -0.000000 1.000000 1.000000 1.000000 cm
+0.407843 0.674510 0.972549 scn
+2.000000 13.000000 m
+12.000000 13.000000 l
+12.000000 15.000000 l
+2.000000 15.000000 l
+2.000000 13.000000 l
+h
+13.000000 12.000000 m
+13.000000 2.000000 l
+15.000000 2.000000 l
+15.000000 12.000000 l
+13.000000 12.000000 l
+h
+12.000000 1.000000 m
+2.000000 1.000000 l
+2.000000 -1.000000 l
+12.000000 -1.000000 l
+12.000000 1.000000 l
+h
+1.000000 2.000000 m
+1.000000 12.000000 l
+-1.000000 12.000000 l
+-1.000000 2.000000 l
+1.000000 2.000000 l
+h
+2.000000 1.000000 m
+1.447715 1.000000 1.000000 1.447715 1.000000 2.000000 c
+-1.000000 2.000000 l
+-1.000000 0.343146 0.343146 -1.000000 2.000000 -1.000000 c
+2.000000 1.000000 l
+h
+13.000000 2.000000 m
+13.000000 1.447716 12.552285 1.000000 12.000000 1.000000 c
+12.000000 -1.000000 l
+13.656854 -1.000000 15.000000 0.343145 15.000000 2.000000 c
+13.000000 2.000000 l
+h
+12.000000 13.000000 m
+12.552284 13.000000 13.000000 12.552284 13.000000 12.000000 c
+15.000000 12.000000 l
+15.000000 13.656854 13.656855 15.000000 12.000000 15.000000 c
+12.000000 13.000000 l
+h
+2.000000 15.000000 m
+0.343146 15.000000 -1.000000 13.656855 -1.000000 12.000000 c
+1.000000 12.000000 l
+1.000000 12.552284 1.447715 13.000000 2.000000 13.000000 c
+2.000000 15.000000 l
+h
+f
+n
+Q
+Q
+
+endstream
+endobj
+
+3 0 obj
+  2089
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 16.000000 16.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000002179 00000 n
+0000002202 00000 n
+0000002375 00000 n
+0000002449 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+2508
+%%EOF

+ 21 - 0
PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_checkbox_multisel_off.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "filename" : "State=multisel, Disabled=true.pdf",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 155 - 0
PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_checkbox_multisel_off.imageset/State=multisel, Disabled=true.pdf

@@ -0,0 +1,155 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 1.000000 1.000000 cm
+0.929412 0.933333 0.941176 scn
+0.000000 12.000000 m
+0.000000 13.104569 0.895431 14.000000 2.000000 14.000000 c
+12.000000 14.000000 l
+13.104569 14.000000 14.000000 13.104569 14.000000 12.000000 c
+14.000000 2.000000 l
+14.000000 0.895431 13.104569 0.000000 12.000000 0.000000 c
+2.000000 0.000000 l
+0.895430 0.000000 0.000000 0.895431 0.000000 2.000000 c
+0.000000 12.000000 l
+h
+f
+n
+Q
+q
+1.000000 13.000000 m
+1.000000 14.104569 1.895431 15.000000 3.000000 15.000000 c
+13.000000 15.000000 l
+14.104569 15.000000 15.000000 14.104569 15.000000 13.000000 c
+15.000000 3.000000 l
+15.000000 1.895431 14.104569 1.000000 13.000000 1.000000 c
+3.000000 1.000000 l
+1.895430 1.000000 1.000000 1.895431 1.000000 3.000000 c
+1.000000 13.000000 l
+h
+W*
+n
+q
+1.000000 0.000000 -0.000000 1.000000 1.000000 1.000000 cm
+0.874510 0.882353 0.898039 scn
+2.000000 13.000000 m
+12.000000 13.000000 l
+12.000000 15.000000 l
+2.000000 15.000000 l
+2.000000 13.000000 l
+h
+13.000000 12.000000 m
+13.000000 2.000000 l
+15.000000 2.000000 l
+15.000000 12.000000 l
+13.000000 12.000000 l
+h
+12.000000 1.000000 m
+2.000000 1.000000 l
+2.000000 -1.000000 l
+12.000000 -1.000000 l
+12.000000 1.000000 l
+h
+1.000000 2.000000 m
+1.000000 12.000000 l
+-1.000000 12.000000 l
+-1.000000 2.000000 l
+1.000000 2.000000 l
+h
+2.000000 1.000000 m
+1.447715 1.000000 1.000000 1.447715 1.000000 2.000000 c
+-1.000000 2.000000 l
+-1.000000 0.343146 0.343146 -1.000000 2.000000 -1.000000 c
+2.000000 1.000000 l
+h
+13.000000 2.000000 m
+13.000000 1.447716 12.552285 1.000000 12.000000 1.000000 c
+12.000000 -1.000000 l
+13.656854 -1.000000 15.000000 0.343145 15.000000 2.000000 c
+13.000000 2.000000 l
+h
+12.000000 13.000000 m
+12.552284 13.000000 13.000000 12.552284 13.000000 12.000000 c
+15.000000 12.000000 l
+15.000000 13.656854 13.656855 15.000000 12.000000 15.000000 c
+12.000000 13.000000 l
+h
+2.000000 15.000000 m
+0.343146 15.000000 -1.000000 13.656855 -1.000000 12.000000 c
+1.000000 12.000000 l
+1.000000 12.552284 1.447715 13.000000 2.000000 13.000000 c
+2.000000 15.000000 l
+h
+f
+n
+Q
+Q
+q
+1.000000 0.000000 -0.000000 1.000000 4.000000 6.500000 cm
+0.694118 0.701961 0.721569 scn
+0.000000 0.750000 m
+8.000000 0.750000 l
+8.000000 2.250000 l
+0.000000 2.250000 l
+0.000000 0.750000 l
+h
+f
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  2288
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 16.000000 16.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000002378 00000 n
+0000002401 00000 n
+0000002574 00000 n
+0000002648 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+2707
+%%EOF

+ 21 - 0
PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_checkbox_multisel_on.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "filename" : "State=multisel, Disabled=false.pdf",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 87 - 0
PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_checkbox_multisel_on.imageset/State=multisel, Disabled=false.pdf

@@ -0,0 +1,87 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 1.000000 1.000000 cm
+0.090196 0.439216 0.956863 scn
+0.000000 12.000000 m
+0.000000 13.104569 0.895431 14.000000 2.000000 14.000000 c
+12.000000 14.000000 l
+13.104569 14.000000 14.000000 13.104569 14.000000 12.000000 c
+14.000000 2.000000 l
+14.000000 0.895431 13.104569 0.000000 12.000000 0.000000 c
+2.000000 0.000000 l
+0.895430 0.000000 0.000000 0.895431 0.000000 2.000000 c
+0.000000 12.000000 l
+h
+f
+n
+Q
+q
+1.000000 0.000000 -0.000000 1.000000 4.000000 6.500000 cm
+1.000000 1.000000 1.000000 scn
+0.000000 0.750000 m
+8.000000 0.750000 l
+8.000000 2.250000 l
+0.000000 2.250000 l
+0.000000 0.750000 l
+h
+f
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  667
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 16.000000 16.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000757 00000 n
+0000000779 00000 n
+0000000952 00000 n
+0000001026 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+1085
+%%EOF

+ 21 - 0
PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_checkbox_sel_off.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "filename" : "State=sel, Disabled=true-1.pdf",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 167 - 0
PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_checkbox_sel_off.imageset/State=sel, Disabled=true-1.pdf

@@ -0,0 +1,167 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 1.000000 1.000000 cm
+0.929412 0.933333 0.941176 scn
+0.000000 12.000000 m
+0.000000 13.104569 0.895431 14.000000 2.000000 14.000000 c
+12.000000 14.000000 l
+13.104569 14.000000 14.000000 13.104569 14.000000 12.000000 c
+14.000000 2.000000 l
+14.000000 0.895431 13.104569 0.000000 12.000000 0.000000 c
+2.000000 0.000000 l
+0.895430 0.000000 0.000000 0.895431 0.000000 2.000000 c
+0.000000 12.000000 l
+h
+f
+n
+Q
+q
+1.000000 13.000000 m
+1.000000 14.104569 1.895431 15.000000 3.000000 15.000000 c
+13.000000 15.000000 l
+14.104569 15.000000 15.000000 14.104569 15.000000 13.000000 c
+15.000000 3.000000 l
+15.000000 1.895431 14.104569 1.000000 13.000000 1.000000 c
+3.000000 1.000000 l
+1.895430 1.000000 1.000000 1.895431 1.000000 3.000000 c
+1.000000 13.000000 l
+h
+W*
+n
+q
+1.000000 0.000000 -0.000000 1.000000 1.000000 1.000000 cm
+0.874510 0.882353 0.898039 scn
+2.000000 13.000000 m
+12.000000 13.000000 l
+12.000000 15.000000 l
+2.000000 15.000000 l
+2.000000 13.000000 l
+h
+13.000000 12.000000 m
+13.000000 2.000000 l
+15.000000 2.000000 l
+15.000000 12.000000 l
+13.000000 12.000000 l
+h
+12.000000 1.000000 m
+2.000000 1.000000 l
+2.000000 -1.000000 l
+12.000000 -1.000000 l
+12.000000 1.000000 l
+h
+1.000000 2.000000 m
+1.000000 12.000000 l
+-1.000000 12.000000 l
+-1.000000 2.000000 l
+1.000000 2.000000 l
+h
+2.000000 1.000000 m
+1.447715 1.000000 1.000000 1.447715 1.000000 2.000000 c
+-1.000000 2.000000 l
+-1.000000 0.343146 0.343146 -1.000000 2.000000 -1.000000 c
+2.000000 1.000000 l
+h
+13.000000 2.000000 m
+13.000000 1.447716 12.552285 1.000000 12.000000 1.000000 c
+12.000000 -1.000000 l
+13.656854 -1.000000 15.000000 0.343145 15.000000 2.000000 c
+13.000000 2.000000 l
+h
+12.000000 13.000000 m
+12.552284 13.000000 13.000000 12.552284 13.000000 12.000000 c
+15.000000 12.000000 l
+15.000000 13.656854 13.656855 15.000000 12.000000 15.000000 c
+12.000000 13.000000 l
+h
+2.000000 15.000000 m
+0.343146 15.000000 -1.000000 13.656855 -1.000000 12.000000 c
+1.000000 12.000000 l
+1.000000 12.552284 1.447715 13.000000 2.000000 13.000000 c
+2.000000 15.000000 l
+h
+f
+n
+Q
+Q
+q
+1.000000 0.000000 -0.000000 1.000000 4.000000 3.768463 cm
+0.694118 0.701961 0.721569 scn
+3.200000 1.231537 m
+2.687044 0.684384 l
+2.839606 0.541357 3.044955 0.468521 3.253544 0.483450 c
+3.462132 0.498380 3.655014 0.599719 3.785652 0.763016 c
+3.200000 1.231537 l
+h
+-0.512956 3.684384 m
+2.687044 0.684384 l
+3.712956 1.778690 l
+0.512956 4.778690 l
+-0.512956 3.684384 l
+h
+3.785652 0.763016 m
+8.585651 6.763016 l
+7.414349 7.700058 l
+2.614348 1.700058 l
+3.785652 0.763016 l
+h
+f
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  2566
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 16.000000 16.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000002656 00000 n
+0000002679 00000 n
+0000002852 00000 n
+0000002926 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+2985
+%%EOF

+ 21 - 0
PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_checkbox_sel_on.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "filename" : "State=sel, Disabled=false-1.pdf",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 99 - 0
PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_checkbox_sel_on.imageset/State=sel, Disabled=false-1.pdf

@@ -0,0 +1,99 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 1.000000 1.000000 cm
+0.090196 0.439216 0.956863 scn
+0.000000 12.000000 m
+0.000000 13.104569 0.895431 14.000000 2.000000 14.000000 c
+12.000000 14.000000 l
+13.104569 14.000000 14.000000 13.104569 14.000000 12.000000 c
+14.000000 2.000000 l
+14.000000 0.895431 13.104569 0.000000 12.000000 0.000000 c
+2.000000 0.000000 l
+0.895430 0.000000 0.000000 0.895431 0.000000 2.000000 c
+0.000000 12.000000 l
+h
+f
+n
+Q
+q
+1.000000 0.000000 -0.000000 1.000000 4.000000 3.768463 cm
+1.000000 1.000000 1.000000 scn
+3.200000 1.231537 m
+2.687044 0.684384 l
+2.839606 0.541357 3.044955 0.468521 3.253544 0.483450 c
+3.462132 0.498380 3.655014 0.599719 3.785652 0.763016 c
+3.200000 1.231537 l
+h
+-0.512956 3.684384 m
+2.687044 0.684384 l
+3.712956 1.778690 l
+0.512956 4.778690 l
+-0.512956 3.684384 l
+h
+3.785652 0.763016 m
+8.585651 6.763016 l
+7.414349 7.700058 l
+2.614348 1.700058 l
+3.785652 0.763016 l
+h
+f
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  945
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 16.000000 16.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000001035 00000 n
+0000001057 00000 n
+0000001230 00000 n
+0000001304 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+1363
+%%EOF

+ 21 - 0
PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_checkbox_unsel_off.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "filename" : "State=unsel, Disabled=true-1.pdf",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 143 - 0
PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_checkbox_unsel_off.imageset/State=unsel, Disabled=true-1.pdf

@@ -0,0 +1,143 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 1.000000 1.000000 cm
+0.929412 0.933333 0.941176 scn
+0.000000 12.000000 m
+0.000000 13.104569 0.895431 14.000000 2.000000 14.000000 c
+12.000000 14.000000 l
+13.104569 14.000000 14.000000 13.104569 14.000000 12.000000 c
+14.000000 2.000000 l
+14.000000 0.895431 13.104569 0.000000 12.000000 0.000000 c
+2.000000 0.000000 l
+0.895430 0.000000 0.000000 0.895431 0.000000 2.000000 c
+0.000000 12.000000 l
+h
+f
+n
+Q
+q
+1.000000 13.000000 m
+1.000000 14.104569 1.895431 15.000000 3.000000 15.000000 c
+13.000000 15.000000 l
+14.104569 15.000000 15.000000 14.104569 15.000000 13.000000 c
+15.000000 3.000000 l
+15.000000 1.895431 14.104569 1.000000 13.000000 1.000000 c
+3.000000 1.000000 l
+1.895430 1.000000 1.000000 1.895431 1.000000 3.000000 c
+1.000000 13.000000 l
+h
+W*
+n
+q
+1.000000 0.000000 -0.000000 1.000000 1.000000 1.000000 cm
+0.874510 0.882353 0.898039 scn
+2.000000 13.000000 m
+12.000000 13.000000 l
+12.000000 15.000000 l
+2.000000 15.000000 l
+2.000000 13.000000 l
+h
+13.000000 12.000000 m
+13.000000 2.000000 l
+15.000000 2.000000 l
+15.000000 12.000000 l
+13.000000 12.000000 l
+h
+12.000000 1.000000 m
+2.000000 1.000000 l
+2.000000 -1.000000 l
+12.000000 -1.000000 l
+12.000000 1.000000 l
+h
+1.000000 2.000000 m
+1.000000 12.000000 l
+-1.000000 12.000000 l
+-1.000000 2.000000 l
+1.000000 2.000000 l
+h
+2.000000 1.000000 m
+1.447715 1.000000 1.000000 1.447715 1.000000 2.000000 c
+-1.000000 2.000000 l
+-1.000000 0.343146 0.343146 -1.000000 2.000000 -1.000000 c
+2.000000 1.000000 l
+h
+13.000000 2.000000 m
+13.000000 1.447716 12.552285 1.000000 12.000000 1.000000 c
+12.000000 -1.000000 l
+13.656854 -1.000000 15.000000 0.343145 15.000000 2.000000 c
+13.000000 2.000000 l
+h
+12.000000 13.000000 m
+12.552284 13.000000 13.000000 12.552284 13.000000 12.000000 c
+15.000000 12.000000 l
+15.000000 13.656854 13.656855 15.000000 12.000000 15.000000 c
+12.000000 13.000000 l
+h
+2.000000 15.000000 m
+0.343146 15.000000 -1.000000 13.656855 -1.000000 12.000000 c
+1.000000 12.000000 l
+1.000000 12.552284 1.447715 13.000000 2.000000 13.000000 c
+2.000000 15.000000 l
+h
+f
+n
+Q
+Q
+
+endstream
+endobj
+
+3 0 obj
+  2089
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 16.000000 16.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000002179 00000 n
+0000002202 00000 n
+0000002375 00000 n
+0000002449 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+2508
+%%EOF

+ 21 - 0
PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_checkbox_unsel_on.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "filename" : "State=unsel, Disabled=false-1.pdf",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 143 - 0
PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_checkbox_unsel_on.imageset/State=unsel, Disabled=false-1.pdf

@@ -0,0 +1,143 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+q
+1.000000 0.000000 -0.000000 1.000000 1.000000 1.000000 cm
+1.000000 1.000000 1.000000 scn
+0.000000 12.000000 m
+0.000000 13.104569 0.895431 14.000000 2.000000 14.000000 c
+12.000000 14.000000 l
+13.104569 14.000000 14.000000 13.104569 14.000000 12.000000 c
+14.000000 2.000000 l
+14.000000 0.895431 13.104569 0.000000 12.000000 0.000000 c
+2.000000 0.000000 l
+0.895430 0.000000 0.000000 0.895431 0.000000 2.000000 c
+0.000000 12.000000 l
+h
+f
+n
+Q
+1.000000 13.000000 m
+1.000000 14.104569 1.895431 15.000000 3.000000 15.000000 c
+13.000000 15.000000 l
+14.104569 15.000000 15.000000 14.104569 15.000000 13.000000 c
+15.000000 3.000000 l
+15.000000 1.895431 14.104569 1.000000 13.000000 1.000000 c
+3.000000 1.000000 l
+1.895430 1.000000 1.000000 1.895431 1.000000 3.000000 c
+1.000000 13.000000 l
+h
+W*
+n
+q
+1.000000 0.000000 -0.000000 1.000000 1.000000 1.000000 cm
+0.874510 0.882353 0.898039 scn
+2.000000 13.000000 m
+12.000000 13.000000 l
+12.000000 15.000000 l
+2.000000 15.000000 l
+2.000000 13.000000 l
+h
+13.000000 12.000000 m
+13.000000 2.000000 l
+15.000000 2.000000 l
+15.000000 12.000000 l
+13.000000 12.000000 l
+h
+12.000000 1.000000 m
+2.000000 1.000000 l
+2.000000 -1.000000 l
+12.000000 -1.000000 l
+12.000000 1.000000 l
+h
+1.000000 2.000000 m
+1.000000 12.000000 l
+-1.000000 12.000000 l
+-1.000000 2.000000 l
+1.000000 2.000000 l
+h
+2.000000 1.000000 m
+1.447715 1.000000 1.000000 1.447715 1.000000 2.000000 c
+-1.000000 2.000000 l
+-1.000000 0.343146 0.343146 -1.000000 2.000000 -1.000000 c
+2.000000 1.000000 l
+h
+13.000000 2.000000 m
+13.000000 1.447716 12.552285 1.000000 12.000000 1.000000 c
+12.000000 -1.000000 l
+13.656854 -1.000000 15.000000 0.343145 15.000000 2.000000 c
+13.000000 2.000000 l
+h
+12.000000 13.000000 m
+12.552284 13.000000 13.000000 12.552284 13.000000 12.000000 c
+15.000000 12.000000 l
+15.000000 13.656854 13.656855 15.000000 12.000000 15.000000 c
+12.000000 13.000000 l
+h
+2.000000 15.000000 m
+0.343146 15.000000 -1.000000 13.656855 -1.000000 12.000000 c
+1.000000 12.000000 l
+1.000000 12.552284 1.447715 13.000000 2.000000 13.000000 c
+2.000000 15.000000 l
+h
+f
+n
+Q
+Q
+
+endstream
+endobj
+
+3 0 obj
+  2089
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 16.000000 16.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000002179 00000 n
+0000002202 00000 n
+0000002375 00000 n
+0000002449 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+2508
+%%EOF

+ 21 - 0
PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_radio_hov_on.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "filename" : "State=hov, Disabled=false.pdf",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 111 - 0
PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_radio_hov_on.imageset/State=hov, Disabled=false.pdf

@@ -0,0 +1,111 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+q
+1.000000 0.000000 -0.000000 1.000000 1.000000 1.000000 cm
+1.000000 1.000000 1.000000 scn
+14.000000 7.000000 m
+14.000000 3.134007 10.865993 0.000000 7.000000 0.000000 c
+3.134007 0.000000 0.000000 3.134007 0.000000 7.000000 c
+0.000000 10.865993 3.134007 14.000000 7.000000 14.000000 c
+10.865993 14.000000 14.000000 10.865993 14.000000 7.000000 c
+h
+f
+n
+Q
+15.000000 8.000000 m
+15.000000 4.134007 11.865993 1.000000 8.000000 1.000000 c
+4.134007 1.000000 1.000000 4.134007 1.000000 8.000000 c
+1.000000 11.865993 4.134007 15.000000 8.000000 15.000000 c
+11.865993 15.000000 15.000000 11.865993 15.000000 8.000000 c
+h
+W*
+n
+q
+1.000000 0.000000 -0.000000 1.000000 1.000000 1.000000 cm
+0.407843 0.674510 0.972549 scn
+13.000000 7.000000 m
+13.000000 3.686292 10.313708 1.000000 7.000000 1.000000 c
+7.000000 -1.000000 l
+11.418278 -1.000000 15.000000 2.581722 15.000000 7.000000 c
+13.000000 7.000000 l
+h
+7.000000 1.000000 m
+3.686291 1.000000 1.000000 3.686292 1.000000 7.000000 c
+-1.000000 7.000000 l
+-1.000000 2.581722 2.581722 -1.000000 7.000000 -1.000000 c
+7.000000 1.000000 l
+h
+1.000000 7.000000 m
+1.000000 10.313708 3.686291 13.000000 7.000000 13.000000 c
+7.000000 15.000000 l
+2.581722 15.000000 -1.000000 11.418278 -1.000000 7.000000 c
+1.000000 7.000000 l
+h
+7.000000 13.000000 m
+10.313708 13.000000 13.000000 10.313708 13.000000 7.000000 c
+15.000000 7.000000 l
+15.000000 11.418278 11.418278 15.000000 7.000000 15.000000 c
+7.000000 13.000000 l
+h
+f
+n
+Q
+Q
+
+endstream
+endobj
+
+3 0 obj
+  1475
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 16.000000 16.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000001565 00000 n
+0000001588 00000 n
+0000001761 00000 n
+0000001835 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+1894
+%%EOF

+ 21 - 0
PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_radio_sel_off.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "filename" : "State=sel, Disabled=true.pdf",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 123 - 0
PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_radio_sel_off.imageset/State=sel, Disabled=true.pdf

@@ -0,0 +1,123 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+q
+1.000000 0.000000 -0.000000 1.000000 1.000000 1.000000 cm
+0.929412 0.933333 0.941176 scn
+14.000000 7.000000 m
+14.000000 3.134007 10.865993 0.000000 7.000000 0.000000 c
+3.134007 0.000000 0.000000 3.134007 0.000000 7.000000 c
+0.000000 10.865993 3.134007 14.000000 7.000000 14.000000 c
+10.865993 14.000000 14.000000 10.865993 14.000000 7.000000 c
+h
+f
+n
+Q
+15.000000 8.000000 m
+15.000000 4.134007 11.865993 1.000000 8.000000 1.000000 c
+4.134007 1.000000 1.000000 4.134007 1.000000 8.000000 c
+1.000000 11.865993 4.134007 15.000000 8.000000 15.000000 c
+11.865993 15.000000 15.000000 11.865993 15.000000 8.000000 c
+h
+W*
+n
+q
+1.000000 0.000000 -0.000000 1.000000 1.000000 1.000000 cm
+0.874510 0.882353 0.898039 scn
+13.000000 7.000000 m
+13.000000 3.686292 10.313708 1.000000 7.000000 1.000000 c
+7.000000 -1.000000 l
+11.418278 -1.000000 15.000000 2.581722 15.000000 7.000000 c
+13.000000 7.000000 l
+h
+7.000000 1.000000 m
+3.686291 1.000000 1.000000 3.686292 1.000000 7.000000 c
+-1.000000 7.000000 l
+-1.000000 2.581722 2.581722 -1.000000 7.000000 -1.000000 c
+7.000000 1.000000 l
+h
+1.000000 7.000000 m
+1.000000 10.313708 3.686291 13.000000 7.000000 13.000000 c
+7.000000 15.000000 l
+2.581722 15.000000 -1.000000 11.418278 -1.000000 7.000000 c
+1.000000 7.000000 l
+h
+7.000000 13.000000 m
+10.313708 13.000000 13.000000 10.313708 13.000000 7.000000 c
+15.000000 7.000000 l
+15.000000 11.418278 11.418278 15.000000 7.000000 15.000000 c
+7.000000 13.000000 l
+h
+f
+n
+Q
+Q
+q
+1.000000 0.000000 -0.000000 1.000000 4.000000 4.000000 cm
+0.694118 0.701961 0.721569 scn
+8.000000 4.000000 m
+8.000000 1.790861 6.209139 0.000000 4.000000 0.000000 c
+1.790861 0.000000 0.000000 1.790861 0.000000 4.000000 c
+0.000000 6.209139 1.790861 8.000000 4.000000 8.000000 c
+6.209139 8.000000 8.000000 6.209139 8.000000 4.000000 c
+h
+f
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  1818
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 16.000000 16.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000001908 00000 n
+0000001931 00000 n
+0000002104 00000 n
+0000002178 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+2237
+%%EOF

+ 21 - 0
PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_radio_sel_on.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "filename" : "State=sel, Disabled=false.pdf",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 123 - 0
PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_radio_sel_on.imageset/State=sel, Disabled=false.pdf

@@ -0,0 +1,123 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+q
+1.000000 0.000000 -0.000000 1.000000 1.000000 1.000000 cm
+1.000000 1.000000 1.000000 scn
+14.000000 7.000000 m
+14.000000 3.134007 10.865993 0.000000 7.000000 0.000000 c
+3.134007 0.000000 0.000000 3.134007 0.000000 7.000000 c
+0.000000 10.865993 3.134007 14.000000 7.000000 14.000000 c
+10.865993 14.000000 14.000000 10.865993 14.000000 7.000000 c
+h
+f
+n
+Q
+15.000000 8.000000 m
+15.000000 4.134007 11.865993 1.000000 8.000000 1.000000 c
+4.134007 1.000000 1.000000 4.134007 1.000000 8.000000 c
+1.000000 11.865993 4.134007 15.000000 8.000000 15.000000 c
+11.865993 15.000000 15.000000 11.865993 15.000000 8.000000 c
+h
+W*
+n
+q
+1.000000 0.000000 -0.000000 1.000000 1.000000 1.000000 cm
+0.090196 0.439216 0.956863 scn
+13.000000 7.000000 m
+13.000000 3.686292 10.313708 1.000000 7.000000 1.000000 c
+7.000000 -1.000000 l
+11.418278 -1.000000 15.000000 2.581722 15.000000 7.000000 c
+13.000000 7.000000 l
+h
+7.000000 1.000000 m
+3.686291 1.000000 1.000000 3.686292 1.000000 7.000000 c
+-1.000000 7.000000 l
+-1.000000 2.581722 2.581722 -1.000000 7.000000 -1.000000 c
+7.000000 1.000000 l
+h
+1.000000 7.000000 m
+1.000000 10.313708 3.686291 13.000000 7.000000 13.000000 c
+7.000000 15.000000 l
+2.581722 15.000000 -1.000000 11.418278 -1.000000 7.000000 c
+1.000000 7.000000 l
+h
+7.000000 13.000000 m
+10.313708 13.000000 13.000000 10.313708 13.000000 7.000000 c
+15.000000 7.000000 l
+15.000000 11.418278 11.418278 15.000000 7.000000 15.000000 c
+7.000000 13.000000 l
+h
+f
+n
+Q
+Q
+q
+1.000000 0.000000 -0.000000 1.000000 4.000000 4.000000 cm
+0.090196 0.439216 0.956863 scn
+8.000000 4.000000 m
+8.000000 1.790861 6.209139 0.000000 4.000000 0.000000 c
+1.790861 0.000000 0.000000 1.790861 0.000000 4.000000 c
+0.000000 6.209139 1.790861 8.000000 4.000000 8.000000 c
+6.209139 8.000000 8.000000 6.209139 8.000000 4.000000 c
+h
+f
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  1818
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 16.000000 16.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000001908 00000 n
+0000001931 00000 n
+0000002104 00000 n
+0000002178 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+2237
+%%EOF

+ 21 - 0
PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_radio_unsel_off.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "filename" : "State=unsel, Disabled=true.pdf",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 111 - 0
PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_radio_unsel_off.imageset/State=unsel, Disabled=true.pdf

@@ -0,0 +1,111 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+q
+1.000000 0.000000 -0.000000 1.000000 1.000000 1.000000 cm
+0.929412 0.933333 0.941176 scn
+14.000000 7.000000 m
+14.000000 3.134007 10.865993 0.000000 7.000000 0.000000 c
+3.134007 0.000000 0.000000 3.134007 0.000000 7.000000 c
+0.000000 10.865993 3.134007 14.000000 7.000000 14.000000 c
+10.865993 14.000000 14.000000 10.865993 14.000000 7.000000 c
+h
+f
+n
+Q
+15.000000 8.000000 m
+15.000000 4.134007 11.865993 1.000000 8.000000 1.000000 c
+4.134007 1.000000 1.000000 4.134007 1.000000 8.000000 c
+1.000000 11.865993 4.134007 15.000000 8.000000 15.000000 c
+11.865993 15.000000 15.000000 11.865993 15.000000 8.000000 c
+h
+W*
+n
+q
+1.000000 0.000000 -0.000000 1.000000 1.000000 1.000000 cm
+0.874510 0.882353 0.898039 scn
+13.000000 7.000000 m
+13.000000 3.686292 10.313708 1.000000 7.000000 1.000000 c
+7.000000 -1.000000 l
+11.418278 -1.000000 15.000000 2.581722 15.000000 7.000000 c
+13.000000 7.000000 l
+h
+7.000000 1.000000 m
+3.686291 1.000000 1.000000 3.686292 1.000000 7.000000 c
+-1.000000 7.000000 l
+-1.000000 2.581722 2.581722 -1.000000 7.000000 -1.000000 c
+7.000000 1.000000 l
+h
+1.000000 7.000000 m
+1.000000 10.313708 3.686291 13.000000 7.000000 13.000000 c
+7.000000 15.000000 l
+2.581722 15.000000 -1.000000 11.418278 -1.000000 7.000000 c
+1.000000 7.000000 l
+h
+7.000000 13.000000 m
+10.313708 13.000000 13.000000 10.313708 13.000000 7.000000 c
+15.000000 7.000000 l
+15.000000 11.418278 11.418278 15.000000 7.000000 15.000000 c
+7.000000 13.000000 l
+h
+f
+n
+Q
+Q
+
+endstream
+endobj
+
+3 0 obj
+  1475
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 16.000000 16.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000001565 00000 n
+0000001588 00000 n
+0000001761 00000 n
+0000001835 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+1894
+%%EOF

+ 21 - 0
PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_radio_unsel_on.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "filename" : "State=unsel, Disabled=false.pdf",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 111 - 0
PDF Office/PDF Office/Class/PDFTools/Batch/Source/Batch.xcassets/btn_radio_unsel_on.imageset/State=unsel, Disabled=false.pdf

@@ -0,0 +1,111 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+q
+1.000000 0.000000 -0.000000 1.000000 1.000000 1.000000 cm
+1.000000 1.000000 1.000000 scn
+14.000000 7.000000 m
+14.000000 3.134007 10.865993 0.000000 7.000000 0.000000 c
+3.134007 0.000000 0.000000 3.134007 0.000000 7.000000 c
+0.000000 10.865993 3.134007 14.000000 7.000000 14.000000 c
+10.865993 14.000000 14.000000 10.865993 14.000000 7.000000 c
+h
+f
+n
+Q
+15.000000 8.000000 m
+15.000000 4.134007 11.865993 1.000000 8.000000 1.000000 c
+4.134007 1.000000 1.000000 4.134007 1.000000 8.000000 c
+1.000000 11.865993 4.134007 15.000000 8.000000 15.000000 c
+11.865993 15.000000 15.000000 11.865993 15.000000 8.000000 c
+h
+W*
+n
+q
+1.000000 0.000000 -0.000000 1.000000 1.000000 1.000000 cm
+0.874510 0.882353 0.898039 scn
+13.000000 7.000000 m
+13.000000 3.686292 10.313708 1.000000 7.000000 1.000000 c
+7.000000 -1.000000 l
+11.418278 -1.000000 15.000000 2.581722 15.000000 7.000000 c
+13.000000 7.000000 l
+h
+7.000000 1.000000 m
+3.686291 1.000000 1.000000 3.686292 1.000000 7.000000 c
+-1.000000 7.000000 l
+-1.000000 2.581722 2.581722 -1.000000 7.000000 -1.000000 c
+7.000000 1.000000 l
+h
+1.000000 7.000000 m
+1.000000 10.313708 3.686291 13.000000 7.000000 13.000000 c
+7.000000 15.000000 l
+2.581722 15.000000 -1.000000 11.418278 -1.000000 7.000000 c
+1.000000 7.000000 l
+h
+7.000000 13.000000 m
+10.313708 13.000000 13.000000 10.313708 13.000000 7.000000 c
+15.000000 7.000000 l
+15.000000 11.418278 11.418278 15.000000 7.000000 15.000000 c
+7.000000 13.000000 l
+h
+f
+n
+Q
+Q
+
+endstream
+endobj
+
+3 0 obj
+  1475
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 16.000000 16.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000001565 00000 n
+0000001588 00000 n
+0000001761 00000 n
+0000001835 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+1894
+%%EOF

+ 34 - 7
PDF Office/PDF Office/Class/PDFTools/Batch/View/Choose/ConverPDF/KMBatchConverPDFView.swift

@@ -1,15 +1,33 @@
 //
-//  KMBatchConverPDFView.swift
+//  KMImageTitleButton.swift
 //  PDF Office
 //
-//  Created by lizhe on 2023/1/16.
+//  Created by lizhe on 2023/1/18.
 //
 
 import Cocoa
 
-class KMBatchConverPDFView: KMBatchBatchSettingItemView {
-    @IBOutlet var contentView: NSView!
+typealias KMImageTitleButtonAction = (_ view: KMImageTitleButton, _ button: NSButton) -> ()
 
+class KMImageTitleButton: NSView {
+    @IBOutlet var contentView: NSView!
+    @IBOutlet weak var iconImage: NSImageView!
+    @IBOutlet weak var titleLabel: NSTextField!
+    @IBOutlet weak var contentButton: NSButton!
+    
+    var action: KMImageTitleButtonAction?
+    var title: String = "" {
+        didSet {
+            self.reloadData()
+        }
+    }
+    var imageName: String = "" {
+        didSet {
+            self.reloadData()
+        }
+    }
+    
+    
     override func draw(_ dirtyRect: NSRect) {
         super.draw(dirtyRect)
 
@@ -29,10 +47,11 @@ class KMBatchConverPDFView: KMBatchBatchSettingItemView {
         setup()
     }
     
+    
     private func initContentView() {
         //绑定xib
-        let resource = NSNib(nibNamed: String(describing: KMBatchConverPDFView.self),
-                             bundle: Bundle(for: KMBatchConverPDFView.self))!
+        let resource = NSNib(nibNamed: String(describing: KMImageTitleButton.self),
+                             bundle: Bundle(for: KMImageTitleButton.self))!
         resource.instantiate(withOwner: self, topLevelObjects: nil)
         addSubview(contentView)
         contentView.translatesAutoresizingMaskIntoConstraints = false
@@ -49,6 +68,14 @@ class KMBatchConverPDFView: KMBatchBatchSettingItemView {
     }
     
     func reloadData() {
-        
+        self.iconImage.image = NSImage(named: self.imageName)
+        self.titleLabel.stringValue = NSLocalizedString(self.title, comment: "")
+    }
+    
+    
+    @IBAction func contentButtonAction(_ sender: Any) {
+        if action != nil {
+            self.action!(self, self.contentButton)
+        }
     }
 }

+ 60 - 0
PDF Office/PDF Office/Class/PDFTools/Batch/Tool/KMImageTitleButton/KMImageTitleButton.xib

@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21507" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21507"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMImageTitleButton" customModule="PDF_Office" customModuleProvider="target">
+            <connections>
+                <outlet property="contentButton" destination="QWT-7S-lKb" id="m5O-hg-af4"/>
+                <outlet property="contentView" destination="c22-O7-iKe" id="PKh-X0-Imf"/>
+                <outlet property="iconImage" destination="4a3-xu-VfF" id="5Y3-vn-hlO"/>
+                <outlet property="titleLabel" destination="w4c-S9-rac" id="x1i-PW-WrO"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <customView id="c22-O7-iKe">
+            <rect key="frame" x="0.0" y="0.0" width="263" height="32"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <subviews>
+                <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="4a3-xu-VfF">
+                    <rect key="frame" x="0.0" y="8" width="16" height="16"/>
+                    <constraints>
+                        <constraint firstAttribute="width" constant="16" id="Wd1-DY-QSw"/>
+                        <constraint firstAttribute="height" constant="16" id="XSH-nn-vvX"/>
+                    </constraints>
+                    <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="7zw-oZ-vdx"/>
+                </imageView>
+                <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="w4c-S9-rac">
+                    <rect key="frame" x="22" y="8" width="4" height="16"/>
+                    <textFieldCell key="cell" lineBreakMode="clipping" id="hxC-IV-2Nn">
+                        <font key="font" metaFont="system"/>
+                        <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                    </textFieldCell>
+                </textField>
+                <button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="QWT-7S-lKb">
+                    <rect key="frame" x="0.0" y="0.0" width="263" height="32"/>
+                    <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                    <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" alignment="center" imageScaling="proportionallyDown" inset="2" id="HgM-gk-Pkd">
+                        <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                        <font key="font" metaFont="system"/>
+                    </buttonCell>
+                    <connections>
+                        <action selector="contentButtonAction:" target="-2" id="auf-Px-huE"/>
+                    </connections>
+                </button>
+            </subviews>
+            <constraints>
+                <constraint firstItem="w4c-S9-rac" firstAttribute="centerY" secondItem="c22-O7-iKe" secondAttribute="centerY" id="MHc-tJ-Jhh"/>
+                <constraint firstItem="4a3-xu-VfF" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" id="h5D-Tl-Nxk"/>
+                <constraint firstItem="4a3-xu-VfF" firstAttribute="centerY" secondItem="c22-O7-iKe" secondAttribute="centerY" id="ise-V7-VdY"/>
+                <constraint firstItem="w4c-S9-rac" firstAttribute="leading" secondItem="4a3-xu-VfF" secondAttribute="trailing" constant="8" id="qUb-V9-EdI"/>
+            </constraints>
+            <point key="canvasLocation" x="-74.5" y="-72"/>
+        </customView>
+    </objects>
+</document>

+ 1 - 1
PDF Office/PDF Office/Class/PDFTools/Batch/View/Choose/Background/KMBatchBackgroundView.swift

@@ -7,7 +7,7 @@
 
 import Cocoa
 
-class KMBatchBackgroundView: KMBatchBatchSettingItemView {
+class KMBatchBackgroundView: KMBatchSettingItemView {
 
     @IBOutlet var contentView: NSView!
 

+ 1 - 1
PDF Office/PDF Office/Class/PDFTools/Batch/View/Choose/BatchRemove/KMBatchBatchRemoveView.swift

@@ -7,7 +7,7 @@
 
 import Cocoa
 
-class KMBatchBatchRemoveView: KMBatchBatchSettingItemView {
+class KMBatchBatchRemoveView: KMBatchSettingItemView {
 
     @IBOutlet var contentView: NSView!
 

+ 1 - 1
PDF Office/PDF Office/Class/PDFTools/Batch/View/Choose/BatesNumber/KMBatchBatesNumberView.swift

@@ -7,7 +7,7 @@
 
 import Cocoa
 
-class KMBatchBatesNumberView: KMBatchBatchSettingItemView {
+class KMBatchBatesNumberView: KMBatchSettingItemView {
 
     @IBOutlet var contentView: NSView!
 

+ 1 - 1
PDF Office/PDF Office/Class/PDFTools/Batch/View/Choose/Compress/KMBatchCompressView.swift

@@ -7,7 +7,7 @@
 
 import Cocoa
 
-class KMBatchCompressView: KMBatchBatchSettingItemView {
+class KMBatchCompressView: KMBatchSettingItemView {
 
     @IBOutlet var contentView: NSView!
 

+ 143 - 0
PDF Office/PDF Office/Class/PDFTools/Batch/View/Choose/ConvertPDF/KMBatchConvertPDFView.swift

@@ -0,0 +1,143 @@
+//
+//  KMBatchConvertPDFView.swift
+//  PDF Office
+//
+//  Created by lizhe on 2023/1/16.
+//
+
+import Cocoa
+
+class KMBatchConvertPDFView: KMBatchSettingItemView {
+    @IBOutlet var contentView: NSView!
+
+    @IBOutlet weak var formatLabel: NSTextField!
+    
+    @IBOutlet weak var convertButton: NSButton!
+    @IBOutlet weak var convertTitleLabel: NSTextField!
+    @IBOutlet weak var convertIconImage: NSImageView!
+    
+    @IBOutlet weak var settingLabel: NSTextField!
+    @IBOutlet weak var retainFlowingTextButton: KMImageTitleButton!
+    @IBOutlet weak var retainPageLayoutButton: KMImageTitleButton!
+    
+    @IBOutlet weak var textRecognitionSettingLabel: NSTextField!
+    @IBOutlet weak var recognizeTextButton: KMImageTitleButton!
+    @IBOutlet weak var languageLabel: NSTextField!
+    
+    var data: KMBatchConvertPDFViewModel = KMBatchConvertPDFViewModel()
+    var presenter: KMBatchConvertPDFViewPresenter = KMBatchConvertPDFViewPresenter()
+    override func draw(_ dirtyRect: NSRect) {
+        super.draw(dirtyRect)
+
+        // Drawing code here.
+    }
+    
+    // MARK: 初始化
+    public required init?(coder decoder: NSCoder) {
+        super.init(coder: decoder)
+        initContentView()
+        setup()
+    }
+    
+    override init(frame frameRect: NSRect) {
+        super.init(frame: frameRect)
+        initContentView()
+        setup()
+    }
+    
+    private func initContentView() {
+        //绑定xib
+        let resource = NSNib(nibNamed: String(describing: KMBatchConvertPDFView.self),
+                             bundle: Bundle(for: KMBatchConvertPDFView.self))!
+        resource.instantiate(withOwner: self, topLevelObjects: nil)
+        addSubview(contentView)
+        contentView.translatesAutoresizingMaskIntoConstraints = false
+        NSLayoutConstraint.activate([
+            contentView.topAnchor.constraint(equalTo: topAnchor),
+            contentView.leftAnchor.constraint(equalTo: leftAnchor),
+            contentView.rightAnchor.constraint(equalTo: rightAnchor),
+            contentView.bottomAnchor.constraint(equalTo: bottomAnchor)])
+        contentView.updateConstraintsForSubtreeIfNeeded()
+    }
+    
+    func setup() {
+        self.presenter.initPresenter(view: self)
+        
+        self.retainFlowingTextButton.title = NSLocalizedString("Retain Flowing Text", comment: "")
+        self.retainFlowingTextButton.imageName = "btn_radio_unsel_on"
+        self.retainFlowingTextButton.action = { [unowned self] (view, button) in
+            self.presenter.retainFlowingTextAction(button: button)
+        }
+        
+        self.retainPageLayoutButton.title = NSLocalizedString("Retain Page Layout", comment: "")
+        self.retainPageLayoutButton.imageName = "btn_radio_unsel_on"
+        self.retainPageLayoutButton.action = { view, button in
+            self.presenter.retainPageLayoutAction(button: button)
+        }
+        
+        self.recognizeTextButton.title = NSLocalizedString("Recognize text if needed", comment: "")
+        self.recognizeTextButton.imageName = "btn_checkbox_unsel_on"
+        self.recognizeTextButton.action = { view, button in
+            self.presenter.needRecognizeTextAction(button: button)
+        }
+        //刷新数据
+        self.reloadData()
+    }
+    
+    func reloadData() {
+        
+        self.retainFlowingTextButton.imageName = "btn_radio_unsel_on"
+        self.retainPageLayoutButton.imageName = "btn_radio_unsel_on"
+        
+        switch data.layoutSettingType {
+        case .flowingText:
+            self.retainFlowingTextButton.imageName = "btn_radio_sel_on"
+        case .pageLayout:
+            self.retainPageLayoutButton.imageName = "btn_radio_sel_on"
+        }
+
+        
+        if data.needRecognizeText {
+            self.recognizeTextButton.imageName = "btn_checkbox_sel_on"
+        } else {
+            self.recognizeTextButton.imageName = "btn_checkbox_unsel_on"
+        }
+    }
+}
+
+protocol KMBatchConvertPDFViewAction {}
+extension KMBatchConvertPDFView: KMBatchConvertPDFViewAction {
+    @IBAction func convertPDFTypeAction(_ sender: NSButton) {
+        let menu = NSMenu()
+        menu.minimumWidth = sender.frame.size.width
+        for string in KMBatchConvertPDFType.allValues() {
+            menu.addItem(withTitle: NSLocalizedString(string, comment: ""), action: #selector(self.convertPDFTypeClick), target: self)
+        }
+        menu.popUp(positioning: menu.item(at: 0), at: CGPoint(x: 0, y: (sender ).fittingSize.height), in: sender )
+    }
+    
+    
+    @IBAction func languageAction(_ sender: NSButton) {
+        let menu = NSMenu()
+        menu.minimumWidth = sender.frame.size.width
+        for string in KMOCRLanguageType.allValues() {
+            menu.addItem(withTitle: NSLocalizedString(string, comment: ""), action: #selector(self.languageClick), target: self)
+        }
+        menu.popUp(positioning: menu.item(at: 0), at: CGPoint(x: 0, y: (sender ).fittingSize.height), in: sender)
+    }
+    
+    @objc func convertPDFTypeClick(item: NSMenuItem) {
+        self.convertTitleLabel.stringValue = item.title
+    }
+    
+    @objc func languageClick(item: NSMenuItem) {
+        self.languageLabel.stringValue = item.title
+    }
+}
+
+extension KMBatchConvertPDFView: KMBatchConvertPDFViewPresenterDelegate {
+    func showData(presenter: KMBatchConvertPDFViewPresenter, data: KMBatchConvertPDFViewModel) {
+        self.data = data
+        self.reloadData()
+    }
+}

+ 27 - 107
PDF Office/PDF Office/Class/PDFTools/Batch/View/Choose/ConverPDF/KMBatchConverPDFView.xib

@@ -6,9 +6,19 @@
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
-        <customObject id="-2" userLabel="File's Owner" customClass="KMBatchConverPDFView" customModule="PDF_Office" customModuleProvider="target">
+        <customObject id="-2" userLabel="File's Owner" customClass="KMBatchConvertPDFView" customModule="PDF_Office" customModuleProvider="target">
             <connections>
                 <outlet property="contentView" destination="c22-O7-iKe" id="bds-XY-G6R"/>
+                <outlet property="convertButton" destination="64o-IE-4ut" id="SR5-5y-SJN"/>
+                <outlet property="convertIconImage" destination="gqy-Wp-U61" id="lWX-BD-6KH"/>
+                <outlet property="convertTitleLabel" destination="I6b-oY-jAA" id="FuT-fA-xhu"/>
+                <outlet property="formatLabel" destination="Q8R-va-r5O" id="NKv-9j-hwk"/>
+                <outlet property="languageLabel" destination="1sJ-ss-p0d" id="Yvk-w6-2AY"/>
+                <outlet property="recognizeTextButton" destination="SEF-G4-Qmt" id="tWu-2S-TMh"/>
+                <outlet property="retainFlowingTextButton" destination="U8C-sm-GuB" id="Izf-8U-io7"/>
+                <outlet property="retainPageLayoutButton" destination="vv9-bg-fGf" id="jEi-6Y-Yvy"/>
+                <outlet property="settingLabel" destination="4XK-dg-5Wg" id="0ia-cH-E2K"/>
+                <outlet property="textRecognitionSettingLabel" destination="5ZX-wS-HCP" id="r4Y-sp-Thi"/>
             </connections>
         </customObject>
         <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
@@ -43,6 +53,9 @@
                                                 <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
                                                 <font key="font" metaFont="system"/>
                                             </buttonCell>
+                                            <connections>
+                                                <action selector="convertPDFTypeAction:" target="-2" id="BGL-1i-8ku"/>
+                                            </connections>
                                         </button>
                                         <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="I6b-oY-jAA">
                                             <rect key="frame" x="6" y="8" width="34" height="16"/>
@@ -60,7 +73,7 @@
                                                 <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="12" id="jtj-dR-uQi"/>
                                                 <constraint firstAttribute="height" constant="12" id="t2p-Uh-0tb"/>
                                             </constraints>
-                                            <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="fEa-Ag-EN4"/>
+                                            <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="btn_arrow_gray_down_s_norm_on" id="fEa-Ag-EN4"/>
                                         </imageView>
                                     </subviews>
                                     <constraints>
@@ -99,82 +112,16 @@
                                         <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
                                     </textFieldCell>
                                 </textField>
-                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="U8C-sm-GuB">
+                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="U8C-sm-GuB" customClass="KMImageTitleButton" customModule="PDF_Office" customModuleProvider="target">
                                     <rect key="frame" x="16" y="30" width="218" height="22"/>
-                                    <subviews>
-                                        <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="CC5-qv-aLk">
-                                            <rect key="frame" x="0.0" y="0.0" width="218" height="22"/>
-                                            <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" alignment="center" imageScaling="proportionallyDown" inset="2" id="M98-hO-zG7">
-                                                <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
-                                                <font key="font" metaFont="system"/>
-                                            </buttonCell>
-                                        </button>
-                                        <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="pp9-cZ-Q6z">
-                                            <rect key="frame" x="0.0" y="3" width="16" height="16"/>
-                                            <constraints>
-                                                <constraint firstAttribute="width" constant="16" id="KCc-bh-8RJ"/>
-                                                <constraint firstAttribute="height" constant="16" id="OIa-54-OwT"/>
-                                            </constraints>
-                                            <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="24L-bD-Dn7"/>
-                                        </imageView>
-                                        <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="k1F-sW-HnL">
-                                            <rect key="frame" x="22" y="3" width="121" height="16"/>
-                                            <textFieldCell key="cell" lineBreakMode="clipping" title="Retain Flowing Text" id="M1E-J9-8OH">
-                                                <font key="font" metaFont="system"/>
-                                                <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
-                                                <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
-                                            </textFieldCell>
-                                        </textField>
-                                    </subviews>
                                     <constraints>
-                                        <constraint firstItem="CC5-qv-aLk" firstAttribute="top" secondItem="U8C-sm-GuB" secondAttribute="top" id="6hU-yo-GgR"/>
-                                        <constraint firstAttribute="trailing" secondItem="CC5-qv-aLk" secondAttribute="trailing" id="9q7-8p-ULi"/>
-                                        <constraint firstAttribute="bottom" secondItem="CC5-qv-aLk" secondAttribute="bottom" id="Dx2-QS-ivw"/>
                                         <constraint firstAttribute="height" constant="22" id="GgY-3f-eEM"/>
-                                        <constraint firstItem="k1F-sW-HnL" firstAttribute="leading" secondItem="pp9-cZ-Q6z" secondAttribute="trailing" constant="8" id="RRW-ai-HEM"/>
-                                        <constraint firstItem="CC5-qv-aLk" firstAttribute="leading" secondItem="U8C-sm-GuB" secondAttribute="leading" id="UKH-jx-IpP"/>
-                                        <constraint firstItem="pp9-cZ-Q6z" firstAttribute="leading" secondItem="U8C-sm-GuB" secondAttribute="leading" id="XVw-2f-DCf"/>
-                                        <constraint firstItem="pp9-cZ-Q6z" firstAttribute="centerY" secondItem="U8C-sm-GuB" secondAttribute="centerY" id="jLX-Gn-2nv"/>
-                                        <constraint firstItem="k1F-sW-HnL" firstAttribute="centerY" secondItem="U8C-sm-GuB" secondAttribute="centerY" id="z16-mp-mBq"/>
                                     </constraints>
                                 </customView>
-                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="vv9-bg-fGf">
+                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="vv9-bg-fGf" customClass="KMImageTitleButton" customModule="PDF_Office" customModuleProvider="target">
                                     <rect key="frame" x="16" y="0.0" width="218" height="22"/>
-                                    <subviews>
-                                        <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="TbY-lA-xp2">
-                                            <rect key="frame" x="0.0" y="0.0" width="218" height="22"/>
-                                            <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" alignment="center" imageScaling="proportionallyDown" inset="2" id="IlF-9s-RlI">
-                                                <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
-                                                <font key="font" metaFont="system"/>
-                                            </buttonCell>
-                                        </button>
-                                        <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="sLi-tu-nPA">
-                                            <rect key="frame" x="0.0" y="3" width="16" height="16"/>
-                                            <constraints>
-                                                <constraint firstAttribute="height" constant="16" id="fsj-yd-jlR"/>
-                                                <constraint firstAttribute="width" constant="16" id="pMb-PQ-hhW"/>
-                                            </constraints>
-                                            <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="UPi-YE-xi3"/>
-                                        </imageView>
-                                        <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="wSU-RZ-b7f">
-                                            <rect key="frame" x="22" y="3" width="120" height="16"/>
-                                            <textFieldCell key="cell" lineBreakMode="clipping" title="Retain Page Layout" id="rnJ-2h-Gy6">
-                                                <font key="font" metaFont="system"/>
-                                                <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
-                                                <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
-                                            </textFieldCell>
-                                        </textField>
-                                    </subviews>
                                     <constraints>
-                                        <constraint firstItem="wSU-RZ-b7f" firstAttribute="centerY" secondItem="vv9-bg-fGf" secondAttribute="centerY" id="BB4-er-9Zz"/>
                                         <constraint firstAttribute="height" constant="22" id="FXE-za-FZI"/>
-                                        <constraint firstItem="TbY-lA-xp2" firstAttribute="top" secondItem="vv9-bg-fGf" secondAttribute="top" id="NK0-ic-FUr"/>
-                                        <constraint firstItem="sLi-tu-nPA" firstAttribute="centerY" secondItem="vv9-bg-fGf" secondAttribute="centerY" id="OiD-pj-hjM"/>
-                                        <constraint firstAttribute="bottom" secondItem="TbY-lA-xp2" secondAttribute="bottom" id="VDm-zA-0D7"/>
-                                        <constraint firstItem="sLi-tu-nPA" firstAttribute="leading" secondItem="vv9-bg-fGf" secondAttribute="leading" id="WOl-PB-Gv5"/>
-                                        <constraint firstItem="TbY-lA-xp2" firstAttribute="leading" secondItem="vv9-bg-fGf" secondAttribute="leading" id="ZvM-vX-8qQ"/>
-                                        <constraint firstItem="wSU-RZ-b7f" firstAttribute="leading" secondItem="sLi-tu-nPA" secondAttribute="trailing" constant="8" id="c4b-F1-vou"/>
-                                        <constraint firstAttribute="trailing" secondItem="TbY-lA-xp2" secondAttribute="trailing" id="yhg-RR-im3"/>
                                     </constraints>
                                 </customView>
                             </subviews>
@@ -194,7 +141,7 @@
                             <rect key="frame" x="0.0" y="432" width="250" height="90"/>
                             <subviews>
                                 <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="5ZX-wS-HCP">
-                                    <rect key="frame" x="18" y="70" width="159" height="20"/>
+                                    <rect key="frame" x="14" y="70" width="159" height="20"/>
                                     <constraints>
                                         <constraint firstAttribute="height" constant="20" id="fNP-Vu-SOK"/>
                                     </constraints>
@@ -213,6 +160,9 @@
                                                 <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
                                                 <font key="font" metaFont="system"/>
                                             </buttonCell>
+                                            <connections>
+                                                <action selector="languageAction:" target="-2" id="wih-RQ-BQI"/>
+                                            </connections>
                                         </button>
                                         <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1sJ-ss-p0d">
                                             <rect key="frame" x="6" y="8" width="48" height="16"/>
@@ -230,7 +180,7 @@
                                                 <constraint firstAttribute="height" constant="12" id="UX8-55-fuI"/>
                                                 <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="12" id="axW-oM-L1L"/>
                                             </constraints>
-                                            <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="8wE-vH-hWg"/>
+                                            <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="btn_arrow_gray_down_s_norm_on" id="8wE-vH-hWg"/>
                                         </imageView>
                                     </subviews>
                                     <constraints>
@@ -245,48 +195,15 @@
                                         <constraint firstItem="1sJ-ss-p0d" firstAttribute="leading" secondItem="I5f-ZY-bd3" secondAttribute="leading" constant="8" id="xXP-n9-Zht"/>
                                     </constraints>
                                 </customView>
-                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="SEF-G4-Qmt">
+                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="SEF-G4-Qmt" customClass="KMImageTitleButton" customModule="PDF_Office" customModuleProvider="target">
                                     <rect key="frame" x="16" y="40" width="218" height="22"/>
-                                    <subviews>
-                                        <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="C6a-4n-5Zs">
-                                            <rect key="frame" x="0.0" y="0.0" width="218" height="22"/>
-                                            <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" alignment="center" imageScaling="proportionallyDown" inset="2" id="EdN-Ps-v9I">
-                                                <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
-                                                <font key="font" metaFont="system"/>
-                                            </buttonCell>
-                                        </button>
-                                        <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="It3-pO-GJV">
-                                            <rect key="frame" x="0.0" y="3" width="16" height="16"/>
-                                            <constraints>
-                                                <constraint firstAttribute="height" constant="16" id="3ey-UF-OED"/>
-                                                <constraint firstAttribute="width" constant="16" id="USi-2D-1OC"/>
-                                            </constraints>
-                                            <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="j17-xG-njT"/>
-                                        </imageView>
-                                        <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="PUz-0D-hfR">
-                                            <rect key="frame" x="22" y="3" width="120" height="16"/>
-                                            <textFieldCell key="cell" lineBreakMode="clipping" title="Retain Page Layout" id="FnN-Vf-3wX">
-                                                <font key="font" metaFont="system"/>
-                                                <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
-                                                <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
-                                            </textFieldCell>
-                                        </textField>
-                                    </subviews>
                                     <constraints>
                                         <constraint firstAttribute="height" constant="22" id="0PO-pk-Fks"/>
-                                        <constraint firstAttribute="trailing" secondItem="C6a-4n-5Zs" secondAttribute="trailing" id="8JD-5N-1Yc"/>
-                                        <constraint firstItem="C6a-4n-5Zs" firstAttribute="top" secondItem="SEF-G4-Qmt" secondAttribute="top" id="Bhh-Ur-fRh"/>
-                                        <constraint firstAttribute="bottom" secondItem="C6a-4n-5Zs" secondAttribute="bottom" id="E5o-zF-H2M"/>
-                                        <constraint firstItem="C6a-4n-5Zs" firstAttribute="leading" secondItem="SEF-G4-Qmt" secondAttribute="leading" id="GVr-Kz-jGB"/>
-                                        <constraint firstItem="It3-pO-GJV" firstAttribute="leading" secondItem="SEF-G4-Qmt" secondAttribute="leading" id="PI7-pe-mrB"/>
-                                        <constraint firstItem="PUz-0D-hfR" firstAttribute="leading" secondItem="It3-pO-GJV" secondAttribute="trailing" constant="8" id="V5z-lf-ENC"/>
-                                        <constraint firstItem="It3-pO-GJV" firstAttribute="centerY" secondItem="SEF-G4-Qmt" secondAttribute="centerY" id="VfJ-w0-Mbf"/>
-                                        <constraint firstItem="PUz-0D-hfR" firstAttribute="centerY" secondItem="SEF-G4-Qmt" secondAttribute="centerY" id="cf0-FX-tO8"/>
                                     </constraints>
                                 </customView>
                             </subviews>
                             <constraints>
-                                <constraint firstItem="5ZX-wS-HCP" firstAttribute="leading" secondItem="Gwh-xV-eaX" secondAttribute="leading" constant="20" id="0Iy-1E-N1p"/>
+                                <constraint firstItem="5ZX-wS-HCP" firstAttribute="leading" secondItem="Gwh-xV-eaX" secondAttribute="leading" constant="16" id="0Iy-1E-N1p"/>
                                 <constraint firstItem="SEF-G4-Qmt" firstAttribute="leading" secondItem="Gwh-xV-eaX" secondAttribute="leading" constant="16" id="0WO-ui-c1o"/>
                                 <constraint firstItem="SEF-G4-Qmt" firstAttribute="top" secondItem="5ZX-wS-HCP" secondAttribute="bottom" constant="8" id="14w-ap-V3p"/>
                                 <constraint firstAttribute="trailing" secondItem="SEF-G4-Qmt" secondAttribute="trailing" constant="16" id="7NM-oD-P9J"/>
@@ -333,4 +250,7 @@
             <point key="canvasLocation" x="-68" y="139"/>
         </customView>
     </objects>
+    <resources>
+        <image name="btn_arrow_gray_down_s_norm_on" width="12" height="12"/>
+    </resources>
 </document>

+ 37 - 0
PDF Office/PDF Office/Class/PDFTools/Batch/View/Choose/ConvertPDF/Model/KMBatchConvertPDFViewModel.swift

@@ -0,0 +1,37 @@
+//
+//  KMBatchConvertPDFViewModel.swift
+//  PDF Office
+//
+//  Created by lizhe on 2023/1/18.
+//
+
+import Cocoa
+
+//转换类型
+enum KMBatchConvertPDFType: String, CaseIterable {
+    case word = "Word"
+    case excel = "Excel"
+    case csv = "CSV"
+    case image = "Image"
+    case ppt = "PPT"
+    
+    static func allValues() -> [String] {
+        var array: [String] = []
+        for key in KMBatchConvertPDFType.allCases {
+            array.append(key.rawValue)
+        }
+        return array
+    }
+}
+
+enum KMBatchLayoutSettingType: String, CaseIterable {
+    case flowingText = "Word"
+    case pageLayout = "Excel"
+}
+
+class KMBatchConvertPDFViewModel: NSObject {
+    var languageType: KMOCRLanguageType = .english
+    var convertPDFType: KMBatchConvertPDFType = .word
+    var needRecognizeText: Bool = false
+    var layoutSettingType: KMBatchLayoutSettingType = .flowingText
+}

+ 88 - 0
PDF Office/PDF Office/Class/PDFTools/Batch/View/Choose/ConvertPDF/Presenter/KMBatchConvertPDFViewPresenter.swift

@@ -0,0 +1,88 @@
+//
+//  KMBatchConvertPDFViewPresenter.swift
+//  PDF Office
+//
+//  Created by lizhe on 2023/1/18.
+//
+
+import Cocoa
+
+class KMBatchConvertPDFViewPresenter: NSObject {
+    lazy var modelData: KMBatchConvertPDFViewModel = KMBatchConvertPDFViewModel()
+    var view: KMBatchConvertPDFView?
+    fileprivate weak var delegate: KMBatchConvertPDFViewPresenterDelegate?
+
+}
+
+extension KMBatchConvertPDFViewPresenter: KMBatchConvertPDFViewPresenterProtocol {
+    /**
+     初始化presenter
+     */
+    func initPresenter(view: NSView) {
+        self.delegate = (view as! any KMBatchConvertPDFViewPresenterDelegate)
+       
+            
+    }
+    
+    func retainFlowingTextAction(button: NSButton) {
+        self.modelData.layoutSettingType = .flowingText
+        
+        self.delegate?.showData(presenter: self, data: self.modelData)
+    }
+    
+    func retainPageLayoutAction(button: NSButton) {
+        self.modelData.layoutSettingType = .pageLayout
+        
+        self.delegate?.showData(presenter: self, data: self.modelData)
+    }
+    
+    func needRecognizeTextAction(button: NSButton) {
+        self.modelData.needRecognizeText = (button.state == .on) ? true : false
+        
+        self.delegate?.showData(presenter: self, data: self.modelData)
+    }
+    
+    func cleanAll() {
+        self.delegate?.showData(presenter: self, data: self.modelData)
+    }
+    
+    func free() {
+        view = nil
+        delegate = nil
+    }
+}
+
+
+protocol KMBatchConvertPDFViewPresenterDelegate: AnyObject {
+    /**
+     @abstract 回调,返回处理后的数据<KMBatchProcessingViewModel>类型
+     @param presenter
+     @param data 返回数据
+     */
+    func showData(presenter: KMBatchConvertPDFViewPresenter, data: KMBatchConvertPDFViewModel)
+}
+
+protocol KMBatchConvertPDFViewPresenterProtocol {
+    /**
+     @abstract 绑定视图与数据
+     @param view 视图
+     @param data 资源 <KMBatchProcessingViewModel>类型
+     */
+    func initPresenter(view: NSView)
+    /**
+     @abstract 布局设置
+     */
+    func retainFlowingTextAction(button: NSButton)
+    /**
+     @abstract 布局设置
+     */
+    func retainPageLayoutAction(button: NSButton)
+    /**
+     @abstract 文字识别
+     */
+    func needRecognizeTextAction(button: NSButton)
+    /**
+     @abstract 解除绑定
+     */
+    func free()
+}

+ 1 - 1
PDF Office/PDF Office/Class/PDFTools/Batch/View/Choose/Header&Footer/KMBatchHeaderAndFooterView.swift

@@ -7,7 +7,7 @@
 
 import Cocoa
 
-class KMBatchHeaderAndFooterView: KMBatchBatchSettingItemView {
+class KMBatchHeaderAndFooterView: KMBatchSettingItemView {
 
     @IBOutlet var contentView: NSView!
 

+ 2 - 2
PDF Office/PDF Office/Class/PDFTools/Batch/View/Choose/KMBatchBatchSettingItemView/KMBatchBatchSettingItemView.swift

@@ -1,5 +1,5 @@
 //
-//  KMBatchBatchSettingItemView.swift
+//  KMBatchSettingItemView.swift
 //  PDF Office
 //
 //  Created by lizhe on 2023/1/16.
@@ -7,7 +7,7 @@
 
 import Cocoa
 
-class KMBatchBatchSettingItemView: NSView {
+class KMBatchSettingItemView: NSView {
 
     var type: KMBatchCollectionViewType = .unknow
     

+ 7 - 6
PDF Office/PDF Office/Class/PDFTools/Batch/View/Choose/KMBatchSettingView.swift

@@ -10,8 +10,9 @@ import Cocoa
 class KMBatchSettingView: NSView {
     @IBOutlet var contentView: NSView!
     
-    var currentView: KMBatchBatchSettingItemView = KMBatchBatchSettingItemView()
-    lazy var itemViewArray: [KMBatchBatchSettingItemView] = []
+    
+    var currentView: KMBatchSettingItemView = KMBatchSettingItemView()
+    lazy var itemViewArray: [KMBatchSettingItemView] = []
     
     var type: KMBatchCollectionViewType = .convertPDF {
         didSet {
@@ -60,7 +61,7 @@ class KMBatchSettingView: NSView {
     
     func reloadData() {
         if self.type != self.currentView.type {
-            let view: KMBatchBatchSettingItemView = self.fetchCurrentView(type: self.type)
+            let view: KMBatchSettingItemView = self.fetchCurrentView(type: self.type)
             self.currentView.removeFromSuperview()
             self.addSubview(view)
             view.translatesAutoresizingMaskIntoConstraints = false
@@ -74,8 +75,8 @@ class KMBatchSettingView: NSView {
         }
     }
     
-    func fetchCurrentView(type: KMBatchCollectionViewType) -> KMBatchBatchSettingItemView {
-        var view: KMBatchBatchSettingItemView = KMBatchSecurityView.init()
+    func fetchCurrentView(type: KMBatchCollectionViewType) -> KMBatchSettingItemView {
+        var view: KMBatchSettingItemView = KMBatchSecurityView.init()
         
         var isExist = false
         for item in self.itemViewArray {
@@ -88,7 +89,7 @@ class KMBatchSettingView: NSView {
         if !isExist {
             switch type {
             case .convertPDF:
-                view = KMBatchConverPDFView.init()
+                view = KMBatchConvertPDFView.init()
                 break
             case .compress:
                 view = KMBatchCompressView.init()

+ 1 - 1
PDF Office/PDF Office/Class/PDFTools/Batch/View/Choose/Security/KMBatchSecurityView.swift

@@ -7,7 +7,7 @@
 
 import Cocoa
 
-class KMBatchSecurityView: KMBatchBatchSettingItemView {
+class KMBatchSecurityView: KMBatchSettingItemView {
 
     @IBOutlet var contentView: NSView!
 

+ 1 - 1
PDF Office/PDF Office/Class/PDFTools/Batch/View/Choose/Watermark/KMBatchWatermarkView.swift

@@ -7,7 +7,7 @@
 
 import Cocoa
 
-class KMBatchWatermarkView: KMBatchBatchSettingItemView {
+class KMBatchWatermarkView: KMBatchSettingItemView {
 
     @IBOutlet var contentView: NSView!
 

+ 6 - 6
PDF Office/PDF Office/Class/PDFTools/ImageToPDF/View/KMBatchProcessingView/KMBatchProcessingView.swift

@@ -76,16 +76,16 @@ extension KMBatchProcessingView: KMBatchProcessingViewAction {
     @IBAction func addFiles(_ sender: Any) {
         let menu = NSMenu.init()
         menu.addItem(withTitle: NSLocalizedString("Import from", comment: "") + NSLocalizedString("My Mac", comment: ""),
-                                action: #selector(addPhotos),
-                                keyEquivalent: "")
+                     action: #selector(addPhotos),
+                     target: self)
         
         menu.addItem(withTitle: NSLocalizedString("Import from Camera...", comment: ""),
-                                 action: #selector(addPhotosFromCamera),
-                                keyEquivalent: "")
+                     action: #selector(addPhotosFromCamera),
+                     target: self)
         
         menu.addItem(withTitle: NSLocalizedString("Import from Scanner...", comment: ""),
-                                 action: #selector(addPhotosFromScanner),
-                                keyEquivalent: "")
+                     action: #selector(addPhotosFromScanner),
+                     target: self)
         
         menu.popUp(positioning: menu.item(at: 0), at: CGPoint(x: 0, y: (sender as! NSView).fittingSize.height), in: sender as? NSView)
     }

+ 9 - 1
PDF Office/PDF Office/Class/PDFTools/OCR/Model/KMOCRModel.swift

@@ -22,7 +22,7 @@ struct KMOCRExportOptions: OptionSet {
 /**
  OCR语言类型
  */
-enum KMOCRLanguageType: String {
+enum KMOCRLanguageType: String, CaseIterable {
     case auto
     case english = "en-US"
     case french = "fr-FR"
@@ -32,6 +32,14 @@ enum KMOCRLanguageType: String {
     case portuguese = "pt-BR"
     case chineseTraditional = "zh-Hant"
     case chineseSimplified = "zh-Hans"
+    
+    static func allValues() -> [String] {
+        var array: [String] = []
+        for key in KMOCRLanguageType.allCases {
+            array.append(key.rawValue)
+        }
+        return array
+    }
 }
 
 class KMOCRModel: NSObject {

+ 3 - 3
PDF Office/PDF Office/Class/PDFTools/Secure/Controller/KMRemovePasswordAlertWindowController.xib

@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21225" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21507" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
     <dependencies>
         <deployment identifier="macosx"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21225"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21507"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
@@ -20,7 +20,7 @@
             <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
             <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
             <rect key="contentRect" x="196" y="240" width="260" height="270"/>
-            <rect key="screenRect" x="0.0" y="0.0" width="1440" height="875"/>
+            <rect key="screenRect" x="0.0" y="0.0" width="2560" height="1415"/>
             <value key="minSize" type="size" width="260" height="270"/>
             <value key="maxSize" type="size" width="260" height="270"/>
             <view key="contentView" id="se5-gp-TjO">