ソースを参照

Merge branch 'develop_v1.2' of git.kdan.cc:Mac_PDF/PDF_Office into develop_v1.2

tangchao 1 年間 前
コミット
cbfef4c5c0
25 ファイル変更2603 行追加3 行削除
  1. 64 0
      PDF Office/PDF Master.xcodeproj/project.pbxproj
  2. 712 2
      PDF Office/PDF Master.xcodeproj/xcuserdata/lizhe.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
  3. 38 0
      PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/KMComparativeTableViewController.swift
  4. 10 1
      PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/KMComparativeTableViewController.xib
  5. 449 0
      PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/Source/KMCompatative.xcassets/Badge.imageset/Badge.pdf
  6. 21 0
      PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/Source/KMCompatative.xcassets/Badge.imageset/Contents.json
  7. 21 0
      PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/Source/KMCompatative.xcassets/Upgrade your plan.imageset/Contents.json
  8. 316 0
      PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/Source/KMCompatative.xcassets/Upgrade your plan.imageset/Upgrade your plan.pdf
  9. 21 0
      PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/Source/KMCompatative.xcassets/background_comparative_Badge.imageset/Contents.json
  10. BIN
      PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/Source/KMCompatative.xcassets/background_comparative_Badge.imageset/image 35.pdf
  11. 21 0
      PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/Source/KMCompatative.xcassets/tips 1.imageset/Contents.json
  12. 79 0
      PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/Source/KMCompatative.xcassets/tips 1.imageset/tips.pdf
  13. 21 0
      PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/Source/KMCompatative.xcassets/tips.imageset/Contents.json
  14. 75 0
      PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/Source/KMCompatative.xcassets/tips.imageset/tips.pdf
  15. 1 0
      PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/View/ComparativeView/KMComparativeOutlineView.xib
  16. 1 0
      PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/View/ComparativeView/View/KMComparativeOutlineCell.xib
  17. 1 0
      PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/View/ComparativeView/View/KMComparativeOutlineSectionCell.xib
  18. 1 0
      PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/View/KMComparativeTableView.xib
  19. 198 0
      PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/View/KMComparativeView/KMComparativeView.swift
  20. 227 0
      PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/View/KMComparativeView/KMComparativeView.xib
  21. 114 0
      PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/View/KMComparativeView/View/KMComparativeViewCollectionItem.swift
  22. 128 0
      PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/View/KMComparativeView/View/KMComparativeViewCollectionItem.xib
  23. 35 0
      PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/View/KMComparativeView/View/KMComparativeViewCollectionItemItem.swift
  24. 48 0
      PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/View/KMComparativeView/View/KMComparativeViewCollectionItemItem.xib
  25. 1 0
      PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Annotation/KMScreenViewController/ScreenCollectionView/KMAnnotationScreenCollectionView.xib

+ 64 - 0
PDF Office/PDF Master.xcodeproj/project.pbxproj

@@ -1930,6 +1930,24 @@
 		ADF1569C29A63CBF001D1018 /* KMLightMember.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = ADF1569B29A63CBF001D1018 /* KMLightMember.xcassets */; };
 		ADF1569D29A63CBF001D1018 /* KMLightMember.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = ADF1569B29A63CBF001D1018 /* KMLightMember.xcassets */; };
 		ADF1569E29A63CBF001D1018 /* KMLightMember.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = ADF1569B29A63CBF001D1018 /* KMLightMember.xcassets */; };
+		ADF6B86C2A480C5F0090CB78 /* KMComparativeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADF6B86B2A480C5F0090CB78 /* KMComparativeView.swift */; };
+		ADF6B86D2A480C5F0090CB78 /* KMComparativeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADF6B86B2A480C5F0090CB78 /* KMComparativeView.swift */; };
+		ADF6B86E2A480C5F0090CB78 /* KMComparativeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADF6B86B2A480C5F0090CB78 /* KMComparativeView.swift */; };
+		ADF6B8702A480CCE0090CB78 /* KMComparativeView.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADF6B86F2A480CCE0090CB78 /* KMComparativeView.xib */; };
+		ADF6B8712A480CCE0090CB78 /* KMComparativeView.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADF6B86F2A480CCE0090CB78 /* KMComparativeView.xib */; };
+		ADF6B8722A480CCE0090CB78 /* KMComparativeView.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADF6B86F2A480CCE0090CB78 /* KMComparativeView.xib */; };
+		ADF6B8762A48155E0090CB78 /* KMComparativeViewCollectionItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADF6B8742A48155E0090CB78 /* KMComparativeViewCollectionItem.swift */; };
+		ADF6B8772A48155E0090CB78 /* KMComparativeViewCollectionItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADF6B8742A48155E0090CB78 /* KMComparativeViewCollectionItem.swift */; };
+		ADF6B8782A48155E0090CB78 /* KMComparativeViewCollectionItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADF6B8742A48155E0090CB78 /* KMComparativeViewCollectionItem.swift */; };
+		ADF6B8792A48155E0090CB78 /* KMComparativeViewCollectionItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADF6B8752A48155E0090CB78 /* KMComparativeViewCollectionItem.xib */; };
+		ADF6B87A2A48155E0090CB78 /* KMComparativeViewCollectionItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADF6B8752A48155E0090CB78 /* KMComparativeViewCollectionItem.xib */; };
+		ADF6B87B2A48155E0090CB78 /* KMComparativeViewCollectionItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADF6B8752A48155E0090CB78 /* KMComparativeViewCollectionItem.xib */; };
+		ADF6B87E2A485A8F0090CB78 /* KMComparativeViewCollectionItemItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADF6B87C2A485A8F0090CB78 /* KMComparativeViewCollectionItemItem.swift */; };
+		ADF6B87F2A485A8F0090CB78 /* KMComparativeViewCollectionItemItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADF6B87C2A485A8F0090CB78 /* KMComparativeViewCollectionItemItem.swift */; };
+		ADF6B8802A485A8F0090CB78 /* KMComparativeViewCollectionItemItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADF6B87C2A485A8F0090CB78 /* KMComparativeViewCollectionItemItem.swift */; };
+		ADF6B8812A485A8F0090CB78 /* KMComparativeViewCollectionItemItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADF6B87D2A485A8F0090CB78 /* KMComparativeViewCollectionItemItem.xib */; };
+		ADF6B8822A485A8F0090CB78 /* KMComparativeViewCollectionItemItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADF6B87D2A485A8F0090CB78 /* KMComparativeViewCollectionItemItem.xib */; };
+		ADF6B8832A485A8F0090CB78 /* KMComparativeViewCollectionItemItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADF6B87D2A485A8F0090CB78 /* KMComparativeViewCollectionItemItem.xib */; };
 		ADF9ED2F29A8507400C4A943 /* KMAccountInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADF9ED2E29A8507400C4A943 /* KMAccountInfoView.swift */; };
 		ADF9ED3029A8507400C4A943 /* KMAccountInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADF9ED2E29A8507400C4A943 /* KMAccountInfoView.swift */; };
 		ADF9ED3129A8507400C4A943 /* KMAccountInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADF9ED2E29A8507400C4A943 /* KMAccountInfoView.swift */; };
@@ -4247,6 +4265,12 @@
 		ADF1569229A62D1D001D1018 /* KMLoginLeftImageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMLoginLeftImageView.swift; sourceTree = "<group>"; };
 		ADF1569629A62D31001D1018 /* KMLoginLeftImageView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMLoginLeftImageView.xib; sourceTree = "<group>"; };
 		ADF1569B29A63CBF001D1018 /* KMLightMember.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = KMLightMember.xcassets; sourceTree = "<group>"; };
+		ADF6B86B2A480C5F0090CB78 /* KMComparativeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMComparativeView.swift; sourceTree = "<group>"; };
+		ADF6B86F2A480CCE0090CB78 /* KMComparativeView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMComparativeView.xib; sourceTree = "<group>"; };
+		ADF6B8742A48155E0090CB78 /* KMComparativeViewCollectionItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMComparativeViewCollectionItem.swift; sourceTree = "<group>"; };
+		ADF6B8752A48155E0090CB78 /* KMComparativeViewCollectionItem.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMComparativeViewCollectionItem.xib; sourceTree = "<group>"; };
+		ADF6B87C2A485A8F0090CB78 /* KMComparativeViewCollectionItemItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMComparativeViewCollectionItemItem.swift; sourceTree = "<group>"; };
+		ADF6B87D2A485A8F0090CB78 /* KMComparativeViewCollectionItemItem.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMComparativeViewCollectionItemItem.xib; sourceTree = "<group>"; };
 		ADF9ED2E29A8507400C4A943 /* KMAccountInfoView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KMAccountInfoView.swift; sourceTree = "<group>"; };
 		ADF9ED3229A850D200C4A943 /* KMAccountInfoView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMAccountInfoView.xib; sourceTree = "<group>"; };
 		BB00300E298CA383002DD1A0 /* KMPreferenceSegementControl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPreferenceSegementControl.swift; sourceTree = "<group>"; };
@@ -6082,6 +6106,7 @@
 		AD0FA4EE29A857E900EDEB50 /* View */ = {
 			isa = PBXGroup;
 			children = (
+				ADF6B86A2A4808E00090CB78 /* KMComparativeView */,
 				ADBC372729CA94DA00D93208 /* ComparativeView */,
 				AD0FA4EF29A8580D00EDEB50 /* KMComparativeTableView.swift */,
 				AD0FA4F429A8582C00EDEB50 /* KMComparativeTableView.xib */,
@@ -7435,6 +7460,27 @@
 			path = Source;
 			sourceTree = "<group>";
 		};
+		ADF6B86A2A4808E00090CB78 /* KMComparativeView */ = {
+			isa = PBXGroup;
+			children = (
+				ADF6B8732A48153E0090CB78 /* View */,
+				ADF6B86B2A480C5F0090CB78 /* KMComparativeView.swift */,
+				ADF6B86F2A480CCE0090CB78 /* KMComparativeView.xib */,
+			);
+			path = KMComparativeView;
+			sourceTree = "<group>";
+		};
+		ADF6B8732A48153E0090CB78 /* View */ = {
+			isa = PBXGroup;
+			children = (
+				ADF6B8742A48155E0090CB78 /* KMComparativeViewCollectionItem.swift */,
+				ADF6B8752A48155E0090CB78 /* KMComparativeViewCollectionItem.xib */,
+				ADF6B87C2A485A8F0090CB78 /* KMComparativeViewCollectionItemItem.swift */,
+				ADF6B87D2A485A8F0090CB78 /* KMComparativeViewCollectionItemItem.xib */,
+			);
+			path = View;
+			sourceTree = "<group>";
+		};
 		ADF9ED2D29A8507400C4A943 /* View */ = {
 			isa = PBXGroup;
 			children = (
@@ -9542,6 +9588,7 @@
 				BBC3483E2955A60B008D2CD1 /* KMBackgroundPropertyInfoController.xib in Resources */,
 				BBFE6E822930EBD400142C01 /* KMCompressWindowController.xib in Resources */,
 				ADC25DFC2923BA710080A3F6 /* KMImageToPDFWindowController.xib in Resources */,
+				ADF6B8702A480CCE0090CB78 /* KMComparativeView.xib in Resources */,
 				AD4B4550294072B90076FA14 /* KMOCRWindowController.xib in Resources */,
 				89E4E6E62963CD82002DBA6F /* KMGeneralAnnotationViewController.xib in Resources */,
 				ADB1FE8A29752F5600ED072D /* KMBatchWatermarkView.xib in Resources */,
@@ -9634,6 +9681,7 @@
 				9F0CB46A2967E5CB00007028 /* KMPropertiesPanelSubViewController.xib in Resources */,
 				9F0CB4722967E63100007028 /* KMPropertiesPanelNameSubVC.xib in Resources */,
 				ADE8BC2A29F7CDB000570F89 /* KMPageNumberDisplayView.xib in Resources */,
+				ADF6B8812A485A8F0090CB78 /* KMComparativeViewCollectionItemItem.xib in Resources */,
 				AD2D74B929F0D3A100EDC5E4 /* KMCancellationSuccessView.xib in Resources */,
 				BB3AAB9329878CE000992A5A /* KMWatermarkAdjectivePropertyMainController.xib in Resources */,
 				ADD272D429B9CFE20032B5D6 /* KMLightNoNetworkView.xib in Resources */,
@@ -9703,6 +9751,7 @@
 				9F728FAB29926B4300F0C225 /* black_pdfreaderpro_home_en.pdf in Resources */,
 				AD0FA51629A9FA8F00EDEB50 /* KMResetPasswordView.xib in Resources */,
 				BBC3480F29558DC1008D2CD1 /* KMBackgroundController.xib in Resources */,
+				ADF6B8792A48155E0090CB78 /* KMComparativeViewCollectionItem.xib in Resources */,
 				ADC31FAC2A0E0C3900ED44A2 /* KMEditPropertyAlignmentView.xib in Resources */,
 				ADD1B6F82946C0CA00C3FFF7 /* KMPrintChoosePageSizeMultipageView.xib in Resources */,
 				89E4E76429656A88002DBA6F /* KMAnnotationStampViewController.xib in Resources */,
@@ -9920,6 +9969,7 @@
 				89E4E7302963FBA2002DBA6F /* KMPropertiesViewPopController.xib in Resources */,
 				ADE614B229779C6D00F62ED7 /* KMImageTitleButton.xib in Resources */,
 				9F221EDB29A9EC0900978A59 /* KMFillSignTextPanel.xib in Resources */,
+				ADF6B87A2A48155E0090CB78 /* KMComparativeViewCollectionItem.xib in Resources */,
 				AD2D74BA29F0D3A100EDC5E4 /* KMCancellationSuccessView.xib in Resources */,
 				BB2F61542966A91D001CB369 /* KMBackgroundPropertyHomeController.xib in Resources */,
 				9F0CB4632966C9E200007028 /* KMFormPropertPanelViewController.xib in Resources */,
@@ -9934,6 +9984,7 @@
 				9F853A092947137500DF644E /* newtab.pdf in Resources */,
 				ADB1FE7329752ED500ED072D /* KMBatchConvertPDFView.xib in Resources */,
 				9F0CB4A329683E2600007028 /* KMPropertiesPanelSizeSubVC.xib in Resources */,
+				ADF6B8822A485A8F0090CB78 /* KMComparativeViewCollectionItemItem.xib in Resources */,
 				BBC34820295593F0008D2CD1 /* KMBackgroundListController.xib in Resources */,
 				9F1F82C0292E01860092C4B4 /* KMCloudEmptyCollectionViewItem.xib in Resources */,
 				9FD0FA3529CD947000F2AB0D /* KMOpacityPanel.xib in Resources */,
@@ -9968,6 +10019,7 @@
 				9F8539FA2947137500DF644E /* newtab_p.pdf in Resources */,
 				9FBA0EF228FFC716001117AF /* KMHomeFastToolViewController.xib in Resources */,
 				ADB1FE2C297006DF00ED072D /* KMBatchWindowController.xib in Resources */,
+				ADF6B8712A480CCE0090CB78 /* KMComparativeView.xib in Resources */,
 				ADCFFC0729C04617007D3657 /* BOTA.xcassets in Resources */,
 				AD1CA4152A061CCD0070541F /* KMAnnotationScreenColorViewItem.xib in Resources */,
 				ADC075D429875F6A006C752F /* KMBatchConverPDFExcelView.xib in Resources */,
@@ -10212,6 +10264,7 @@
 				BB3BA9082A13684A00623C08 /* Assets.xcassets in Resources */,
 				AD0FA51829A9FA8F00EDEB50 /* KMResetPasswordView.xib in Resources */,
 				ADE3C1E929A5ABC200793B13 /* KMLoginWindowController.xib in Resources */,
+				ADF6B8722A480CCE0090CB78 /* KMComparativeView.xib in Resources */,
 				ADC075C629866B05006C752F /* KMBatchTextRecognitionView.xib in Resources */,
 				AD8810B729A846B100178CA1 /* KMVerficationCodeWindowController.xib in Resources */,
 				BBC348192955920B008D2CD1 /* KMBackgroundPropertyController.xib in Resources */,
@@ -10296,6 +10349,7 @@
 				ADCB98EF2924779800B51A03 /* KMBatchProcessingStateTableCell.xib in Resources */,
 				BB897233294B08DE0045787C /* KMWatermarkViewController.xib in Resources */,
 				9F0CB4BA2977BC1000007028 /* KMPropertiesPanelPreviewSubVC.xib in Resources */,
+				ADF6B87B2A48155E0090CB78 /* KMComparativeViewCollectionItem.xib in Resources */,
 				9F56648C2988B16F00020985 /* KMTextfieldVC.xib in Resources */,
 				9FA607E328FD4C9F00B46586 /* KMHomePopViewController.xib in Resources */,
 				F356720A29AF184A00740FF3 /* CPDFListAnnotationNoteWindowController.xib in Resources */,
@@ -10377,6 +10431,7 @@
 				AD1CA4262A061D190070541F /* KMAnnotationScreenAuthorViewItem.xib in Resources */,
 				BBC3481129558DC1008D2CD1 /* KMBackgroundController.xib in Resources */,
 				89316827296D73CC0073EA59 /* KMSignatureAnnotationViewController.xib in Resources */,
+				ADF6B8832A485A8F0090CB78 /* KMComparativeViewCollectionItemItem.xib in Resources */,
 				BB24D4AC2977BE6700041659 /* KMRedactConfirmWindowController.xib in Resources */,
 				BB8B17382907B64D001C5EA5 /* CipherTextView.xib in Resources */,
 				ADCFFC0829C04617007D3657 /* BOTA.xcassets in Resources */,
@@ -10525,6 +10580,7 @@
 				BB897246294C19980045787C /* KMWatermarkAdjectiveListController.swift in Sources */,
 				BBC347FD295448DE008D2CD1 /* KMWatermarkTemplateModel.swift in Sources */,
 				F386CEFC29361E2D00C44524 /* CPDFListViewConfig.m in Sources */,
+				ADF6B87E2A485A8F0090CB78 /* KMComparativeViewCollectionItemItem.swift in Sources */,
 				BBB9B310299A5D6D004F3235 /* KMCloudDownloadOperationQueue.m in Sources */,
 				ADBC375429CAE94700D93208 /* KMComparativeOutlineSectionCell.swift in Sources */,
 				BB1EC80C2967DFE800EC0BC3 /* NSNumber_SKExtensions.m in Sources */,
@@ -10761,6 +10817,7 @@
 				F34BF92129530320002C25A2 /* NSString+PDFListView.m in Sources */,
 				ADBC2D28299DCA76006280C8 /* NSTextField+Layer.swift in Sources */,
 				89E4E7222963FB23002DBA6F /* KMGeneralButton.m in Sources */,
+				ADF6B8762A48155E0090CB78 /* KMComparativeViewCollectionItem.swift in Sources */,
 				BB49ECF1293F40F500C82CA2 /* KMConvertPageRangeSettingItemView.swift in Sources */,
 				BBBF68802A3BF17F0058E14E /* KMFilePromiseProvider.swift in Sources */,
 				9F0CB46F2967E63100007028 /* KMPropertiesPanelNameSubVC.swift in Sources */,
@@ -10870,6 +10927,7 @@
 				F373230B292DF9410013862C /* CPDFTextWidgetAnnotation+PDFListView.m in Sources */,
 				9F0CB45F2966C9E200007028 /* KMFormPropertPanelViewController.swift in Sources */,
 				ADCFFC0229C004AD007D3657 /* KMBookMarkTableRowView.swift in Sources */,
+				ADF6B86C2A480C5F0090CB78 /* KMComparativeView.swift in Sources */,
 				9FAAA339290F72CC0046FFCE /* KMHistoryFileCollectionView.swift in Sources */,
 				BB2F18462A0C7E250003F65E /* KMConvertBaseView.swift in Sources */,
 				BB99ACCA292DEE6E0048AFD9 /* KMMergeTitleBar.swift in Sources */,
@@ -11399,6 +11457,7 @@
 				BB2F184B2A0C911B0003F65E /* KMBaseWindowController.swift in Sources */,
 				9FDD0FB329534FEA000C4DAD /* KMGlobal.swift in Sources */,
 				89E93EDF2999DA6D00F10F66 /* KMNoteFilterCollevtionViewItem.m in Sources */,
+				ADF6B87F2A485A8F0090CB78 /* KMComparativeViewCollectionItemItem.swift in Sources */,
 				BBB7B4922A03AD2A00B58A5A /* KMPDFEditToolbar.swift in Sources */,
 				BB8F4587295B19AC0037EA22 /* KMHeaderFooterDateInfoView.swift in Sources */,
 				ADF9ED3029A8507400C4A943 /* KMAccountInfoView.swift in Sources */,
@@ -11623,6 +11682,7 @@
 				9F0201732A1B488C00C9B673 /* KMAITranslationVC.swift in Sources */,
 				BBFBE74728DD7DB7008B2335 /* ViewController.swift in Sources */,
 				9FDD0F812952FC36000C4DAD /* KMDesignToken.swift in Sources */,
+				ADF6B8772A48155E0090CB78 /* KMComparativeViewCollectionItem.swift in Sources */,
 				9F0201972A1F352100C9B673 /* KMAITranslationConfirmWindowController.swift in Sources */,
 				BB147036299DC0D200784A6A /* OIDRegistrationResponse.m in Sources */,
 				BB86C21A28F561C7005AD968 /* NSColor_SKExtensions.m in Sources */,
@@ -11869,6 +11929,7 @@
 				ADE614B629861CCC00F62ED7 /* KMBatchSelectedFilesView.swift in Sources */,
 				BBB7B48A2A033F6200B58A5A /* KMThumbnailView.swift in Sources */,
 				9F0CB4F6298655D500007028 /* KMDesignToken+Fill.swift in Sources */,
+				ADF6B86D2A480C5F0090CB78 /* KMComparativeView.swift in Sources */,
 				BBB7B48E2A0384E100B58A5A /* NSCollectionViewItem+KMExtension.swift in Sources */,
 				BBA8B7A42935CD740097D183 /* KMRemovePasswordAlertWindowController.swift in Sources */,
 				BB4EEF4D2976544F003A3537 /* KMRedactAligementView.swift in Sources */,
@@ -12254,6 +12315,7 @@
 				BB14703D299DC0D200784A6A /* OIDErrorUtilities.m in Sources */,
 				BB7F7BF929AA469F00A3E4E7 /* KMSigntureViewItem.m in Sources */,
 				BBFE6E772930E53000142C01 /* KMMergePopoverViewController.swift in Sources */,
+				ADF6B8782A48155E0090CB78 /* KMComparativeViewCollectionItem.swift in Sources */,
 				89E4E7102963D62C002DBA6F /* KMAnnotationFontWindowController.m in Sources */,
 				AD9527C0295294E20039D2BC /* KMPrintPageModel.swift in Sources */,
 				BBB14A6529792D6900936EDB /* KMRedactPageRangeContentView.swift in Sources */,
@@ -12329,6 +12391,7 @@
 				BB2C6ACF28F41BA000478A33 /* CPDFListView.m in Sources */,
 				BB2EDF6C296ECE17003BCF58 /* KMPageEditInsertTypeItemView.swift in Sources */,
 				BBD7FE052A1323A400F96075 /* KMEditImagePropertyViewController.swift in Sources */,
+				ADF6B8802A485A8F0090CB78 /* KMComparativeViewCollectionItemItem.swift in Sources */,
 				9F1FE4D729406E4700E952CA /* NSPasteboard+Utils.m in Sources */,
 				BBB9B30F299A5D6D004F3235 /* KMCloudUploadOperationQueue.m in Sources */,
 				BB14700D299DC0D100784A6A /* OIDAuthorizationRequest.m in Sources */,
@@ -12721,6 +12784,7 @@
 				BBFBE74828DD7DB8008B2335 /* AppDelegate.swift in Sources */,
 				BB8B173E2907CDD9001C5EA5 /* NibLoadable.swift in Sources */,
 				ADCB9964292B8DAB00B51A03 /* KMOCRManager.swift in Sources */,
+				ADF6B86E2A480C5F0090CB78 /* KMComparativeView.swift in Sources */,
 				AD9527BC295291F20039D2BC /* KMPrintPage.swift in Sources */,
 				BB14702B299DC0D100784A6A /* OIDAuthorizationService.m in Sources */,
 				89E4E74D2964216F002DBA6F /* NSString_SKExtensions.m in Sources */,

ファイルの差分が大きいため隠しています
+ 712 - 2
PDF Office/PDF Master.xcodeproj/xcuserdata/lizhe.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist


+ 38 - 0
PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/KMComparativeTableViewController.swift

@@ -31,6 +31,8 @@ enum KMComparativeInputType: Int {
 class KMComparativeTableViewController: NSWindowController {
 
     @IBOutlet weak var comparativeTableView: KMComparativeTableView!
+    @IBOutlet weak var comparativeView: KMComparativeView!
+    
     var inputType: KMComparativeInputType?
     
     var loginAction: KMComparativeTableViewControllerLoginAction?
@@ -130,6 +132,42 @@ class KMComparativeTableViewController: NSWindowController {
 
             callBack(self!)
         }
+        
+        self.comparativeView.closeAction = { view in
+            print("关闭")
+            comparativeMainWindow?.endSheet(view.window!)
+            view.window?.close()
+            comparativeController = nil
+            comparativeMainWindow = nil
+        }
+        
+//        self.comparativeTableView.signUpAction = { [weak self] view in
+//            print("注册")
+//            guard let callBack = self?.signUpAction else { return }
+//
+//            callBack(self!)
+//        }
+//
+//        self.comparativeTableView.loginAction = { [weak self] view in
+//            print("登录")
+//            guard let callBack = self?.loginAction else { return }
+//
+//            callBack(self!)
+//        }
+//
+//        self.comparativeTableView.subscriptionAction = { [weak self] view in
+//            print("订阅")
+//            guard let callBack = self?.subscriptionAction else { return }
+//
+//            callBack(self!)
+//        }
+//
+//        self.comparativeTableView.restoreAction = { [weak self] view in
+//            print("订阅")
+//            guard let callBack = self?.restoreAction else { return }
+//
+//            callBack(self!)
+//        }
     }
     
 }

+ 10 - 1
PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/KMComparativeTableViewController.xib

@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
     <dependencies>
+        <deployment identifier="macosx"/>
         <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21701"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
@@ -8,6 +9,7 @@
         <customObject id="-2" userLabel="File's Owner" customClass="KMComparativeTableViewController" customModule="PDF_Master" customModuleProvider="target">
             <connections>
                 <outlet property="comparativeTableView" destination="ZQ8-GZ-j0l" id="oQc-Q6-1rj"/>
+                <outlet property="comparativeView" destination="hxs-Ao-ieK" id="Wgu-UR-72C"/>
                 <outlet property="window" destination="F0z-JX-Cv5" id="gIp-Ho-8D9"/>
             </connections>
         </customObject>
@@ -22,13 +24,20 @@
                 <rect key="frame" x="0.0" y="0.0" width="836" height="680"/>
                 <autoresizingMask key="autoresizingMask"/>
                 <subviews>
-                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="ZQ8-GZ-j0l" customClass="KMComparativeTableView" customModule="PDF_Master" customModuleProvider="target">
+                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="hxs-Ao-ieK" customClass="KMComparativeView" customModule="PDF_Master" customModuleProvider="target">
+                        <rect key="frame" x="0.0" y="0.0" width="836" height="680"/>
+                    </customView>
+                    <customView hidden="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ZQ8-GZ-j0l" customClass="KMComparativeTableView" customModule="PDF_Master" customModuleProvider="target">
                         <rect key="frame" x="0.0" y="0.0" width="836" height="680"/>
                     </customView>
                 </subviews>
                 <constraints>
+                    <constraint firstAttribute="bottom" secondItem="hxs-Ao-ieK" secondAttribute="bottom" id="3E0-v6-OGb"/>
+                    <constraint firstAttribute="trailing" secondItem="hxs-Ao-ieK" secondAttribute="trailing" id="AsJ-g3-3jA"/>
                     <constraint firstAttribute="bottom" secondItem="ZQ8-GZ-j0l" secondAttribute="bottom" id="CqO-bm-keA"/>
                     <constraint firstAttribute="trailing" secondItem="ZQ8-GZ-j0l" secondAttribute="trailing" id="WHq-dO-KGE"/>
+                    <constraint firstItem="hxs-Ao-ieK" firstAttribute="leading" secondItem="se5-gp-TjO" secondAttribute="leading" id="ipm-qC-f1C"/>
+                    <constraint firstItem="hxs-Ao-ieK" firstAttribute="top" secondItem="se5-gp-TjO" secondAttribute="top" id="k3t-b3-Yh5"/>
                     <constraint firstItem="ZQ8-GZ-j0l" firstAttribute="top" secondItem="se5-gp-TjO" secondAttribute="top" id="uho-lT-dMQ"/>
                     <constraint firstItem="ZQ8-GZ-j0l" firstAttribute="leading" secondItem="se5-gp-TjO" secondAttribute="leading" id="yXm-AP-GnM"/>
                 </constraints>

+ 449 - 0
PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/Source/KMCompatative.xcassets/Badge.imageset/Badge.pdf

@@ -0,0 +1,449 @@
+%PDF-1.7
+
+1 0 obj
+  << /Length 2 0 R >>
+stream
+0.266113 0 0.000000 0.000000 0.266113 1.000000 d1
+
+endstream
+endobj
+
+2 0 obj
+  50
+endobj
+
+3 0 obj
+  << /Length 4 0 R >>
+stream
+0.995605 0 0.063965 -0.009766 0.931641 0.788086 d1
+
+endstream
+endobj
+
+4 0 obj
+  51
+endobj
+
+5 0 obj
+  << /Length 6 0 R >>
+stream
+0.664551 0 0.063965 -0.017578 0.601074 0.803711 d1
+
+endstream
+endobj
+
+6 0 obj
+  51
+endobj
+
+7 0 obj
+  << /Length 8 0 R >>
+stream
+0.588379 0 0.086914 0.000000 0.536133 0.791504 d1
+
+endstream
+endobj
+
+8 0 obj
+  50
+endobj
+
+9 0 obj
+  << /Length 10 0 R >>
+stream
+0.780762 0 0.057129 -0.017578 0.723633 0.796875 d1
+
+endstream
+endobj
+
+10 0 obj
+  51
+endobj
+
+11 0 obj
+  << /Length 12 0 R >>
+stream
+0.646973 0 0.077148 -0.017578 0.587402 0.799316 d1
+
+endstream
+endobj
+
+12 0 obj
+  51
+endobj
+
+13 0 obj
+  [ 0.780762 0.995605 0.664551 0.266113 0.588379 0.646973 ]
+endobj
+
+14 0 obj
+  << /Length 15 0 R >>
+stream
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (FigmaPDF)
+   /Ordering (FigmaPDF)
+   /Supplement 0
+>> def
+/CMapName /A-B-C def
+/CMapType 2 def
+1 begincodespacerange
+<00> <FF>
+endcodespacerange
+1 beginbfchar
+<00> <004F>
+endbfchar
+1 beginbfchar
+<01> <0025>
+endbfchar
+1 beginbfchar
+<02> <0030>
+endbfchar
+1 beginbfchar
+<03> <0020>
+endbfchar
+1 beginbfchar
+<04> <0046>
+endbfchar
+1 beginbfchar
+<05> <0035>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+endstream
+endobj
+
+15 0 obj
+  512
+endobj
+
+16 0 obj
+  << /Subtype /Type3
+     /CharProcs << /C3 1 0 R
+                   /C1 3 0 R
+                   /C2 5 0 R
+                   /C4 7 0 R
+                   /C0 9 0 R
+                   /C5 11 0 R
+                >>
+     /Encoding << /Type /Encoding
+                  /Differences [ 0 /C0 /C1 /C2 /C3 /C4 /C5 ]
+               >>
+     /Widths 13 0 R
+     /FontBBox [ 0.000000 0.000000 0.000000 0.000000 ]
+     /FontMatrix [ 1.000000 0.000000 0.000000 1.000000 0.000000 0.000000 ]
+     /Type /Font
+     /ToUnicode 14 0 R
+     /FirstChar 0
+     /LastChar 5
+     /Resources << >>
+  >>
+endobj
+
+17 0 obj
+  << /Font << /F1 16 0 R >>
+     /ExtGState << /E1 << /ca 0.100000 >> >>
+  >>
+endobj
+
+18 0 obj
+  << /Length 19 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+/E1 gs
+1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
+1.000000 0.521472 0.179167 scn
+0.000000 20.000000 m
+0.000000 22.209139 1.790861 24.000000 4.000000 24.000000 c
+76.000000 24.000000 l
+78.209137 24.000000 80.000000 22.209139 80.000000 20.000000 c
+80.000000 4.000000 l
+80.000000 1.790861 78.209137 0.000000 76.000000 0.000000 c
+4.000001 0.000000 l
+1.790862 0.000000 0.000000 1.790861 0.000000 4.000000 c
+0.000000 20.000000 l
+h
+f
+n
+Q
+q
+0.000000 20.000000 m
+0.000000 22.209139 1.790861 24.000000 4.000000 24.000000 c
+76.000000 24.000000 l
+78.209137 24.000000 80.000000 22.209139 80.000000 20.000000 c
+80.000000 4.000000 l
+80.000000 1.790861 78.209137 0.000000 76.000000 0.000000 c
+4.000001 0.000000 l
+1.790862 0.000000 0.000000 1.790861 0.000000 4.000000 c
+0.000000 20.000000 l
+h
+W*
+n
+q
+1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
+1.000000 0.521472 0.179167 scn
+4.000000 23.000000 m
+76.000000 23.000000 l
+76.000000 25.000000 l
+4.000000 25.000000 l
+4.000000 23.000000 l
+h
+79.000000 20.000000 m
+79.000000 4.000000 l
+81.000000 4.000000 l
+81.000000 20.000000 l
+79.000000 20.000000 l
+h
+76.000000 1.000000 m
+4.000001 1.000000 l
+4.000001 -1.000000 l
+76.000000 -1.000000 l
+76.000000 1.000000 l
+h
+1.000000 4.000000 m
+1.000000 20.000000 l
+-1.000000 20.000000 l
+-1.000000 4.000000 l
+1.000000 4.000000 l
+h
+4.000001 1.000000 m
+2.343147 1.000000 1.000000 2.343145 1.000000 4.000000 c
+-1.000000 4.000000 l
+-1.000000 1.238577 1.238577 -1.000000 4.000001 -1.000000 c
+4.000001 1.000000 l
+h
+79.000000 4.000000 m
+79.000000 2.343145 77.656853 1.000000 76.000000 1.000000 c
+76.000000 -1.000000 l
+78.761421 -1.000000 81.000000 1.238577 81.000000 4.000000 c
+79.000000 4.000000 l
+h
+76.000000 23.000000 m
+77.656853 23.000000 79.000000 21.656853 79.000000 20.000000 c
+81.000000 20.000000 l
+81.000000 22.761423 78.761421 25.000000 76.000000 25.000000 c
+76.000000 23.000000 l
+h
+4.000000 25.000000 m
+1.238576 25.000000 -1.000000 22.761423 -1.000000 20.000000 c
+1.000000 20.000000 l
+1.000000 21.656855 2.343146 23.000000 4.000000 23.000000 c
+4.000000 25.000000 l
+h
+f
+n
+Q
+Q
+q
+1.000000 0.000000 -0.000000 1.000000 8.000000 11.643555 cm
+0.823529 0.384314 0.109804 scn
+0.000000 -4.643555 m
+h
+4.593750 -4.889648 m
+2.577148 -4.889648 1.216797 -3.659180 1.086914 -2.039062 c
+1.080078 -1.950195 l
+2.707031 -1.950195 l
+2.713867 -1.998047 l
+2.843750 -2.804688 3.588867 -3.447266 4.600586 -3.447266 c
+5.755859 -3.447266 6.548828 -2.633789 6.548828 -1.471680 c
+6.548828 -1.458008 l
+6.548828 -0.309570 5.742188 0.497070 4.614258 0.497070 c
+4.060547 0.497070 3.582031 0.333008 3.219727 0.004883 c
+3.041992 -0.145508 2.877930 -0.336914 2.761719 -0.555664 c
+1.250977 -0.555664 l
+1.729492 5.220703 l
+7.649414 5.220703 l
+7.649414 3.771484 l
+3.103516 3.771484 l
+2.830078 0.770508 l
+2.946289 0.770508 l
+3.356445 1.433594 4.122070 1.830078 5.051758 1.830078 c
+6.890625 1.830078 8.223633 0.462891 8.223633 -1.423828 c
+8.223633 -1.437500 l
+8.223633 -3.488281 6.726562 -4.889648 4.593750 -4.889648 c
+h
+9.064453 -4.643555 m
+h
+13.712891 -4.889648 m
+11.368164 -4.889648 9.959961 -2.900391 9.959961 0.285156 c
+9.959961 0.298828 l
+9.959961 3.484375 11.368164 5.466797 13.712891 5.466797 c
+16.057617 5.466797 17.479492 3.484375 17.479492 0.298828 c
+17.479492 0.285156 l
+17.479492 -2.900391 16.057617 -4.889648 13.712891 -4.889648 c
+h
+13.712891 -3.460938 m
+14.970703 -3.460938 15.702148 -2.052734 15.702148 0.285156 c
+15.702148 0.298828 l
+15.702148 2.636719 14.970703 4.031250 13.712891 4.031250 c
+12.455078 4.031250 11.737305 2.636719 11.737305 0.298828 c
+11.737305 0.285156 l
+11.737305 -2.052734 12.455078 -3.460938 13.712891 -3.460938 c
+h
+18.375000 -4.643555 m
+h
+21.485352 -0.104492 m
+20.104492 -0.104492 19.270508 0.941406 19.270508 2.623047 c
+19.270508 2.629883 l
+19.270508 4.311523 20.104492 5.357422 21.485352 5.357422 c
+22.859375 5.357422 23.700195 4.311523 23.700195 2.629883 c
+23.700195 2.623047 l
+23.700195 0.941406 22.859375 -0.104492 21.485352 -0.104492 c
+h
+22.702148 -4.643555 m
+21.307617 -4.643555 l
+27.986328 5.220703 l
+29.380859 5.220703 l
+22.702148 -4.643555 l
+h
+21.485352 0.886719 m
+22.107422 0.886719 22.469727 1.522461 22.469727 2.623047 c
+22.469727 2.629883 l
+22.469727 3.737305 22.107422 4.366211 21.485352 4.366211 c
+20.856445 4.366211 20.507812 3.737305 20.507812 2.629883 c
+20.507812 2.623047 l
+20.507812 1.522461 20.856445 0.886719 21.485352 0.886719 c
+h
+29.203125 -4.780273 m
+27.822266 -4.780273 26.981445 -3.727539 26.981445 -2.045898 c
+26.981445 -2.039062 l
+26.981445 -0.357422 27.822266 0.681641 29.203125 0.681641 c
+30.577148 0.681641 31.417969 -0.357422 31.417969 -2.039062 c
+31.417969 -2.045898 l
+31.417969 -3.727539 30.577148 -4.780273 29.203125 -4.780273 c
+h
+29.203125 -3.789062 m
+29.825195 -3.789062 30.187500 -3.153320 30.187500 -2.045898 c
+30.187500 -2.039062 l
+30.187500 -0.938477 29.825195 -0.309570 29.203125 -0.309570 c
+28.574219 -0.309570 28.218750 -0.938477 28.218750 -2.039062 c
+28.218750 -2.045898 l
+28.218750 -3.153320 28.574219 -3.789062 29.203125 -3.789062 c
+h
+36.052734 -4.643555 m
+h
+41.521484 -4.889648 m
+38.629883 -4.889648 36.852539 -2.886719 36.852539 0.285156 c
+36.852539 0.298828 l
+36.852539 3.477539 38.657227 5.466797 41.521484 5.466797 c
+44.392578 5.466797 46.183594 3.477539 46.183594 0.298828 c
+46.183594 0.285156 l
+46.183594 -2.886719 44.399414 -4.889648 41.521484 -4.889648 c
+h
+41.521484 -3.365234 m
+43.278320 -3.365234 44.385742 -1.929688 44.385742 0.285156 c
+44.385742 0.298828 l
+44.385742 2.527344 43.271484 3.942383 41.521484 3.942383 c
+39.771484 3.942383 38.650391 2.527344 38.650391 0.298828 c
+38.650391 0.285156 l
+38.650391 -1.929688 39.744141 -3.365234 41.521484 -3.365234 c
+h
+46.990234 -4.643555 m
+h
+48.207031 -4.643555 m
+48.207031 5.220703 l
+54.496094 5.220703 l
+54.496094 3.737305 l
+49.970703 3.737305 l
+49.970703 0.818359 l
+54.106445 0.818359 l
+54.106445 -0.617188 l
+49.970703 -0.617188 l
+49.970703 -4.643555 l
+48.207031 -4.643555 l
+h
+55.234375 -4.643555 m
+h
+56.451172 -4.643555 m
+56.451172 5.220703 l
+62.740234 5.220703 l
+62.740234 3.737305 l
+58.214844 3.737305 l
+58.214844 0.818359 l
+62.350586 0.818359 l
+62.350586 -0.617188 l
+58.214844 -0.617188 l
+58.214844 -4.643555 l
+56.451172 -4.643555 l
+h
+f
+n
+Q
+q
+1.000000 0.000000 -0.000000 1.000000 8.000000 11.643555 cm
+BT
+14.000000 0.000000 0.000000 14.000000 0.000000 -4.643555 Tm
+/F1 1.000000 Tf
+[ (\005) (\002) (\001) (\003) (\000) (\004) (\004) ] TJ
+ET
+Q
+
+endstream
+endobj
+
+19 0 obj
+  6372
+endobj
+
+20 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 80.000000 24.000000 ]
+     /Resources 17 0 R
+     /Contents 18 0 R
+     /Parent 21 0 R
+  >>
+endobj
+
+21 0 obj
+  << /Kids [ 20 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+22 0 obj
+  << /Pages 21 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 23
+0000000000 65535 f
+0000000010 00000 n
+0000000116 00000 n
+0000000137 00000 n
+0000000244 00000 n
+0000000265 00000 n
+0000000372 00000 n
+0000000393 00000 n
+0000000499 00000 n
+0000000520 00000 n
+0000000628 00000 n
+0000000650 00000 n
+0000000759 00000 n
+0000000781 00000 n
+0000000858 00000 n
+0000001428 00000 n
+0000001451 00000 n
+0000002048 00000 n
+0000002143 00000 n
+0000008573 00000 n
+0000008597 00000 n
+0000008774 00000 n
+0000008850 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 22 0 R
+   /Size 23
+>>
+startxref
+8911
+%%EOF

+ 21 - 0
PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/Source/KMCompatative.xcassets/Badge.imageset/Contents.json

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

+ 21 - 0
PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/Source/KMCompatative.xcassets/Upgrade your plan.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "filename" : "Upgrade your plan.pdf",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 316 - 0
PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/Source/KMCompatative.xcassets/Upgrade your plan.imageset/Upgrade your plan.pdf

@@ -0,0 +1,316 @@
+%PDF-1.7
+
+1 0 obj
+  << /Length 2 0 R
+     /Range [ 0.000000 1.000000 0.000000 1.000000 0.000000 1.000000 ]
+     /Domain [ 0.000000 1.000000 ]
+     /FunctionType 4
+  >>
+stream
+{  0.538583 exch 0.529167 exch 1.000000 exch dup 0.000000 gt { exch pop exch pop exch pop dup 0.000000 sub 0.197750 mul 0.538583 add exch dup 0.000000 sub 0.000000 mul 0.529167 add exch dup 0.000000 sub 0.000000 mul 1.000000 add exch } if dup 1.000000 gt { exch pop exch pop exch pop 0.736333 exch 0.529167 exch 1.000000 exch } if pop }
+endstream
+endobj
+
+2 0 obj
+  336
+endobj
+
+3 0 obj
+  << /Length 4 0 R
+     /Range [ 0.000000 1.000000 0.000000 1.000000 0.000000 1.000000 ]
+     /Domain [ 0.000000 1.000000 ]
+     /FunctionType 4
+  >>
+stream
+{  0.538583 exch 0.529167 exch 1.000000 exch dup 0.000000 gt { exch pop exch pop exch pop dup 0.000000 sub 0.197750 mul 0.538583 add exch dup 0.000000 sub 0.000000 mul 0.529167 add exch dup 0.000000 sub 0.000000 mul 1.000000 add exch } if dup 1.000000 gt { exch pop exch pop exch pop 0.736333 exch 0.529167 exch 1.000000 exch } if pop }
+endstream
+endobj
+
+4 0 obj
+  336
+endobj
+
+5 0 obj
+  << /Length 6 0 R
+     /Range [ 0.000000 1.000000 0.000000 1.000000 0.000000 1.000000 ]
+     /Domain [ 0.000000 1.000000 ]
+     /FunctionType 4
+  >>
+stream
+{  0.538583 exch 0.529167 exch 1.000000 exch dup 0.000000 gt { exch pop exch pop exch pop dup 0.000000 sub 0.197750 mul 0.538583 add exch dup 0.000000 sub 0.000000 mul 0.529167 add exch dup 0.000000 sub 0.000000 mul 1.000000 add exch } if dup 1.000000 gt { exch pop exch pop exch pop 0.736333 exch 0.529167 exch 1.000000 exch } if pop }
+endstream
+endobj
+
+6 0 obj
+  336
+endobj
+
+7 0 obj
+  << /Length 8 0 R
+     /Range [ 0.000000 1.000000 0.000000 1.000000 0.000000 1.000000 ]
+     /Domain [ 0.000000 1.000000 ]
+     /FunctionType 4
+  >>
+stream
+{  0.538583 exch 0.529167 exch 1.000000 exch dup 0.000000 gt { exch pop exch pop exch pop dup 0.000000 sub 0.197750 mul 0.538583 add exch dup 0.000000 sub 0.000000 mul 0.529167 add exch dup 0.000000 sub 0.000000 mul 1.000000 add exch } if dup 1.000000 gt { exch pop exch pop exch pop 0.736333 exch 0.529167 exch 1.000000 exch } if pop }
+endstream
+endobj
+
+8 0 obj
+  336
+endobj
+
+9 0 obj
+  << /Length 10 0 R
+     /Range [ 0.000000 1.000000 0.000000 1.000000 0.000000 1.000000 ]
+     /Domain [ 0.000000 1.000000 ]
+     /FunctionType 4
+  >>
+stream
+{  0.345833 exch 0.411250 exch 1.000000 exch dup 0.000000 gt { exch pop exch pop exch pop dup 0.000000 sub 0.390500 mul 0.345833 add exch dup 0.000000 sub 0.117917 mul 0.411250 add exch dup 0.000000 sub 0.000000 mul 1.000000 add exch } if dup 1.000000 gt { exch pop exch pop exch pop 0.736333 exch 0.529167 exch 1.000000 exch } if pop }
+endstream
+endobj
+
+10 0 obj
+  336
+endobj
+
+11 0 obj
+  << /Pattern << /P4 << /Matrix [ 2.000000 -3.461539 3.461539 2.000000 -3.083121 19.345116 ]
+                        /Shading << /Coords [ 0.000000 0.000000 1.000000 0.000000 ]
+                                    /ColorSpace /DeviceRGB
+                                    /Function 1 0 R
+                                    /Domain [ 0.000000 1.000000 ]
+                                    /ShadingType 2
+                                    /Extend [ true true ]
+                                 >>
+                        /PatternType 2
+                        /Type /Pattern
+                     >>
+                 /P3 << /Matrix [ 2.000000 -3.461539 3.461539 2.000000 29.916880 18.345116 ]
+                        /Shading << /Coords [ 0.000000 0.000000 1.000000 0.000000 ]
+                                    /ColorSpace /DeviceRGB
+                                    /Function 3 0 R
+                                    /Domain [ 0.000000 1.000000 ]
+                                    /ShadingType 2
+                                    /Extend [ true true ]
+                                 >>
+                        /PatternType 2
+                        /Type /Pattern
+                     >>
+                 /P5 << /Matrix [ 3.500000 -6.057692 6.057692 3.500000 -5.395583 9.353951 ]
+                        /Shading << /Coords [ 0.000000 0.000000 1.000000 0.000000 ]
+                                    /ColorSpace /DeviceRGB
+                                    /Function 5 0 R
+                                    /Domain [ 0.000000 1.000000 ]
+                                    /ShadingType 2
+                                    /Extend [ true true ]
+                                 >>
+                        /PatternType 2
+                        /Type /Pattern
+                     >>
+                 /P2 << /Matrix [ 4.000000 -6.923078 6.923078 4.000000 22.833759 26.690231 ]
+                        /Shading << /Coords [ 0.000000 0.000000 1.000000 0.000000 ]
+                                    /ColorSpace /DeviceRGB
+                                    /Function 7 0 R
+                                    /Domain [ 0.000000 1.000000 ]
+                                    /ShadingType 2
+                                    /Extend [ true true ]
+                                 >>
+                        /PatternType 2
+                        /Type /Pattern
+                     >>
+                 /P1 << /Matrix [ 14.499999 -28.499998 28.499998 14.499999 -22.574705 14.681298 ]
+                        /Shading << /Coords [ 0.000000 0.000000 1.000000 0.000000 ]
+                                    /ColorSpace /DeviceRGB
+                                    /Function 9 0 R
+                                    /Domain [ 0.000000 1.000000 ]
+                                    /ShadingType 2
+                                    /Extend [ true true ]
+                                 >>
+                        /PatternType 2
+                        /Type /Pattern
+                     >>
+              >> >>
+endobj
+
+12 0 obj
+  << /Length 13 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 5.000000 5.000000 cm
+/Pattern cs
+/P1 scn
+26.000000 13.000000 m
+26.000000 5.820299 20.179701 0.000000 13.000000 0.000000 c
+5.820298 0.000000 0.000000 5.820299 0.000000 13.000000 c
+0.000000 20.179703 5.820298 26.000000 13.000000 26.000000 c
+20.179701 26.000000 26.000000 20.179703 26.000000 13.000000 c
+h
+f
+n
+Q
+q
+1.000000 0.000000 -0.000000 1.000000 11.000000 10.402420 cm
+1.000000 1.000000 1.000000 scn
+7.703657 14.802354 m
+13.711923 8.697227 l
+14.336831 8.062246 13.894246 6.976525 13.010493 6.976525 c
+9.134470 6.976525 l
+9.134470 1.098410 l
+9.134470 0.546124 8.686754 0.098411 8.134470 0.098411 c
+6.224483 0.098411 l
+5.672198 0.098411 5.224483 0.546125 5.224483 1.098411 c
+5.224483 6.976525 l
+0.993961 6.976525 l
+0.110208 6.976525 -0.332377 8.062246 0.292531 8.697227 c
+6.300797 14.802354 l
+6.688186 15.195989 7.316268 15.195989 7.703657 14.802354 c
+h
+f*
+n
+Q
+q
+1.000000 0.000000 -0.000000 1.000000 29.000000 24.000000 cm
+/Pattern cs
+/P2 scn
+4.000000 8.000000 m
+4.706426 6.028041 l
+4.927114 5.412002 5.412002 4.927114 6.028041 4.706426 c
+8.000000 4.000000 l
+6.028041 3.293574 l
+5.412002 3.072886 4.927114 2.587998 4.706426 1.971959 c
+4.000000 0.000000 l
+3.293574 1.971959 l
+3.072886 2.587998 2.587998 3.072886 1.971959 3.293574 c
+0.000000 4.000000 l
+1.971959 4.706426 l
+2.587998 4.927114 3.072887 5.412002 3.293574 6.028041 c
+4.000000 8.000000 l
+h
+f
+n
+Q
+q
+1.000000 0.000000 -0.000000 1.000000 33.000000 17.000000 cm
+/Pattern cs
+/P3 scn
+2.000000 4.000000 m
+2.178925 3.500539 l
+2.399612 2.884500 2.884500 2.399612 3.500540 2.178925 c
+4.000000 2.000000 l
+3.500539 1.821075 l
+2.884500 1.600388 2.399612 1.115500 2.178925 0.499460 c
+2.000000 0.000000 l
+1.821075 0.499461 l
+1.600388 1.115500 1.115500 1.600388 0.499461 1.821075 c
+0.000000 2.000000 l
+0.499461 2.178925 l
+1.115500 2.399612 1.600388 2.884500 1.821075 3.500539 c
+2.000000 4.000000 l
+h
+f
+n
+Q
+q
+1.000000 0.000000 -0.000000 1.000000 0.000000 18.000000 cm
+/Pattern cs
+/P4 scn
+2.000000 4.000000 m
+2.178925 3.500539 l
+2.399612 2.884500 2.884500 2.399612 3.500540 2.178925 c
+4.000000 2.000000 l
+3.500539 1.821075 l
+2.884500 1.600388 2.399612 1.115500 2.178925 0.499460 c
+2.000000 0.000000 l
+1.821075 0.499461 l
+1.600388 1.115500 1.115500 1.600388 0.499461 1.821075 c
+0.000000 2.000000 l
+0.499461 2.178925 l
+1.115500 2.399612 1.600388 2.884500 1.821075 3.500539 c
+2.000000 4.000000 l
+h
+f
+n
+Q
+q
+1.000000 0.000000 -0.000000 1.000000 0.000000 7.000000 cm
+/Pattern cs
+/P5 scn
+3.500000 7.000000 m
+4.074551 5.396166 l
+4.295238 4.780127 4.780127 4.295238 5.396166 4.074551 c
+7.000000 3.500000 l
+5.396167 2.925449 l
+4.780128 2.704762 4.295238 2.219873 4.074551 1.603834 c
+3.500000 0.000000 l
+2.925450 1.603833 l
+2.704762 2.219872 2.219874 2.704762 1.603835 2.925449 c
+0.000000 3.500000 l
+1.603834 4.074551 l
+2.219873 4.295238 2.704762 4.780127 2.925449 5.396165 c
+3.500000 7.000000 l
+h
+f
+n
+Q
+
+endstream
+endobj
+
+13 0 obj
+  2901
+endobj
+
+14 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 37.000000 36.000000 ]
+     /Resources 11 0 R
+     /Contents 12 0 R
+     /Parent 15 0 R
+  >>
+endobj
+
+15 0 obj
+  << /Kids [ 14 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+16 0 obj
+  << /Pages 15 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 17
+0000000000 65535 f
+0000000010 00000 n
+0000000530 00000 n
+0000000552 00000 n
+0000001072 00000 n
+0000001094 00000 n
+0000001614 00000 n
+0000001636 00000 n
+0000002156 00000 n
+0000002178 00000 n
+0000002699 00000 n
+0000002722 00000 n
+0000005768 00000 n
+0000008727 00000 n
+0000008751 00000 n
+0000008928 00000 n
+0000009004 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 16 0 R
+   /Size 17
+>>
+startxref
+9065
+%%EOF

+ 21 - 0
PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/Source/KMCompatative.xcassets/background_comparative_Badge.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "filename" : "image 35.pdf",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/Source/KMCompatative.xcassets/background_comparative_Badge.imageset/image 35.pdf


+ 21 - 0
PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/Source/KMCompatative.xcassets/tips 1.imageset/Contents.json

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

+ 79 - 0
PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/Source/KMCompatative.xcassets/tips 1.imageset/tips.pdf

@@ -0,0 +1,79 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+0.707107 0.707107 -0.707107 0.707107 11.171698 -2.828436 cm
+0.954167 0.274323 0.355904 scn
+4.664213 9.149508 m
+4.664213 4.485294 l
+6.164213 4.485294 l
+6.164213 9.149508 l
+10.828426 9.149508 l
+10.828426 10.649508 l
+6.164213 10.649508 l
+6.164213 15.313721 l
+4.664213 15.313721 l
+4.664213 10.649508 l
+0.000000 10.649508 l
+0.000000 9.149508 l
+4.664213 9.149508 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  398
+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
+0000000488 00000 n
+0000000510 00000 n
+0000000683 00000 n
+0000000757 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+816
+%%EOF

+ 21 - 0
PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/Source/KMCompatative.xcassets/tips.imageset/Contents.json

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

+ 75 - 0
PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/Source/KMCompatative.xcassets/tips.imageset/tips.pdf

@@ -0,0 +1,75 @@
+%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 2.455566 3.778900 cm
+0.101961 0.835294 0.596078 scn
+11.135639 7.298037 m
+5.451429 0.298037 l
+5.317018 0.125870 5.114231 0.020851 4.896059 0.010424 c
+4.677886 -0.000004 4.466007 0.085196 4.315789 0.243760 c
+0.000000 4.743760 l
+1.088929 5.775376 l
+4.805365 1.908028 l
+9.953289 8.221100 l
+11.135639 7.298037 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  383
+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
+0000000473 00000 n
+0000000495 00000 n
+0000000668 00000 n
+0000000742 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+801
+%%EOF

+ 1 - 0
PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/View/ComparativeView/KMComparativeOutlineView.xib

@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
     <dependencies>
+        <deployment identifier="macosx"/>
         <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21701"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>

+ 1 - 0
PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/View/ComparativeView/View/KMComparativeOutlineCell.xib

@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
     <dependencies>
+        <deployment identifier="macosx"/>
         <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21701"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>

+ 1 - 0
PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/View/ComparativeView/View/KMComparativeOutlineSectionCell.xib

@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
     <dependencies>
+        <deployment identifier="macosx"/>
         <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21701"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>

+ 1 - 0
PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/View/KMComparativeTableView.xib

@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
     <dependencies>
+        <deployment identifier="macosx"/>
         <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21701"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>

+ 198 - 0
PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/View/KMComparativeView/KMComparativeView.swift

@@ -0,0 +1,198 @@
+//
+//  KMComparativeView.swift
+//  PDF Master
+//
+//  Created by lizhe on 2023/6/25.
+//
+
+import Cocoa
+
+typealias KMComparativeViewCloseAction = (_ view: KMComparativeView) -> Void
+
+class KMComparativeView: KMBaseXibView {
+    @IBOutlet weak var collectionContentView: NSView!
+    @IBOutlet weak var collectionView: NSCollectionView!
+    @IBOutlet weak var closeButton: NSButton!
+    @IBOutlet weak var closeBox: KMBox!
+    @IBOutlet var textView: NSTextView!
+    @IBOutlet weak var imageView: NSImageView!
+    @IBOutlet weak var restoreButton: NSButton!
+    @IBOutlet weak var titleLabel: NSTextField!
+    
+    
+    var closeAction: KMComparativeViewCloseAction?
+    
+    var dataArray: [NSDictionary] = [
+        [
+            "type": 0,
+            "title": "Register Member",
+            "subtitle": "Free",
+            "content": [
+                ["title": "Support efficient batch operation function",
+                 "state": true],
+                ["title": "Support for document compression",
+                 "state": true],
+                ["title": "Create PDF from Microsoft Word, PowerPoint",
+                 "state": true],
+                ["title": "No trial watermark when entering documents",
+                 "state": false],
+                ["title": "No page limit when converting PDF to other",
+                 "state": false],
+                ["title": "Using the AI function",
+                 "state": false]
+            ],
+            "buttonTitle": "Sign Up For Free"
+        ],
+        [
+            "type": 1,
+            "title": "Subscription Member",
+            "subtitle": "$39.99",
+            "describe": "$79.99 billed year, anytime unsubscribe",
+            "content": [
+                ["title": "Support efficient batch operation function",
+                 "state": true],
+                ["title": "Support for document compression",
+                 "state": true],
+                ["title": "Create PDF from Microsoft Word, PowerPoint",
+                 "state": true],
+                ["title": "No trial watermark when entering documents",
+                 "state": true],
+                ["title": "No page limit when converting PDF to other",
+                 "state": true],
+                ["title": "Using the AI function",
+                 "state": true]
+            ],
+            "buttonTitle": "Sign Up For Free"
+        ]
+    ]
+    
+    override func setup() {
+        super.setup()
+        
+        // 创建布局对象
+        let layout = NSCollectionViewFlowLayout()
+        layout.scrollDirection = .horizontal
+        // 设置布局到 NSCollectionView
+        self.collectionView.collectionViewLayout = layout
+        //设置代理
+        self.collectionView.delegate = self
+        self.collectionView.dataSource = self
+        //是否可选中
+        self.collectionView.isSelectable = true
+        //注册cell
+        self.collectionView.register(KMComparativeViewCollectionItem.self, forItemWithIdentifier: NSUserInterfaceItemIdentifier(rawValue: "KMComparativeViewCollectionItem"))
+        
+        self.closeBox.moveCallback = { [weak self] (mouseEntered, mouseBox) in
+            if mouseEntered {
+                self?.closeButton.image = NSImage(named: "control_btn_icon_close_hov")
+            } else {
+                self?.closeButton.image = NSImage(named: "control_btn_icon_close")
+            }
+        }
+        
+        self.textView.delegate = self
+        self.textView.isEditable = false
+        self.textView.frame = (self.textView.enclosingScrollView?.contentView.bounds)!
+        self.textView.autoresizingMask = [.width, .height]
+        
+        self.imageView.backgroundColor(NSColor(hex: "#FFFFFF"))
+        
+        self.contentView.addSubview(self.imageView, positioned: .below, relativeTo: self.collectionContentView)
+    }
+    
+    override func updateLanguage() {
+        let string = NSLocalizedString("Subscription Plan: \nSubscription:USD $39.99/year", comment: "") + "  " + NSLocalizedString("Subscription", comment: "")
+        let attributedString = NSMutableAttributedString.init(string: string)
+        let paragraphStyle = NSMutableParagraphStyle()
+        paragraphStyle.alignment = .left;
+        paragraphStyle.lineHeightMultiple = 1.37
+        attributedString.addAttributes([NSAttributedString.Key.font : NSFont.SFProTextRegular(12.0),
+                                        NSAttributedString.Key.foregroundColor : NSColor(hex: "#252629"),
+                                        NSAttributedString.Key.paragraphStyle : paragraphStyle],
+                                    range: NSRange(location: 0, length: string.count))
+        
+        let range = string.range(of: NSLocalizedString("Subscription", comment: ""))
+        attributedString.setAttributes([NSAttributedString.Key.font : NSFont.SFProTextRegular(12.0),
+                                        NSAttributedString.Key.foregroundColor : NSColor(hex: "#1770F4"),
+                                        NSAttributedString.Key.underlineColor : NSColor.clear,
+                                        NSAttributedString.Key.link : "register://"],
+                                       range: string.nsRange(from: range!)!)
+        
+        self.textView.textStorage?.setAttributedString(attributedString)
+    }
+}
+
+extension KMComparativeView: NSCollectionViewDataSource {
+    public func numberOfSections(in collectionView: NSCollectionView) -> Int {
+        return self.dataArray.count
+    }
+    
+    public func collectionView(_ collectionView: NSCollectionView, numberOfItemsInSection section: Int) -> Int {
+        return 1
+    }
+    
+    //返回对应的item自定义个体
+    public func collectionView(_ collectionView: NSCollectionView, itemForRepresentedObjectAt indexPath: IndexPath) -> NSCollectionViewItem {
+//        let data = self.dataArray[indexPath.item]
+        let view = collectionView.makeItem(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "KMComparativeViewCollectionItem"), for: indexPath) as! KMComparativeViewCollectionItem
+        view.data = self.dataArray[indexPath.item] as! [String : Any]
+        return view
+    }
+}
+
+extension KMComparativeView: NSCollectionViewDelegate {
+    //当item被选中
+    public func collectionView(_ collectionView: NSCollectionView, didSelectItemsAt indexPaths: Set<IndexPath>) {
+        print("点击")
+    }
+    
+   //当item取消选中
+    public func collectionView(_ collectionView: NSCollectionView, didDeselectItemsAt indexPaths: Set<IndexPath>) {
+        
+    }
+}
+
+extension KMComparativeView: NSCollectionViewDelegateFlowLayout {
+    
+    public func collectionView(_ collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> NSSize {
+        return NSSize(width: 348, height: 467)
+    }
+    
+    public func collectionView(_ collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
+        return 30
+    }
+    
+    public func collectionView(_ collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, insetForSectionAt section: Int) -> NSEdgeInsets {
+        return NSEdgeInsets(top: 0, left: 0, bottom: 0, right: 30)
+    }
+
+    public func collectionView(_ collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
+        return 30
+    }
+}
+
+//MARK: Action
+extension KMComparativeView {
+    @IBAction func closeButtonAction(_ sender: Any) {
+        guard let callBack = closeAction else { return }
+        
+        callBack(self)
+    }
+}
+
+extension KMComparativeView: NSTextViewDelegate {
+    func textView(_ textView: NSTextView, clickedOnLink link: Any, at charIndex: Int) -> Bool {
+        if link as! String == "register://" {
+//            guard let callBack = self.subscribeAction else { return true }
+            
+            print("链接点击")
+//            callBack(self)
+        }
+        return true
+    }
+    
+    @IBAction func restoreButtonAction(_ sender: Any) {
+        
+    }
+    
+}

+ 227 - 0
PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/View/KMComparativeView/KMComparativeView.xib

@@ -0,0 +1,227 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21701"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMComparativeView" customModule="PDF_Master" customModuleProvider="target">
+            <connections>
+                <outlet property="closeBox" destination="IE1-YG-Yg7" id="ahV-nI-WGz"/>
+                <outlet property="closeButton" destination="eN5-5g-Ftd" id="Qdz-7u-frx"/>
+                <outlet property="collectionContentView" destination="yhM-ic-Qb1" id="jLH-k3-At6"/>
+                <outlet property="collectionView" destination="tXY-fl-8XY" id="YW7-b3-uXQ"/>
+                <outlet property="imageView" destination="Rwo-sa-TEc" id="6uM-hc-EtN"/>
+                <outlet property="restoreButton" destination="BFl-PZ-fp3" id="hG2-in-77d"/>
+                <outlet property="textView" destination="63A-Ab-bi6" id="uOM-WN-xPL"/>
+                <outlet property="titleLabel" destination="MnS-Io-H7L" id="S60-8o-pk7"/>
+            </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="807" height="639"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <subviews>
+                <customView translatesAutoresizingMaskIntoConstraints="NO" id="fSi-Nh-UBK">
+                    <rect key="frame" x="0.0" y="611" width="807" height="28"/>
+                    <subviews>
+                        <box boxType="custom" borderWidth="0.0" cornerRadius="4" translatesAutoresizingMaskIntoConstraints="NO" id="IE1-YG-Yg7" customClass="KMBox" customModule="PDF_Master" customModuleProvider="target">
+                            <rect key="frame" x="8" y="8" width="12" height="12"/>
+                            <view key="contentView" id="SwN-cs-s3V">
+                                <rect key="frame" x="0.0" y="0.0" width="12" height="12"/>
+                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            </view>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="12" id="3gx-Gk-tmI"/>
+                                <constraint firstAttribute="width" constant="12" id="7dn-zU-W9I"/>
+                            </constraints>
+                        </box>
+                        <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="eN5-5g-Ftd">
+                            <rect key="frame" x="8" y="8" width="12" height="12"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="12" id="hHP-Pp-ky2"/>
+                                <constraint firstAttribute="height" constant="12" id="mIP-CG-QlM"/>
+                            </constraints>
+                            <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="control_btn_icon_close" imagePosition="only" alignment="center" imageScaling="proportionallyDown" inset="2" id="x0u-hh-567">
+                                <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                <font key="font" metaFont="system"/>
+                            </buttonCell>
+                            <connections>
+                                <action selector="closeButtonAction:" target="-2" id="ugN-d6-a63"/>
+                            </connections>
+                        </button>
+                    </subviews>
+                    <constraints>
+                        <constraint firstItem="IE1-YG-Yg7" firstAttribute="centerY" secondItem="fSi-Nh-UBK" secondAttribute="centerY" id="qFW-LK-I1w"/>
+                        <constraint firstAttribute="height" constant="28" id="tOS-4n-agG"/>
+                        <constraint firstItem="eN5-5g-Ftd" firstAttribute="leading" secondItem="fSi-Nh-UBK" secondAttribute="leading" constant="8" id="tta-DT-paA"/>
+                        <constraint firstItem="eN5-5g-Ftd" firstAttribute="centerY" secondItem="fSi-Nh-UBK" secondAttribute="centerY" id="x4z-sB-E87"/>
+                        <constraint firstItem="IE1-YG-Yg7" firstAttribute="leading" secondItem="fSi-Nh-UBK" secondAttribute="leading" constant="8" id="zX2-P6-1Dk"/>
+                    </constraints>
+                </customView>
+                <customView translatesAutoresizingMaskIntoConstraints="NO" id="yhM-ic-Qb1">
+                    <rect key="frame" x="0.0" y="0.0" width="807" height="611"/>
+                    <subviews>
+                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="cMm-TO-WQD">
+                            <rect key="frame" x="40" y="20" width="727" height="40"/>
+                            <subviews>
+                                <scrollView borderType="none" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" hasVerticalScroller="NO" translatesAutoresizingMaskIntoConstraints="NO" id="QOf-nA-UgU">
+                                    <rect key="frame" x="0.0" y="0.0" width="727" height="40"/>
+                                    <clipView key="contentView" drawsBackground="NO" id="wPA-OF-BeS">
+                                        <rect key="frame" x="0.0" y="0.0" width="727" height="40"/>
+                                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                        <subviews>
+                                            <textView wantsLayer="YES" editable="NO" drawsBackground="NO" importsGraphics="NO" richText="NO" verticallyResizable="YES" spellingCorrection="YES" smartInsertDelete="YES" id="63A-Ab-bi6">
+                                                <rect key="frame" x="0.0" y="0.0" width="727" height="40"/>
+                                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                                <color key="backgroundColor" red="1" green="0.99843658089999998" blue="0.99619259260000004" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
+                                                <size key="minSize" width="727" height="40"/>
+                                                <size key="maxSize" width="807" height="10000000"/>
+                                                <color key="insertionPointColor" name="textColor" catalog="System" colorSpace="catalog"/>
+                                            </textView>
+                                        </subviews>
+                                        <color key="backgroundColor" red="1" green="0.99843658089999998" blue="0.99619259260000004" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
+                                    </clipView>
+                                    <constraints>
+                                        <constraint firstAttribute="height" constant="40" id="7zU-tG-2nS"/>
+                                    </constraints>
+                                    <scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="YES" id="5Ae-I9-hHc">
+                                        <rect key="frame" x="-100" y="-100" width="225" height="15"/>
+                                        <autoresizingMask key="autoresizingMask"/>
+                                    </scroller>
+                                    <scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="NO" id="PcH-xT-FFj">
+                                        <rect key="frame" x="-100" y="-100" width="15" height="24"/>
+                                        <autoresizingMask key="autoresizingMask"/>
+                                    </scroller>
+                                </scrollView>
+                            </subviews>
+                            <constraints>
+                                <constraint firstItem="QOf-nA-UgU" firstAttribute="top" secondItem="cMm-TO-WQD" secondAttribute="top" id="InD-Pe-erG"/>
+                                <constraint firstAttribute="trailing" secondItem="QOf-nA-UgU" secondAttribute="trailing" id="VfU-B3-6nD"/>
+                                <constraint firstItem="QOf-nA-UgU" firstAttribute="leading" secondItem="cMm-TO-WQD" secondAttribute="leading" id="avP-MJ-35A"/>
+                                <constraint firstAttribute="bottom" secondItem="QOf-nA-UgU" secondAttribute="bottom" id="jWW-pd-WtN"/>
+                                <constraint firstAttribute="height" constant="40" id="t0M-RP-8Q7"/>
+                            </constraints>
+                        </customView>
+                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="nXE-h3-HLH">
+                            <rect key="frame" x="0.0" y="561" width="807" height="32"/>
+                            <subviews>
+                                <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="hbn-Vp-scG">
+                                    <rect key="frame" x="40" y="-2" width="36" height="36"/>
+                                    <constraints>
+                                        <constraint firstAttribute="height" constant="36" id="TU5-4O-3gD"/>
+                                        <constraint firstAttribute="width" constant="36" id="iQD-1K-ZP3"/>
+                                    </constraints>
+                                    <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="Upgrade your plan" id="Qxe-i0-Wsc"/>
+                                </imageView>
+                                <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="MnS-Io-H7L">
+                                    <rect key="frame" x="82" y="8" width="116" height="16"/>
+                                    <textFieldCell key="cell" lineBreakMode="clipping" title="Upgrade your plan" id="YKh-hc-g1N">
+                                        <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" translatesAutoresizingMaskIntoConstraints="NO" id="BFl-PZ-fp3">
+                                    <rect key="frame" x="716" y="8" width="51" height="16"/>
+                                    <buttonCell key="cell" type="square" title="Restore" bezelStyle="shadowlessSquare" alignment="center" imageScaling="proportionallyDown" inset="2" id="TEv-sn-Oqu">
+                                        <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                        <font key="font" metaFont="system"/>
+                                    </buttonCell>
+                                    <connections>
+                                        <action selector="restoreButtonAction:" target="-2" id="Bzc-zn-scx"/>
+                                    </connections>
+                                </button>
+                            </subviews>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="32" id="2L4-Ai-nKn"/>
+                                <constraint firstItem="MnS-Io-H7L" firstAttribute="centerY" secondItem="nXE-h3-HLH" secondAttribute="centerY" id="MND-pN-vv2"/>
+                                <constraint firstItem="MnS-Io-H7L" firstAttribute="leading" secondItem="hbn-Vp-scG" secondAttribute="trailing" constant="8" id="Mb7-Yn-VJ2"/>
+                                <constraint firstAttribute="trailing" secondItem="BFl-PZ-fp3" secondAttribute="trailing" constant="40" id="jYO-IV-l6b"/>
+                                <constraint firstItem="hbn-Vp-scG" firstAttribute="leading" secondItem="nXE-h3-HLH" secondAttribute="leading" constant="40" id="jZs-7I-kLE"/>
+                                <constraint firstItem="hbn-Vp-scG" firstAttribute="centerY" secondItem="nXE-h3-HLH" secondAttribute="centerY" id="kIR-8I-3T2"/>
+                                <constraint firstItem="BFl-PZ-fp3" firstAttribute="centerY" secondItem="nXE-h3-HLH" secondAttribute="centerY" id="van-IL-ofw"/>
+                            </constraints>
+                        </customView>
+                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="tuB-UO-PhU">
+                            <rect key="frame" x="0.0" y="76" width="807" height="465"/>
+                            <subviews>
+                                <scrollView wantsLayer="YES" borderType="none" autohidesScrollers="YES" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" hasVerticalScroller="NO" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ScA-aL-r0P">
+                                    <rect key="frame" x="40" y="0.0" width="727" height="465"/>
+                                    <clipView key="contentView" drawsBackground="NO" id="O9C-OM-ue0">
+                                        <rect key="frame" x="0.0" y="0.0" width="727" height="465"/>
+                                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                        <subviews>
+                                            <collectionView allowsEmptySelection="NO" id="tXY-fl-8XY">
+                                                <rect key="frame" x="0.0" y="0.0" width="727" height="158"/>
+                                                <autoresizingMask key="autoresizingMask" widthSizable="YES"/>
+                                                <collectionViewFlowLayout key="collectionViewLayout" minimumInteritemSpacing="10" minimumLineSpacing="10" scrollDirection="horizontal" id="cPd-fj-JkJ">
+                                                    <size key="itemSize" width="50" height="50"/>
+                                                </collectionViewFlowLayout>
+                                                <color key="primaryBackgroundColor" red="0.96862745100000003" green="0.97254901959999995" blue="0.98039215690000003" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
+                                            </collectionView>
+                                        </subviews>
+                                        <color key="backgroundColor" red="0.96862745100000003" green="0.97254901959999995" blue="0.98039215690000003" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
+                                    </clipView>
+                                    <scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="uTi-tM-xkJ">
+                                        <rect key="frame" x="-100" y="-100" width="712" height="15"/>
+                                        <autoresizingMask key="autoresizingMask"/>
+                                    </scroller>
+                                    <scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="8fj-hc-piQ">
+                                        <rect key="frame" x="-100" y="-100" width="15" height="450"/>
+                                        <autoresizingMask key="autoresizingMask"/>
+                                    </scroller>
+                                </scrollView>
+                            </subviews>
+                            <constraints>
+                                <constraint firstAttribute="trailing" secondItem="ScA-aL-r0P" secondAttribute="trailing" constant="40" id="bke-OZ-98o"/>
+                                <constraint firstAttribute="bottom" secondItem="ScA-aL-r0P" secondAttribute="bottom" id="hcN-ec-kQR"/>
+                                <constraint firstItem="ScA-aL-r0P" firstAttribute="leading" secondItem="tuB-UO-PhU" secondAttribute="leading" constant="40" id="igv-8h-OSz"/>
+                                <constraint firstItem="ScA-aL-r0P" firstAttribute="top" secondItem="tuB-UO-PhU" secondAttribute="top" id="vcq-J1-chq"/>
+                            </constraints>
+                        </customView>
+                    </subviews>
+                    <constraints>
+                        <constraint firstAttribute="trailing" secondItem="nXE-h3-HLH" secondAttribute="trailing" id="4he-uf-tjb"/>
+                        <constraint firstItem="cMm-TO-WQD" firstAttribute="top" secondItem="tuB-UO-PhU" secondAttribute="bottom" constant="16" id="D9M-uh-Bn0"/>
+                        <constraint firstItem="tuB-UO-PhU" firstAttribute="top" secondItem="nXE-h3-HLH" secondAttribute="bottom" constant="20" id="RR2-l8-5UO"/>
+                        <constraint firstItem="cMm-TO-WQD" firstAttribute="leading" secondItem="yhM-ic-Qb1" secondAttribute="leading" constant="40" id="VTx-Ir-6RI"/>
+                        <constraint firstItem="nXE-h3-HLH" firstAttribute="leading" secondItem="yhM-ic-Qb1" secondAttribute="leading" id="Xvu-rI-QaT"/>
+                        <constraint firstItem="tuB-UO-PhU" firstAttribute="leading" secondItem="yhM-ic-Qb1" secondAttribute="leading" id="eEl-FA-8R5"/>
+                        <constraint firstItem="nXE-h3-HLH" firstAttribute="top" secondItem="yhM-ic-Qb1" secondAttribute="top" constant="18" id="lGc-GC-1Su"/>
+                        <constraint firstAttribute="trailing" secondItem="tuB-UO-PhU" secondAttribute="trailing" id="n6Q-O3-lV8"/>
+                        <constraint firstAttribute="trailing" secondItem="cMm-TO-WQD" secondAttribute="trailing" constant="40" id="toi-NO-WCW"/>
+                        <constraint firstAttribute="bottom" secondItem="cMm-TO-WQD" secondAttribute="bottom" constant="20" id="yKQ-fN-Zha"/>
+                    </constraints>
+                </customView>
+                <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Rwo-sa-TEc">
+                    <rect key="frame" x="0.0" y="445" width="807" height="194"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="194" id="sy7-2v-Bmz"/>
+                    </constraints>
+                    <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="background_comparative_Badge" id="kcu-Za-GN1"/>
+                </imageView>
+            </subviews>
+            <constraints>
+                <constraint firstAttribute="trailing" secondItem="fSi-Nh-UBK" secondAttribute="trailing" id="7yD-IT-lHJ"/>
+                <constraint firstItem="Rwo-sa-TEc" firstAttribute="top" secondItem="c22-O7-iKe" secondAttribute="top" id="9mH-CT-wcA"/>
+                <constraint firstItem="yhM-ic-Qb1" firstAttribute="top" secondItem="fSi-Nh-UBK" secondAttribute="bottom" id="Lgk-tg-RDL"/>
+                <constraint firstItem="yhM-ic-Qb1" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" id="MnF-QR-iWe"/>
+                <constraint firstAttribute="trailing" secondItem="yhM-ic-Qb1" secondAttribute="trailing" id="cVG-Nf-aGs"/>
+                <constraint firstAttribute="trailing" secondItem="Rwo-sa-TEc" secondAttribute="trailing" id="dEa-MX-iiu"/>
+                <constraint firstItem="fSi-Nh-UBK" firstAttribute="top" secondItem="c22-O7-iKe" secondAttribute="top" id="hw6-ZC-zGR"/>
+                <constraint firstItem="Rwo-sa-TEc" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" id="pue-qC-itf"/>
+                <constraint firstItem="fSi-Nh-UBK" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" id="rcb-q6-GcL"/>
+                <constraint firstAttribute="bottom" secondItem="yhM-ic-Qb1" secondAttribute="bottom" id="vCq-1u-aGk"/>
+            </constraints>
+            <point key="canvasLocation" x="-4.5" y="241.5"/>
+        </customView>
+    </objects>
+    <resources>
+        <image name="Upgrade your plan" width="37" height="36"/>
+        <image name="background_comparative_Badge" width="807" height="194"/>
+        <image name="control_btn_icon_close" width="12" height="12"/>
+    </resources>
+</document>

+ 114 - 0
PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/View/KMComparativeView/View/KMComparativeViewCollectionItem.swift

@@ -0,0 +1,114 @@
+//
+//  KMComparativeViewCollectionItem.swift
+//  PDF Master
+//
+//  Created by lizhe on 2023/6/25.
+//
+
+import Cocoa
+
+class KMComparativeViewCollectionItem: NSCollectionViewItem {
+    @IBOutlet weak var titleLabel: NSTextField!
+    @IBOutlet weak var subtitleLabel: NSTextField!
+    @IBOutlet weak var lineView: NSView!
+    @IBOutlet weak var contentCollectionView: NSCollectionView!
+    @IBOutlet weak var doneButton: NSButton!
+    
+    var data: [String: Any] = [:] {
+        didSet {
+            self.contentCollectionView.reloadData()
+        }
+    }
+    
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        // Do view setup here.
+        
+        self.setup()
+    }
+    
+    func setup() {
+        self.view.border(NSColor(hex: "#E2E2E2"), 1, 10)
+        
+        self.titleLabel.font = NSFont.SFProTextSemibold(20)
+        self.titleLabel.textColor = NSColor(hex: "#252629")
+        
+        self.subtitleLabel.font = NSFont.SFProTextSemibold(32)
+        self.subtitleLabel.textColor = NSColor(hex: "#616469")
+        
+        self.lineView.backgroundColor(NSColor(hex: "#ECECEC"))
+        
+        //设置代理
+        self.contentCollectionView.delegate = self
+        self.contentCollectionView.dataSource = self
+        //是否可选中
+        self.contentCollectionView.isSelectable = true
+        //注册cell
+        self.contentCollectionView.register(KMComparativeViewCollectionItemItem.self, forItemWithIdentifier: NSUserInterfaceItemIdentifier(rawValue: "KMComparativeViewCollectionItemItem"))
+    }
+    
+    func updateLanguage() {
+        
+    }
+    
+    func reloadData() {
+
+    }
+}
+
+extension KMComparativeViewCollectionItem {
+    @IBAction func doneAction(_ sender: Any) {
+        
+        
+    }
+}
+
+extension KMComparativeViewCollectionItem: NSCollectionViewDataSource {
+    public func numberOfSections(in collectionView: NSCollectionView) -> Int {
+        return self.data.count
+    }
+    
+    public func collectionView(_ collectionView: NSCollectionView, numberOfItemsInSection section: Int) -> Int {
+        return 1
+    }
+    
+    //返回对应的item自定义个体
+    public func collectionView(_ collectionView: NSCollectionView, itemForRepresentedObjectAt indexPath: IndexPath) -> NSCollectionViewItem {
+//        let data = self.dataArray[indexPath.item]
+        let view = collectionView.makeItem(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "KMComparativeViewCollectionItemItem"), for: indexPath) as! KMComparativeViewCollectionItemItem
+        let array: [[String: Any]] = self.data["content"] as! [[String : Any]]
+        view.data = array[indexPath.item]
+        return view
+    }
+}
+
+extension KMComparativeViewCollectionItem: NSCollectionViewDelegate {
+    //当item被选中
+    public func collectionView(_ collectionView: NSCollectionView, didSelectItemsAt indexPaths: Set<IndexPath>) {
+        print("点击")
+    }
+    
+   //当item取消选中
+    public func collectionView(_ collectionView: NSCollectionView, didDeselectItemsAt indexPaths: Set<IndexPath>) {
+        
+    }
+}
+
+extension KMComparativeViewCollectionItem: NSCollectionViewDelegateFlowLayout {
+    
+    public func collectionView(_ collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> NSSize {
+        return NSSize(width: 279, height: 20)
+    }
+    
+    public func collectionView(_ collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
+        return 0
+    }
+    
+    public func collectionView(_ collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, insetForSectionAt section: Int) -> NSEdgeInsets {
+        return NSEdgeInsets(top: 0, left: 0, bottom: 12, right: 0)
+    }
+
+    public func collectionView(_ collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
+        return 0
+    }
+}

+ 128 - 0
PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/View/KMComparativeView/View/KMComparativeViewCollectionItem.xib

@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21701"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMComparativeViewCollectionItem" customModule="PDF_Master" customModuleProvider="target">
+            <connections>
+                <outlet property="contentCollectionView" destination="9Pp-ih-jEG" id="z5w-fy-VHk"/>
+                <outlet property="doneButton" destination="h7l-IT-ODA" id="jDf-XE-uTx"/>
+                <outlet property="lineView" destination="hz2-8h-p3M" id="nww-hG-0H5"/>
+                <outlet property="subtitleLabel" destination="y61-y9-dAw" id="2IR-Co-cbj"/>
+                <outlet property="titleLabel" destination="Aal-EW-4N2" id="8XP-Ds-d4a"/>
+                <outlet property="view" destination="Hz6-mo-xeY" id="0bl-1N-x8E"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <customView id="Hz6-mo-xeY">
+            <rect key="frame" x="0.0" y="0.0" width="303" height="449"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <subviews>
+                <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Aal-EW-4N2">
+                    <rect key="frame" x="30" y="401" width="243" height="16"/>
+                    <textFieldCell key="cell" lineBreakMode="clipping" title="Register Member" id="u25-eB-jIR">
+                        <font key="font" usesAppearanceFont="YES"/>
+                        <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                    </textFieldCell>
+                </textField>
+                <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="y61-y9-dAw">
+                    <rect key="frame" x="30" y="369" width="243" height="16"/>
+                    <textFieldCell key="cell" lineBreakMode="clipping" title="Free" id="Nmm-Ii-aJs">
+                        <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>
+                <customView translatesAutoresizingMaskIntoConstraints="NO" id="JU3-B0-lwD">
+                    <rect key="frame" x="32" y="126" width="239" height="180"/>
+                    <subviews>
+                        <scrollView wantsLayer="YES" borderType="none" autohidesScrollers="YES" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" hasVerticalScroller="NO" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="2qF-pT-dP8">
+                            <rect key="frame" x="0.0" y="0.0" width="239" height="180"/>
+                            <clipView key="contentView" drawsBackground="NO" id="3rY-ai-zIH">
+                                <rect key="frame" x="0.0" y="0.0" width="239" height="180"/>
+                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                <subviews>
+                                    <collectionView id="9Pp-ih-jEG">
+                                        <rect key="frame" x="0.0" y="0.0" width="239" height="158"/>
+                                        <autoresizingMask key="autoresizingMask" widthSizable="YES"/>
+                                        <collectionViewFlowLayout key="collectionViewLayout" minimumInteritemSpacing="10" minimumLineSpacing="10" id="qH9-lA-K1b">
+                                            <size key="itemSize" width="50" height="50"/>
+                                        </collectionViewFlowLayout>
+                                        <color key="primaryBackgroundColor" red="0.96862745100000003" green="0.97254901959999995" blue="0.98039215690000003" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
+                                    </collectionView>
+                                </subviews>
+                                <color key="backgroundColor" red="0.96862745100000003" green="0.97254901959999995" blue="0.98039215690000003" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
+                            </clipView>
+                            <scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="mw6-lw-zx6">
+                                <rect key="frame" x="-100" y="-100" width="233" height="15"/>
+                                <autoresizingMask key="autoresizingMask"/>
+                            </scroller>
+                            <scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="OYB-Vn-iBU">
+                                <rect key="frame" x="-100" y="-100" width="15" height="143"/>
+                                <autoresizingMask key="autoresizingMask"/>
+                            </scroller>
+                        </scrollView>
+                    </subviews>
+                    <constraints>
+                        <constraint firstItem="2qF-pT-dP8" firstAttribute="top" secondItem="JU3-B0-lwD" secondAttribute="top" id="19V-04-40u"/>
+                        <constraint firstAttribute="trailing" secondItem="2qF-pT-dP8" secondAttribute="trailing" id="g5f-fd-e2B"/>
+                        <constraint firstItem="2qF-pT-dP8" firstAttribute="leading" secondItem="JU3-B0-lwD" secondAttribute="leading" id="pHP-gP-r3J"/>
+                        <constraint firstAttribute="height" constant="180" id="sUt-m6-Pqi"/>
+                        <constraint firstAttribute="bottom" secondItem="2qF-pT-dP8" secondAttribute="bottom" id="zna-H1-Nwa"/>
+                    </constraints>
+                </customView>
+                <customView translatesAutoresizingMaskIntoConstraints="NO" id="hz2-8h-p3M">
+                    <rect key="frame" x="32" y="326" width="239" height="1"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="1" id="lCq-vv-wv7"/>
+                    </constraints>
+                </customView>
+                <customView translatesAutoresizingMaskIntoConstraints="NO" id="BFX-df-wDy">
+                    <rect key="frame" x="32" y="54" width="239" height="40"/>
+                    <subviews>
+                        <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="h7l-IT-ODA">
+                            <rect key="frame" x="0.0" y="0.0" width="239" height="40"/>
+                            <buttonCell key="cell" type="square" title="Sign Up For Free" bezelStyle="shadowlessSquare" alignment="center" imageScaling="proportionallyDown" inset="2" id="mLU-cL-cIs">
+                                <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                <font key="font" metaFont="system"/>
+                            </buttonCell>
+                            <connections>
+                                <action selector="doneAction:" target="-2" id="E9k-wP-Qpa"/>
+                            </connections>
+                        </button>
+                    </subviews>
+                    <constraints>
+                        <constraint firstAttribute="bottom" secondItem="h7l-IT-ODA" secondAttribute="bottom" id="Nrn-Oq-u7R"/>
+                        <constraint firstAttribute="height" constant="40" id="Zxt-97-SSn"/>
+                        <constraint firstAttribute="trailing" secondItem="h7l-IT-ODA" secondAttribute="trailing" id="iht-7X-HUh"/>
+                        <constraint firstItem="h7l-IT-ODA" firstAttribute="leading" secondItem="BFX-df-wDy" secondAttribute="leading" id="n8C-cx-xr9"/>
+                        <constraint firstItem="h7l-IT-ODA" firstAttribute="top" secondItem="BFX-df-wDy" secondAttribute="top" id="sy1-pD-i2U"/>
+                    </constraints>
+                </customView>
+            </subviews>
+            <constraints>
+                <constraint firstAttribute="trailing" secondItem="y61-y9-dAw" secondAttribute="trailing" constant="32" id="40H-lE-x0y"/>
+                <constraint firstAttribute="trailing" secondItem="hz2-8h-p3M" secondAttribute="trailing" constant="32" id="DOy-GW-3OQ"/>
+                <constraint firstItem="Aal-EW-4N2" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" constant="32" id="IJ3-VJ-Emz"/>
+                <constraint firstAttribute="trailing" secondItem="BFX-df-wDy" secondAttribute="trailing" constant="32" id="KAG-DU-qiH"/>
+                <constraint firstAttribute="trailing" secondItem="JU3-B0-lwD" secondAttribute="trailing" constant="32" id="Lcg-Da-ur1"/>
+                <constraint firstAttribute="trailing" secondItem="Aal-EW-4N2" secondAttribute="trailing" constant="32" id="M6k-Zs-OeN"/>
+                <constraint firstItem="Aal-EW-4N2" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" constant="32" id="UUF-tu-jje"/>
+                <constraint firstItem="y61-y9-dAw" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" constant="32" id="XgI-xM-8WU"/>
+                <constraint firstItem="BFX-df-wDy" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" constant="32" id="act-gs-xBl"/>
+                <constraint firstItem="hz2-8h-p3M" firstAttribute="top" secondItem="y61-y9-dAw" secondAttribute="bottom" constant="42" id="cQa-Sy-L12"/>
+                <constraint firstItem="y61-y9-dAw" firstAttribute="top" secondItem="Aal-EW-4N2" secondAttribute="bottom" constant="16" id="fYz-ls-H9I"/>
+                <constraint firstItem="BFX-df-wDy" firstAttribute="top" secondItem="JU3-B0-lwD" secondAttribute="bottom" constant="32" id="iVM-h9-3gW"/>
+                <constraint firstItem="JU3-B0-lwD" firstAttribute="top" secondItem="hz2-8h-p3M" secondAttribute="bottom" constant="20" id="mk3-nP-iYQ"/>
+                <constraint firstItem="hz2-8h-p3M" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" constant="32" id="uN3-zv-arS"/>
+                <constraint firstItem="JU3-B0-lwD" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" constant="32" id="wYj-HX-NA2"/>
+            </constraints>
+            <point key="canvasLocation" x="-50.5" y="16.5"/>
+        </customView>
+    </objects>
+</document>

+ 35 - 0
PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/View/KMComparativeView/View/KMComparativeViewCollectionItemItem.swift

@@ -0,0 +1,35 @@
+//
+//  KMComparativeViewCollectionItemItem.swift
+//  PDF Master
+//
+//  Created by lizhe on 2023/6/25.
+//
+
+import Cocoa
+
+class KMComparativeViewCollectionItemItem: NSCollectionViewItem {
+    @IBOutlet weak var iconImageView: NSImageView!
+    @IBOutlet weak var titleLabel: NSTextField!
+    
+    var data: [String: Any] = [:] {
+        didSet {
+            self.reloadData()
+        }
+    }
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        // Do view setup here.
+    }
+    
+    func reloadData() {
+        if data.count != 0 {
+            if data["state"].debugDescription == "0" {
+                self.iconImageView.image = NSImage(named: "tips 1")
+            } else {
+                self.iconImageView.image = NSImage(named: "tips")
+            }
+            
+            self.titleLabel.stringValue = NSLocalizedString(data["title"] as! String, comment: "")
+        }
+    }
+}

+ 48 - 0
PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/View/KMComparativeView/View/KMComparativeViewCollectionItemItem.xib

@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21701"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMComparativeViewCollectionItemItem" customModule="PDF_Master" customModuleProvider="target">
+            <connections>
+                <outlet property="iconImageView" destination="nge-K8-16k" id="qcM-fB-1cz"/>
+                <outlet property="titleLabel" destination="77S-IT-dI0" id="Yeb-ZB-Yyo"/>
+                <outlet property="view" destination="Hz6-mo-xeY" id="0bl-1N-x8E"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <customView id="Hz6-mo-xeY">
+            <rect key="frame" x="0.0" y="0.0" width="391" height="41"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <subviews>
+                <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="nge-K8-16k">
+                    <rect key="frame" x="0.0" y="13" width="16" height="16"/>
+                    <constraints>
+                        <constraint firstAttribute="width" constant="16" id="0QS-mA-sq8"/>
+                        <constraint firstAttribute="height" constant="16" id="Cgv-RJ-y6k"/>
+                    </constraints>
+                    <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="2Ns-FZ-peU"/>
+                </imageView>
+                <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="77S-IT-dI0">
+                    <rect key="frame" x="22" y="13" width="37" height="16"/>
+                    <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="6Xk-Wh-SL6">
+                        <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="nge-K8-16k" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" id="Ceq-9s-k9T"/>
+                <constraint firstItem="77S-IT-dI0" firstAttribute="centerY" secondItem="Hz6-mo-xeY" secondAttribute="centerY" id="gIs-hi-VkU"/>
+                <constraint firstItem="nge-K8-16k" firstAttribute="centerY" secondItem="Hz6-mo-xeY" secondAttribute="centerY" id="jEN-N8-daK"/>
+                <constraint firstItem="77S-IT-dI0" firstAttribute="leading" secondItem="nge-K8-16k" secondAttribute="trailing" constant="8" id="rev-ow-42d"/>
+            </constraints>
+            <point key="canvasLocation" x="61.5" y="235.5"/>
+        </customView>
+    </objects>
+</document>

+ 1 - 0
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Annotation/KMScreenViewController/ScreenCollectionView/KMAnnotationScreenCollectionView.xib

@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
     <dependencies>
+        <deployment identifier="macosx"/>
         <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21701"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>