Ver código fonte

【2025版】【转档】Excel、PPT、RTF窗口处理UI

tangchao 4 meses atrás
pai
commit
1d0f09964a
40 arquivos alterados com 753 adições e 139 exclusões
  1. 1 1
      PDF Office/PDF Master/Class/Common/Designs/KMDesignTextField.swift
  2. 4 4
      PDF Office/PDF Master/Class/KMLightMember/Controller/AccountInfo/View/KMAccountInfoView.swift
  3. 3 3
      PDF Office/PDF Master/Class/KMLightMember/Controller/Cancellation/View/KMCancellationSuccessView.swift
  4. 4 4
      PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/View/ComparativeView/KMComparativeOutlineView.swift
  5. 1 1
      PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/View/KMComparativeView/KMComparativeView.swift
  6. 1 1
      PDF Office/PDF Master/Class/KMLightMember/Controller/Login&Register/KMLoginWindowController.swift
  7. 4 4
      PDF Office/PDF Master/Class/KMLightMember/Controller/Login&Register/View/KMLoginInputPasswordView.swift
  8. 1 1
      PDF Office/PDF Master/Class/KMLightMember/Controller/Login&Register/View/KMLoginLeftImageView.swift
  9. 3 3
      PDF Office/PDF Master/Class/KMLightMember/Controller/Login&Register/View/KMRegisterSuccessView.swift
  10. 3 3
      PDF Office/PDF Master/Class/KMLightMember/Controller/Login&Register/View/KMRegisterView.swift
  11. 10 10
      PDF Office/PDF Master/Class/KMLightMember/Controller/Login&Register/View/KMResetPasswordView.swift
  12. 4 4
      PDF Office/PDF Master/Class/KMLightMember/Controller/VerificationCode/View/KMLightMemberAlertView.swift
  13. 3 3
      PDF Office/PDF Master/Class/KMLightMember/Controller/VerificationCode/View/KMVerificationCodeView.swift
  14. 5 5
      PDF Office/PDF Master/Class/KMLightMember/Tools/Alert/KMPurchaseAlertView.swift
  15. 1 1
      PDF Office/PDF Master/Class/PDFTools/Compare/View/KMCompareView.swift
  16. 1 1
      PDF Office/PDF Master/Class/PDFTools/Compare/ViewController/ContentComplete/View/KMCompareContentView.swift
  17. 4 0
      PDF Office/PDF Master/Class/PDFTools/Convert/NewController/Common/KMPDFConvert.swift
  18. 2 2
      PDF Office/PDF Master/Class/PDFTools/Print/View/ChooseView/KMPrintChooseView.swift
  19. 2 2
      PDF Office/PDF Master/Class/PDFTools/Print/View/ChooseView/View/KMPrintChoosePageSizeView.swift
  20. 2 2
      PDF Office/PDF Master/Class/PDFTools/Print/View/ChooseView/View/View/DealPaper/KMPrintChoosePageSizeMultipageView.swift
  21. 2 2
      PDF Office/PDF Master/Class/PDFTools/Print/View/ChooseView/View/View/DealPaper/KMPrintChoosePageSizePosterView.swift
  22. 2 2
      PDF Office/PDF Master/Class/PDFTools/Print/View/ChooseView/View/View/DealPaper/View/KMPrintDuplexPrintingSetView.swift
  23. 2 2
      PDF Office/PDF Master/Class/PDFTools/Print/View/ChooseView/View/View/PaperSet/View/KMPrintPaperSetView.swift
  24. 2 2
      PDF Office/PDF Master/Class/PDFTools/Print/View/Preview/KMPrintPreviewView.swift
  25. 2 2
      PDF Office/PDF Master/Class/PDFTools/Tools/KMImageTitleButton/KMImageTitleButton.swift
  26. 2 2
      PDF Office/PDF Master/Class/PDFTools/Tools/KMTextFieldStepperView/KMTextFieldStepperView.swift
  27. 11 11
      PDF Office/PDF Master/Class/PDFWindowController/ReadModelView/KMReadModelView.swift
  28. 3 3
      PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Outline/OutlineView/KMBOTAOutlineView.swift
  29. 1 1
      PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/Freehand/Controller/KMFreehandAnnotationController.swift
  30. 1 1
      PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/KMLinkAnnotationPropertyEmptyController.swift
  31. 114 0
      PDF Office/PDF Master/KMClass/Convert/View/KMConvertHtmlSettingView.swift
  32. 96 0
      PDF Office/PDF Master/KMClass/Convert/View/KMConvertHtmlSettingView.xib
  33. 80 37
      PDF Office/PDF Master/KMClass/Convert/View/KMConvertImageSettingView.swift
  34. 102 0
      PDF Office/PDF Master/KMClass/Convert/View/KMConvertJsonSettingView.swift
  35. 101 0
      PDF Office/PDF Master/KMClass/Convert/View/KMConvertJsonSettingView.xib
  36. 19 19
      PDF Office/PDF Master/KMClass/Convert/View/KMConvertOCRSettingItemView.swift
  37. 48 0
      PDF Office/PDF Master/KMClass/Convert/Window/KMConvertHtmlWindowController.swift
  38. 43 0
      PDF Office/PDF Master/KMClass/Convert/Window/KMConvertJsonWindowController.swift
  39. 15 0
      PDF Office/PDF Master/KMClass/KMPDFViewController/KMPDFViewController.swift
  40. 48 0
      PDF Office/PDF Reader Pro.xcodeproj/project.pbxproj

+ 1 - 1
PDF Office/PDF Master/Class/Common/Designs/KMDesignTextField.swift

@@ -139,7 +139,7 @@ class KMDesignTextField: KMDesignBaseView {
         return KMDesignTokenNone
     }
     
-    func updateUI(state: KMDesignTokenState) {
+    override func updateUI(state: KMDesignTokenState) {
         if self.useToken {
             super.updateUI(state: state)
         }

+ 4 - 4
PDF Office/PDF Master/Class/KMLightMember/Controller/AccountInfo/View/KMAccountInfoView.swift

@@ -65,7 +65,7 @@ class KMAccountInfoView: BaseXibView {
     }
     
     func setup() {
-        super.setup()
+//        super.setup()
         
         self.closeBox.moveCallback = { [weak self] (mouseEntered, mouseBox) in
             if mouseEntered {
@@ -77,7 +77,7 @@ class KMAccountInfoView: BaseXibView {
     }
     
     func updateUI() {
-        super.updateUI()
+//        super.updateUI()
         
         self.titleLabel.textColor = NSColor.km_init(hex: "#252629")
         self.titleLabel.font = NSFont.SFProTextSemiboldFont(20.0)
@@ -125,7 +125,7 @@ class KMAccountInfoView: BaseXibView {
     }
     
     func reloadData() {
-        super.reloadData()
+//        super.reloadData()
         
         if self.userInfo != nil {
             self.accountLabel.stringValue = userInfo!.email
@@ -205,7 +205,7 @@ class KMAccountInfoView: BaseXibView {
     }
     
     func updateLanguage() {
-        super.updateLanguage()
+//        super.updateLanguage()
         
         self.purchaseInfoButton.title = NSLocalizedString("Order Information", comment: "")
         

+ 3 - 3
PDF Office/PDF Master/Class/KMLightMember/Controller/Cancellation/View/KMCancellationSuccessView.swift

@@ -26,7 +26,7 @@ class KMCancellationSuccessView: BaseXibView {
     }
     
     func setup() {
-        super.setup()
+//        super.setup()
         
         self.closeBox.moveCallback = { [weak self] (mouseEntered, mouseBox) in
             if mouseEntered {
@@ -55,12 +55,12 @@ class KMCancellationSuccessView: BaseXibView {
     }
         
     func reloadData() {
-        super.reloadData()
+//        super.reloadData()
         
     }
     
     func updateLanguage() {
-        super.updateLanguage()
+//        super.updateLanguage()
         self.titleLabel.stringValue = NSLocalizedString("Cancellation Submitted", comment: "")
         self.subTitleLabel.stringValue = NSLocalizedString("Your account will be canceled within 3 working days and there is no need to submit the application for cancellation again", comment: "")
         self.doneButtonVC.stringValue = NSLocalizedString("OK", comment: "")

+ 4 - 4
PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/View/ComparativeView/KMComparativeOutlineView.swift

@@ -22,7 +22,7 @@ class KMComparativeOutlineView: BaseXibView {
     }
     
     func setup() {
-        super.setup()
+//        super.setup()
         
         self.scrollView.backgroundColor(NSColor.km_init(hex: "#F2F9FF"))
         
@@ -32,7 +32,7 @@ class KMComparativeOutlineView: BaseXibView {
     }
     
     func reloadData() {
-        super.reloadData()
+//        super.reloadData()
         KMComparativeManager.manager.fetchData { [weak self] result in
             KMPrint(result)
             if result != nil {
@@ -48,7 +48,7 @@ class KMComparativeOutlineView: BaseXibView {
     }
     
     func updateUI() {
-        super.updateUI()
+//        super.updateUI()
         
         self.optionTitleLabel.textColor = NSColor.km_init(hex: "#616469")
         self.optionTitleLabel.font = NSFont.SFProTextBoldFont(14.0)
@@ -58,7 +58,7 @@ class KMComparativeOutlineView: BaseXibView {
     }
     
     func updateLanguage() {
-        super.updateLanguage()
+//        super.updateLanguage()
         
         self.optionTitleLabel.stringValue = NSLocalizedString("Unregistered", comment: "")
         self.optionTitleLabel2.stringValue = NSLocalizedString("Registered", comment: "")

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

@@ -102,7 +102,7 @@ class KMComparativeView: BaseXibView {
     var isSubscription: Bool = false
     
     func setup() {
-        super.setup()
+//        super.setup()
         
         // 创建布局对象
         let layout = NSCollectionViewFlowLayout()

+ 1 - 1
PDF Office/PDF Master/Class/KMLightMember/Controller/Login&Register/KMLoginWindowController.swift

@@ -344,7 +344,7 @@ class KMLoginWindowController: NSWindowController {
             self.registerView.isHidden = false
             self.window?.makeFirstResponder(self.registerView.emailTextField)
         case .resetPassword:
-            self.resetPasswordView.resetData()
+//            self.resetPasswordView.resetData()
             self.resetPasswordView.email = self.model.email
             self.resetPasswordView.isHidden = false
             self.window?.makeFirstResponder(self.resetPasswordView.passwordSecureTextField)

+ 4 - 4
PDF Office/PDF Master/Class/KMLightMember/Controller/Login&Register/View/KMLoginInputPasswordView.swift

@@ -48,7 +48,7 @@ class KMLoginInputPasswordView: BaseXibView {
     }
     
     func setup() {
-        super.setup()
+//        super.setup()
         
         self.titleLabel.textColor = NSColor.km_init(hex: "#252629")
         self.titleLabel.font = NSFont.SFProTextSemiboldFont(20.0)
@@ -91,7 +91,7 @@ class KMLoginInputPasswordView: BaseXibView {
     }
     
     func reloadData() {
-        super.reloadData()
+//        super.reloadData()
         
         if self.model.secure {
             self.showButton.image = NSImage(named: "icon_btn_hide")
@@ -116,7 +116,7 @@ class KMLoginInputPasswordView: BaseXibView {
     }
     
     func updateUI() {
-        super.updateUI()
+//        super.updateUI()
        
         //password
         self.passwordContentView.border(NSColor.km_init(hex: "#DFE1E5"), 1, 4)
@@ -133,7 +133,7 @@ class KMLoginInputPasswordView: BaseXibView {
     }
     
     func updateLanguage() {
-        super.updateLanguage()
+//        super.updateLanguage()
         
         self.titleLabel.stringValue = NSLocalizedString("Log In", comment: "")
         

+ 1 - 1
PDF Office/PDF Master/Class/KMLightMember/Controller/Login&Register/View/KMLoginLeftImageView.swift

@@ -28,7 +28,7 @@ class KMLoginLeftImageView: BaseXibView {
     }
     
     func setup() {
-        super.setup()
+//        super.setup()
         
 //        self.subscriptionButton.setTitleColor(NSColor.km_init(hex: "#3F8FF6"))
 //        self.subscriptionButton.font = NSFont.SFProTextSemiboldFont(12.0)

+ 3 - 3
PDF Office/PDF Master/Class/KMLightMember/Controller/Login&Register/View/KMRegisterSuccessView.swift

@@ -34,7 +34,7 @@ class KMRegisterSuccessView: BaseXibView {
     }
     
     func setup() {
-        super.setup()
+//        super.setup()
         
         
 //        self.imageView.backgroundColor(NSColor.km_init(hex: "#D9D9D9"))
@@ -69,7 +69,7 @@ class KMRegisterSuccessView: BaseXibView {
     }
     
     func reloadData() {
-        super.reloadData()
+//        super.reloadData()
         if KMLightMemberManager.manager.purchaseState == .subscription {
             self.doneButton.isEnabled = false
             self.doneButton.title = NSLocalizedString("Already Subscribed", comment: "")
@@ -84,7 +84,7 @@ class KMRegisterSuccessView: BaseXibView {
     }
     
     func updateLanguage() {
-        super.updateLanguage()
+//        super.updateLanguage()
         self.label1.stringValue = NSLocalizedString("AI robot", comment: "")
         self.label2.stringValue = NSLocalizedString("Unlimited Conversion", comment: "")
         self.label3.stringValue = NSLocalizedString("Save without Watermark", comment: "")

+ 3 - 3
PDF Office/PDF Master/Class/KMLightMember/Controller/Login&Register/View/KMRegisterView.swift

@@ -45,7 +45,7 @@ class KMRegisterView: BaseXibView {
     
         
     func setup() {
-        super.setup()
+//        super.setup()
         //初始化数据
         self.signInTextView.delegate = self
         self.signInTextView.isEditable = false
@@ -88,7 +88,7 @@ class KMRegisterView: BaseXibView {
     }
     
     func updateLanguage() {
-        super.updateLanguage()
+//        super.updateLanguage()
         
         self.backgroundColor(NSColor.km_init(hex: "#FFFFFF"))
         
@@ -177,7 +177,7 @@ class KMRegisterView: BaseXibView {
     }
     
     func reloadData() {
-        super.reloadData()
+//        super.reloadData()
         KMLightMemberManager.manager.updatePopupShownToday(isPop: true)
         
         self.passwordTextField.stringValue = self.model.password

+ 10 - 10
PDF Office/PDF Master/Class/KMLightMember/Controller/Login&Register/View/KMResetPasswordView.swift

@@ -45,7 +45,7 @@ class KMResetPasswordView: BaseXibView {
     }
     
     func setup() {
-        super.setup()
+//        super.setup()
         self.model.logType = .resetPassword
         
         self.titleLabel.font = NSFont.SFProTextSemiboldFont(20.0)
@@ -85,7 +85,7 @@ class KMResetPasswordView: BaseXibView {
     }
     
     func updateUI() {
-        super.updateUI()
+//        super.updateUI()
         //password
         self.passwordContentView.border(NSColor.km_init(hex: "#DFE1E5"), 1, 4)
         self.passwordTextField.textColor = NSColor.km_init(hex: "#252629")
@@ -114,7 +114,7 @@ class KMResetPasswordView: BaseXibView {
     }
     
     func reloadData() {
-        super.reloadData()
+//        super.reloadData()
         
         self.passwordTextField.stringValue = self.model.password
         self.passwordSecureTextField.stringValue = self.model.password
@@ -164,15 +164,15 @@ class KMResetPasswordView: BaseXibView {
         self.rePasswordAlertLabel.stringValue = NSLocalizedString(KMRequestServerErrorCodeType.typeOfMessage(type: self.model.rePasswordAlertType), comment: "")
     }
     
-    override func resetData() {
-        super.resetData()
-        self.model.password = ""
-        self.model.rePassword = ""
-        self.reloadData()
-    }
+//    override func resetData() {
+//        super.resetData()
+//        self.model.password = ""
+//        self.model.rePassword = ""
+//        self.reloadData()
+//    }
     
     func updateLanguage() {
-        super.updateLanguage()
+//        super.updateLanguage()
         
         self.titleLabel.stringValue = NSLocalizedString("Reset Password", comment: "")
         

+ 4 - 4
PDF Office/PDF Master/Class/KMLightMember/Controller/VerificationCode/View/KMLightMemberAlertView.swift

@@ -27,13 +27,13 @@ class KMLightMemberAlertView: BaseXibView {
     }
     
     func setup() {
-        super.setup()
+//        super.setup()
         self.result = Result(code: 0)
 
     }
     
     func updateUI() {
-        super.updateUI()
+//        super.updateUI()
         self.contentView.backgroundColor(NSColor.km_init(hex: "#FDC7C6"))
         
         self.titleLabel.font = NSFont.SFProTextRegularFont(14.0)
@@ -41,7 +41,7 @@ class KMLightMemberAlertView: BaseXibView {
     }
     
     func reloadData() {
-        super.reloadData()
+//        super.reloadData()
         
         if result.code == 200 || result.code == 0 {
             self.contentView.isHidden = true
@@ -90,6 +90,6 @@ class KMLightMemberAlertView: BaseXibView {
         }, completionHandler: nil)
     }
     func updateLanguage() {
-        super.updateLanguage()
+//        super.updateLanguage()
     }
 }

+ 3 - 3
PDF Office/PDF Master/Class/KMLightMember/Controller/VerificationCode/View/KMVerificationCodeView.swift

@@ -108,7 +108,7 @@ class KMVerificationCodeView: BaseXibView {
     }
     
     func setup() {
-        super.setup()
+//        super.setup()
         
         self.backgroundColor(NSColor.km_init(hex: "#FFFFFF"))
         
@@ -209,7 +209,7 @@ class KMVerificationCodeView: BaseXibView {
     }
     
     func reloadData() {
-        super.reloadData()
+//        super.reloadData()
         
         if inputType == .accountInfo {
             self.closeButton.isHidden = false
@@ -237,7 +237,7 @@ class KMVerificationCodeView: BaseXibView {
     }
     
     func updateLanguage() {
-        super.updateLanguage()
+//        super.updateLanguage()
         
         if self.verifyCodeType == .unknown {
             self.titleLabel.stringValue = ""

+ 5 - 5
PDF Office/PDF Master/Class/KMLightMember/Tools/Alert/KMPurchaseAlertView.swift

@@ -16,7 +16,7 @@ class KMPurchaseAlertView: BaseXibView {
     
     var event: Any? = nil
     deinit {
-        self.removeNotification()
+//        self.removeNotification()
         KMPrint("KMPurchaseAlertView delloc")
     }
     
@@ -53,18 +53,18 @@ class KMPurchaseAlertView: BaseXibView {
         self.titleLabel.font = NSFont.SFProTextRegularFont(14)
     }
     
-    override func addNotification() {
+//    override func addNotification() {
 //        event = NSEvent.addLocalMonitorForEvents(matching: .any) { NSEvent in
 //            return nil
 //        }
-    }
+//    }
     
-    override func removeNotification() {
+//    override func removeNotification() {
 //        if self.event != nil {
 //            NSEvent.removeMonitor(self.event as Any)
 //            self.event = nil
 //        }
-    }
+//    }
 }
 
 //MARK: 时间拦截

+ 1 - 1
PDF Office/PDF Master/Class/PDFTools/Compare/View/KMCompareView.swift

@@ -132,7 +132,7 @@ class KMCompareView: BaseXibView {
         config.fileOldAttribute.password = password
     }
     
-    override func addNotification() {
+    func addNotification() {
         NotificationCenter.default.addObserver(self, selector: #selector(pageChangeNotification), name: NSNotification.Name.PDFViewPageChanged, object: nil)
     }
     

+ 1 - 1
PDF Office/PDF Master/Class/PDFTools/Compare/ViewController/ContentComplete/View/KMCompareContentView.swift

@@ -163,7 +163,7 @@ class KMCompareContentView: BaseXibView, CPDFViewDelegate, KMCompareToolbarDeleg
         self.compareManager.isSyncScroll = true
     }
     
-    override func addNotification() {
+    func addNotification() {
         NotificationCenter.default.addObserver(self,
                                                selector: #selector(oldPDFViewboundsDidChangeNotification),
                                                name: NSView.boundsDidChangeNotification,

+ 4 - 0
PDF Office/PDF Master/Class/PDFTools/Convert/NewController/Common/KMPDFConvert.swift

@@ -563,6 +563,9 @@ class KMPDFConvertRTF: KMPDFConvert {
 // MARK: - PDF 转 HTML
 
 class KMPDFConvertHTML: KMPDFConvert {
+    
+    var paneOptions: CPDFConvertHtmlPageAndNavigationPaneOptions = .singlePage
+    
     override init() {
         super.init()
         
@@ -578,6 +581,7 @@ class KMPDFConvertHTML: KMPDFConvert {
         let options = CPDFConvertHtmlOptions()
         options.isContainAnnotations = self.isContainAnnotations
         options.isAllowOCR = self.isAllowOCR
+        options.paneOptions = self.paneOptions
         if (self.isAllowOCR) {
             options.isContainOCRBgImage = self.isContainOCRBgImage
             if let language = self.ocrLanguage {

+ 2 - 2
PDF Office/PDF Master/Class/PDFTools/Print/View/ChooseView/KMPrintChooseView.swift

@@ -56,7 +56,7 @@ class KMPrintChooseView: BaseXibView {
     }
     
     func setup() {
-        super.setup()
+//        super.setup()
         
         //打印机名称
         self.printerButton.data = NSPrinter.printerNames
@@ -164,7 +164,7 @@ class KMPrintChooseView: BaseXibView {
     
     //刷新界面UI 和 数据
     func reloadData() {
-        super.reloadData()
+//        super.reloadData()
         
         self.printerButton.stringValue = self.outputData.printer.name
         self.pageSetButton.title = self.outputData.paper.info.type.rawValue

+ 2 - 2
PDF Office/PDF Master/Class/PDFTools/Print/View/ChooseView/View/KMPrintChoosePageSizeView.swift

@@ -45,7 +45,7 @@ class KMPrintChoosePageSizeView: BaseXibView {
     }
     
     func setup() {
-        super.setup()
+//        super.setup()
         
         self.sizeView.dataDidChange = { [weak self] view, data in
             self?.outputData.size = data
@@ -96,7 +96,7 @@ class KMPrintChoosePageSizeView: BaseXibView {
     
     //刷新界面UI 和 数据
     func reloadData() {
-        super.reloadData()
+//        super.reloadData()
          
         //选中按钮状态
         let buttonArray = [self.sizeButton, self.posterButton, self.pamphletButton, self.multipageButton]

+ 2 - 2
PDF Office/PDF Master/Class/PDFTools/Print/View/ChooseView/View/View/DealPaper/KMPrintChoosePageSizeMultipageView.swift

@@ -35,7 +35,7 @@ class KMPrintChoosePageSizeMultipageView: BaseXibView {
     }
     
     func setup() {
-        super.setup()
+//        super.setup()
         
         self.pageOfPaperButton.removeAllItems()
         self.pageOfPaperButton.addItems(withTitles: KMPrintPageOperation.PageOfPaper.PageType.allValues())
@@ -54,7 +54,7 @@ class KMPrintChoosePageSizeMultipageView: BaseXibView {
     
     //刷新界面UI 和 数据
     func reloadData() {
-        super.reloadData()
+//        super.reloadData()
         
 //        self.pageOfPaperButton.selectItem(withTitle: self.outputData.pageOfPaper.type.rawValue)
 //        self.pageOfPaperXTextField.isEnabled = (self.outputData.pageOfPaper.type == .custom) ? true : false

+ 2 - 2
PDF Office/PDF Master/Class/PDFTools/Print/View/ChooseView/View/View/DealPaper/KMPrintChoosePageSizePosterView.swift

@@ -48,7 +48,7 @@ class KMPrintChoosePageSizePosterView: BaseXibView {
     }
 
     func setup() {
-        super.setup()
+//        super.setup()
         
         self.breakUpPageButton.removeAllItems()
         self.breakUpPageButton.addItems(withTitles: KMPrintPageOperation.PageOfPaper.PageType.allValues())
@@ -85,7 +85,7 @@ class KMPrintChoosePageSizePosterView: BaseXibView {
     
     //刷新界面UI 和 数据
     func reloadData() {
-        super.reloadData()
+//        super.reloadData()
         
         self.tileButton.state = (self.outputData.type == .tile) ? .on : .off
         self.tileView.isHidden = (self.outputData.type == .tile) ? false: true

+ 2 - 2
PDF Office/PDF Master/Class/PDFTools/Print/View/ChooseView/View/View/DealPaper/View/KMPrintDuplexPrintingSetView.swift

@@ -30,7 +30,7 @@ class KMPrintDuplexPrintingSetView: BaseXibView {
     }
     
     func setup() {
-        super.setup()
+//        super.setup()
         self.duplexPrintingButton.title = NSLocalizedString("Duplex printing", comment: "")
         self.duplexPrintingButton.imageName = "btn_checkbox_unsel_on"
         self.duplexPrintingButton.selectImageName = "btn_checkbox_sel_on"
@@ -66,7 +66,7 @@ class KMPrintDuplexPrintingSetView: BaseXibView {
     
     //刷新界面UI 和 数据
     func reloadData() {
-        super.reloadData()
+//        super.reloadData()
         if self.data.options.contains(.printOnBothSides) {
             self.duplexPrintingButton.state = .on
             self.shortEdgeButton.isEnabled = true

+ 2 - 2
PDF Office/PDF Master/Class/PDFTools/Print/View/ChooseView/View/View/PaperSet/View/KMPrintPaperSetView.swift

@@ -48,7 +48,7 @@ class KMPrintPaperSetView: BaseXibView {
     }
 
     func setup() {
-        super.setup()
+//        super.setup()
         
         self.sizeButton.removeAllItems()
         self.sizeButton.addItems(withTitles: KMPrintPaperInfo.KMPaperType.allValues())
@@ -62,7 +62,7 @@ class KMPrintPaperSetView: BaseXibView {
     
     //刷新界面UI 和 数据
     func reloadData() {
-        super.reloadData()
+//        super.reloadData()
         
         self.sizeButton.selectItem(withTitle: self.data.type.rawValue)
         self.topTextFieldStepper.stringValue = self.data.inset.top.description

+ 2 - 2
PDF Office/PDF Master/Class/PDFTools/Print/View/Preview/KMPrintPreviewView.swift

@@ -104,7 +104,7 @@ class KMPrintPreviewView: BaseXibView {
     }
     
     func setup() {
-        super.setup()
+//        super.setup()
         
 //        self.previewContentView.wantsLayer = true
 //        self.previewContentView.layer?.backgroundColor = NSColor.km_init(hex: "#F7F8FA").cgColor
@@ -142,7 +142,7 @@ class KMPrintPreviewView: BaseXibView {
     
     //刷新PDFPreview
     func reloadData() {
-        super.reloadData()
+//        super.reloadData()
 
         //UI 显示
         if self.pdfDocument != nil {

+ 2 - 2
PDF Office/PDF Master/Class/PDFTools/Tools/KMImageTitleButton/KMImageTitleButton.swift

@@ -73,12 +73,12 @@ typealias KMImageTitleButtonAction = (_ view: KMImageTitleButton, _ button: NSBu
     }
     
     func setup() {
-        super.setup()
+//        super.setup()
 //        self.titleLabel.font = NSFont(name: "SFProText-Regular", size: 14)
     }
     
     func reloadData() {
-        super.reloadData()
+//        super.reloadData()
         
         self.titleLabel.stringValue = NSLocalizedString(self.title, comment: "")
         

+ 2 - 2
PDF Office/PDF Master/Class/PDFTools/Tools/KMTextFieldStepperView/KMTextFieldStepperView.swift

@@ -81,7 +81,7 @@ class KMTextFieldStepperView: BaseXibView, NSTextFieldDelegate {
     }
     
     func setup() {
-        super.setup()
+//        super.setup()
         
         self.presenter.initPresenter(delegate: self, model: self.model)
         
@@ -98,7 +98,7 @@ class KMTextFieldStepperView: BaseXibView, NSTextFieldDelegate {
     
     //刷新界面UI 和 数据
     func reloadData() {
-        super.reloadData()
+//        super.reloadData()
         
         self.inputTextField.stringValue = self.model.stringValue
     }

+ 11 - 11
PDF Office/PDF Master/Class/PDFWindowController/ReadModelView/KMReadModelView.swift

@@ -235,17 +235,17 @@ class KMReadModelView: BaseXibView {
         zoomButton.view.frame = self.zoomView.bounds
     }
     
-    override func resetData() {
-        
-    }
-    
-    override func addNotification() {
-        
-    }
-    
-    override func removeNotification() {
-        
-    }
+//    override func resetData() {
+//        
+//    }
+//    
+//    override func addNotification() {
+//        
+//    }
+//    
+//    override func removeNotification() {
+//        
+//    }
 }
 
 //MARK: data

+ 3 - 3
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Outline/OutlineView/KMBOTAOutlineView.swift

@@ -40,7 +40,7 @@ class KMBOTAOutlineView: BaseXibView {
     }
     
     func setup() {
-        super.setup()
+//        super.setup()
         
         self.scrollView.backgroundColor(NSColor.km_init(hex: "#F2F9FF"))
         
@@ -97,12 +97,12 @@ class KMBOTAOutlineView: BaseXibView {
     }
     
     func updateUI() {
-        super.updateUI()
+//        super.updateUI()
         
     }
     
     func updateLanguage() {
-        super.updateLanguage()
+//        super.updateLanguage()
         
     }
     

+ 1 - 1
PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/Freehand/Controller/KMFreehandAnnotationController.swift

@@ -65,7 +65,7 @@ import Cocoa
         self.lineAndBorderItemView?.dashImageButton.image = self.borderStyleDashed(false)
     }
     
-    func reloadData() {
+    override func reloadData() {
         super.reloadData()
         
         let style = self.annotationModel?.style() ?? .solid

+ 1 - 1
PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/KMLinkAnnotationPropertyEmptyController.swift

@@ -23,7 +23,7 @@ class KMLinkAnnotationPropertyEmptyController: KMRightSideEmptyVC {
         // Do view setup here.
     }
     
-    func updateUI() {
+    override func updateUI() {
         super.updateUI()
         
         self.view.addSubview(self.titleLabel)

+ 114 - 0
PDF Office/PDF Master/KMClass/Convert/View/KMConvertHtmlSettingView.swift

@@ -0,0 +1,114 @@
+//
+//  KMConvertHtmlSettingView.swift
+//  PDF Reader Pro
+//
+//  Created by User-Tangchao on 2024/10/29.
+//
+
+import Cocoa
+import KMComponentLibrary
+
+class KMConvertHtmlSettingView: KMConvertSettingView {
+
+    @IBOutlet weak var box: NSBox!
+    @IBOutlet weak var titleLabel: NSTextField!
+    @IBOutlet weak var pageBox: NSBox!
+    @IBOutlet weak var ocrBox: NSBox!
+    @IBOutlet weak var pageRangeBox: NSBox!
+    
+    var pageIndex = 0
+    
+    private lazy var pageSelect_: ComponentSelect = {
+        let view = ComponentSelect()
+        
+        view.properties = ComponentSelectProperties(size: .s,
+                                                                state: .normal,
+                                                                isDisabled: false,
+                                                                isError: false,
+                                                                leftIcon: false,
+                                                                placeholder: nil,
+                                                                errorText: nil,
+                                                                creatable: false,
+                                                                text: "")
+        view.delegate = self
+        return view
+    }()
+    
+    static func html_createFromNib(in bundle: Bundle = Bundle.main) -> Self? {
+        let nibName = "KMConvertHtmlSettingView"
+        var topLevelArray: NSArray? = nil
+        bundle.loadNibNamed(NSNib.Name(nibName), owner: nil, topLevelObjects: &topLevelArray)
+        guard let results = topLevelArray else { return nil }
+        let views = Array<Any>(results).filter { $0 is Self }
+        return views.last as? Self
+    }
+    
+    override func draw(_ dirtyRect: NSRect) {
+        super.draw(dirtyRect)
+
+        // Drawing code here.
+    }
+    
+    override func initSubViews() {
+        super.initSubViews()
+        
+        self.pageBox.contentView = self.pageSelect_
+        var menuItemArr: [ComponentMenuitemProperty] = []
+        let strings: [String] = [NSLocalizedString("Single Page", comment: ""), NSLocalizedString("Single Page with Outlines", comment: ""),
+                                 NSLocalizedString("Multiple Pages", comment: ""), NSLocalizedString("Multiple Pages with Outlines", comment: "")]
+        for string in strings {
+            let itemProperty: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false,
+                                                                                    itemSelected: false,
+                                                                                    isDisabled: false,
+                                                                                    keyEquivalent: nil,
+                                                                                    text: string)
+            menuItemArr.append(itemProperty)
+        }
+
+        
+        pageSelect_.updateMenuItemsArr(menuItemArr)
+        
+        pageSelect_.selectItemAtIndex(0)
+        pageSelect_.properties.creatable = false
+        pageSelect_.properties.text = ""
+        pageSelect_.reloadData()
+    }
+    
+    override func initDefaultVlaue() {
+        super.initDefaultVlaue()
+        
+        self.titleLabel.stringValue = NSLocalizedString("Page Options", comment: "")
+        self.titleLabel.textColor = NSColor.km_init(hex: "#616469")
+        self.titleLabel.font = .SFProTextRegularFont(12)
+        
+        self.box.borderWidth = 0
+        self.pageBox.borderWidth = 0
+        self.ocrBox.borderWidth = 0
+        self.pageRangeBox.borderWidth = 0
+    }
+    
+    override func viewDidMoveToWindow() {
+        super.viewDidMoveToWindow()
+        
+        if (self.ocrItemView == nil) {
+            self.ocrItemView = KMConvertOCRSettingItemView.createFromNib()
+            self.ocrBox.contentView = self.ocrItemView
+        }
+        self.ocrItemView?.languageIndex = self.ocrLanuguageIndex
+
+        if (self.pageRangeItemView == nil) {
+            self.pageRangeItemView = KMConvertPageRangeSettingItemView.createFromNib()
+            self.pageRangeBox.contentView = self.pageRangeItemView
+        }
+    }
+}
+
+extension KMConvertHtmlSettingView: ComponentSelectDelegate {
+    func componentSelectDidSelect(view: ComponentSelect?, menuItemProperty: ComponentMenuitemProperty?) {
+        guard let index = view?.indexOfSelect(), index >= 0 else {
+            return
+        }
+        
+        self.pageIndex = max(0, index)
+    }
+}

+ 96 - 0
PDF Office/PDF Master/KMClass/Convert/View/KMConvertHtmlSettingView.xib

@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21507" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21507"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner"/>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <customView id="c22-O7-iKe" customClass="KMConvertHtmlSettingView" customModule="PDF_Reader_Pro" customModuleProvider="target">
+            <rect key="frame" x="0.0" y="0.0" width="480" height="272"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <subviews>
+                <box boxType="custom" cornerRadius="4" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="1Ix-bw-PPp">
+                    <rect key="frame" x="0.0" y="202" width="480" height="70"/>
+                    <view key="contentView" id="Xyg-Vk-E2u">
+                        <rect key="frame" x="1" y="1" width="478" height="68"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <subviews>
+                            <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Hi8-hH-pES">
+                                <rect key="frame" x="14" y="44" width="37" height="16"/>
+                                <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="h55-ws-1v0">
+                                    <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>
+                            <box boxType="custom" cornerRadius="4" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="UQd-JT-aKZ">
+                                <rect key="frame" x="16" y="4" width="446" height="32"/>
+                                <view key="contentView" id="0z2-ul-9x4">
+                                    <rect key="frame" x="1" y="1" width="444" height="30"/>
+                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                </view>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="32" id="LG2-YG-jQH"/>
+                                </constraints>
+                            </box>
+                        </subviews>
+                        <constraints>
+                            <constraint firstAttribute="trailing" secondItem="UQd-JT-aKZ" secondAttribute="trailing" constant="16" id="60q-qP-aZK"/>
+                            <constraint firstItem="UQd-JT-aKZ" firstAttribute="leading" secondItem="Xyg-Vk-E2u" secondAttribute="leading" constant="16" id="Ipy-v2-52k"/>
+                            <constraint firstItem="UQd-JT-aKZ" firstAttribute="top" secondItem="Hi8-hH-pES" secondAttribute="bottom" constant="8" id="MT0-ah-zHZ"/>
+                            <constraint firstItem="Hi8-hH-pES" firstAttribute="leading" secondItem="Xyg-Vk-E2u" secondAttribute="leading" constant="16" id="ROe-HV-3q7"/>
+                            <constraint firstItem="Hi8-hH-pES" firstAttribute="top" secondItem="Xyg-Vk-E2u" secondAttribute="top" constant="8" id="iY3-kr-0Uo"/>
+                        </constraints>
+                    </view>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="70" id="3Ho-Zt-iUZ"/>
+                    </constraints>
+                </box>
+                <box boxType="custom" cornerRadius="4" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="3bW-sv-LWh">
+                    <rect key="frame" x="0.0" y="112" width="480" height="90"/>
+                    <view key="contentView" id="Bfk-8k-T9J">
+                        <rect key="frame" x="1" y="1" width="478" height="88"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                    </view>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="90" id="yxw-gG-iHj"/>
+                    </constraints>
+                </box>
+                <box boxType="custom" cornerRadius="4" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="wxi-AZ-JyX">
+                    <rect key="frame" x="0.0" y="13" width="480" height="90"/>
+                    <view key="contentView" id="ZRe-jk-rWb">
+                        <rect key="frame" x="1" y="1" width="478" height="88"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                    </view>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="90" id="Hq8-h1-UG3"/>
+                        <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="60" id="LSG-VL-1go"/>
+                    </constraints>
+                </box>
+            </subviews>
+            <constraints>
+                <constraint firstItem="3bW-sv-LWh" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" id="DFx-Sy-1NT"/>
+                <constraint firstItem="1Ix-bw-PPp" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" id="HXB-LW-A4J"/>
+                <constraint firstItem="wxi-AZ-JyX" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" id="J2t-9p-enh"/>
+                <constraint firstItem="wxi-AZ-JyX" firstAttribute="top" secondItem="3bW-sv-LWh" secondAttribute="bottom" constant="9" id="R2n-gs-x4h"/>
+                <constraint firstItem="3bW-sv-LWh" firstAttribute="top" secondItem="1Ix-bw-PPp" secondAttribute="bottom" id="RYY-Mf-k4A"/>
+                <constraint firstAttribute="trailing" secondItem="3bW-sv-LWh" secondAttribute="trailing" id="TdY-F6-dfy"/>
+                <constraint firstAttribute="trailing" secondItem="wxi-AZ-JyX" secondAttribute="trailing" id="hHV-Lw-JK2"/>
+                <constraint firstAttribute="trailing" secondItem="1Ix-bw-PPp" secondAttribute="trailing" id="jp5-eI-DFt"/>
+                <constraint firstItem="1Ix-bw-PPp" firstAttribute="top" secondItem="c22-O7-iKe" secondAttribute="top" id="sR0-DO-aVC"/>
+            </constraints>
+            <connections>
+                <outlet property="box" destination="1Ix-bw-PPp" id="QT2-gQ-TEG"/>
+                <outlet property="ocrBox" destination="3bW-sv-LWh" id="SnA-D3-m5C"/>
+                <outlet property="pageBox" destination="UQd-JT-aKZ" id="yTh-i8-oVN"/>
+                <outlet property="pageRangeBox" destination="wxi-AZ-JyX" id="ebX-Ze-dxz"/>
+                <outlet property="titleLabel" destination="Hi8-hH-pES" id="Prc-DB-HMG"/>
+            </connections>
+            <point key="canvasLocation" x="-66" y="145"/>
+        </customView>
+    </objects>
+</document>

+ 80 - 37
PDF Office/PDF Master/KMClass/Convert/View/KMConvertImageSettingView.swift

@@ -5,6 +5,8 @@
 //  Created by tangchao on 2022/12/6.
 //
 
+import KMComponentLibrary
+
 class KMConvertImageSettingView: KMConvertSettingView {
     @IBOutlet weak var fileTypeTitleLabel: NSTextField!
     @IBOutlet weak var formatBox: NSBox!
@@ -13,34 +15,78 @@ class KMConvertImageSettingView: KMConvertSettingView {
     @IBOutlet weak var dpiTitleLabel: NSTextField!
     @IBOutlet weak var dpiSelectBox: NSBox!
     
-    private var formartView: KMDesignSelect?
-    private var dpiVC: KMDesignSelect?
-    
     var selectedFormatIndex = 0
     var selectedResolutionIndex = 3
     
+    private lazy var formatSelect_: ComponentSelect = {
+        let view = ComponentSelect()
+        view.properties = ComponentSelectProperties(size: .s,
+                                                                state: .normal,
+                                                                isDisabled: false,
+                                                                isError: false,
+                                                                leftIcon: false,
+                                                                placeholder: nil,
+                                                                errorText: nil,
+                                                                creatable: false,
+                                                                text: NSLocalizedString("", comment: ""))
+        view.delegate = self
+        return view
+    }()
+    
+    private lazy var dpiSelect_: ComponentSelect = {
+        let view = ComponentSelect()
+        view.properties = ComponentSelectProperties(size: .s,
+                                                                state: .normal,
+                                                                isDisabled: false,
+                                                                isError: false,
+                                                                leftIcon: false,
+                                                                placeholder: nil,
+                                                                errorText: nil,
+                                                                creatable: false,
+                                                                text: NSLocalizedString("", comment: ""))
+        view.delegate = self
+        return view
+    }()
+    
     override func initSubViews() {
         super.initSubViews()
         
-        self.formartView = KMDesignSelect.init(withType: .Combox)
-        self.formatBox.contentView = self.formartView!.view
+        self.formatBox.contentView = self.formatSelect_
+        var menuItemArr: [ComponentMenuitemProperty] = []
+        for string in ["JPEG","JPG","PNG","GIF","TIFF","TGA","BMP","JPEG-2000"] {
+            let itemProperty: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false,
+                                                                                    itemSelected: false,
+                                                                                    isDisabled: false,
+                                                                                    keyEquivalent: nil,
+                                                                                    text: string)
+            menuItemArr.append(itemProperty)
+        }
+
+        formatSelect_.updateMenuItemsArr(menuItemArr)
         
-        self.formartView = KMDesignSelect.init(withType: .Combox)
-        self.formatBox.contentView = self.formartView!.view
-        self.formartView?.removeAllItems()
-        self.formartView?.addItems(withObjectValues: ["JPEG","JPG","PNG","GIF","TIFF","TGA","BMP","JPEG-2000"])
-        self.formartView?.selectItem(at: 0)
-        self.formartView?.editable = false //默认属性,初始化可不设置
-        self.formartView?.delete = self
-        self.formartView?.updateUI()
+        formatSelect_.selectItemAtIndex(0)
+        formatSelect_.properties.creatable = false
+        formatSelect_.properties.text = ""
+        formatSelect_.reloadData()
         
-        self.dpiVC = KMDesignSelect(withType: .Combox)
-        self.dpiSelectBox.contentView = self.dpiVC?.view
-        self.dpiVC?.removeAllItems()
-        self.dpiVC?.addItems(withObjectValues:  ["50 dpi", "72 dpi", "96 dpi", "150 dpi", "300 dpi", "600 dpi"])
-        self.dpiVC?.selectItem(at: self.selectedResolutionIndex)
-        self.dpiVC?.delete = self
-        self.dpiVC?.updateUI()
+        self.dpiSelectBox.contentView = self.dpiSelect_
+        var menuItemArr2: [ComponentMenuitemProperty] = []
+        for string in ["50 dpi", "72 dpi", "96 dpi", "150 dpi", "300 dpi", "600 dpi"] {
+            let itemProperty: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false,
+                                                                                    itemSelected: false,
+                                                                                    isDisabled: false,
+                                                                                    keyEquivalent: nil,
+                                                                                    text: string)
+            menuItemArr2.append(itemProperty)
+        }
+
+        
+        dpiSelect_.updateMenuItemsArr(menuItemArr2)
+        
+        dpiSelect_.selectItemAtIndex(0)
+        dpiSelect_.properties.creatable = false
+        dpiSelect_.properties.text = ""
+        dpiSelect_.reloadData()
         
         self.tipView?.km_add_left_constraint(constant: 8)
         self.tipView?.km_add_top_constraint(equalTo: self.pageRangeBox, attribute: .bottom, constant: -5)
@@ -85,24 +131,21 @@ class KMConvertImageSettingView: KMConvertSettingView {
     }
 }
 
-extension KMConvertImageSettingView: KMSelectPopButtonDelegate {    
-    func km_comboBoxSelectionDidChange(_ obj: KMDesignSelect) {
-        if (obj.isEqual(to: self.formartView)) {
-            guard let index = self.formartView?.indexOfSelectedItem, index >= 0 else {
-                self.selectedFormatIndex = 0
-                return
-            }
+extension KMConvertImageSettingView: ComponentSelectDelegate {
+    func componentSelectDidSelect(view: ComponentSelect?, menuItemProperty: ComponentMenuitemProperty?) {
+        guard let index = view?.indexOfSelect(), index >= 0 else {
+            return
+        }
+        
+        if self.formatSelect_.isEqual(to: view) {
             self.selectedFormatIndex = index
-            
-            if (index == 0 || index == 2) { // JPEG & PNG
-                self.dpiVC?.enabled = true
-            } else {
-                self.dpiVC?.enabled = false
-            }
-        } else if (obj.isEqual(to: self.dpiVC)) {
-            if let index = self.dpiVC?.indexOfSelectedItem {
-                self.selectedResolutionIndex = max(index, 0)
-            }
+//            if (index == 0 || index == 2) { // JPEG & PNG
+//                self.dpiVC?.enabled = true
+//            } else {
+//                self.dpiVC?.enabled = false
+//            }
+        } else if self.dpiSelect_.isEqual(to: view) {
+            self.selectedResolutionIndex = max(index, 0)
         }
     }
 }

+ 102 - 0
PDF Office/PDF Master/KMClass/Convert/View/KMConvertJsonSettingView.swift

@@ -0,0 +1,102 @@
+//
+//  KMConvertJsonSettingView.swift
+//  PDF Reader Pro
+//
+//  Created by User-Tangchao on 2024/10/29.
+//
+
+import Cocoa
+import KMComponentLibrary
+
+class KMConvertJsonSettingView: KMConvertSettingView {
+
+    @IBOutlet weak var setBox: NSBox!
+    @IBOutlet weak var titleLabel: NSTextField!
+    @IBOutlet weak var extractTextRadio: ComponentRadio!
+    @IBOutlet weak var extactTableRadio: ComponentRadio!
+    @IBOutlet weak var ocrBox: NSBox!
+    @IBOutlet weak var pageRangeBox: NSBox!
+    
+    var extractIndex = 0
+
+    override func draw(_ dirtyRect: NSRect) {
+        super.draw(dirtyRect)
+
+        // Drawing code here.
+    }
+    
+    static func json_createFromNib(in bundle: Bundle = Bundle.main) -> Self? {
+        let nibName = "KMConvertJsonSettingView"
+        var topLevelArray: NSArray? = nil
+        bundle.loadNibNamed(NSNib.Name(nibName), owner: nil, topLevelObjects: &topLevelArray)
+        guard let results = topLevelArray else { return nil }
+        let views = Array<Any>(results).filter { $0 is Self }
+        return views.last as? Self
+    }
+    
+    override func initSubViews() {
+        super.initSubViews()
+        
+        extractTextRadio.properties = ComponentCheckBoxProperty(size: .s,
+                                                               state: .normal,
+                                                               isDisabled: false,
+                                                               showhelp: false,
+                                                               text: NSLocalizedString("Extract Text", comment: ""),
+                                                               checkboxType: .normal)
+        extractTextRadio.setTarget(self, action: #selector(radioAction))
+        
+        extactTableRadio.properties = ComponentCheckBoxProperty(size: .s,
+                                                               state: .normal,
+                                                               isDisabled: false,
+                                                               showhelp: false,
+                                                               text: NSLocalizedString("Extract Tables", comment: ""),
+                                                               checkboxType: .normal)
+        extactTableRadio.setTarget(self, action: #selector(radioAction))
+        
+        self.radioAction(sender: self.extractTextRadio)
+    }
+    
+    override func initDefaultVlaue() {
+        super.initDefaultVlaue()
+        
+        self.titleLabel.stringValue = NSLocalizedString("Json Worksheet Settings", comment: "")
+        self.titleLabel.textColor = NSColor.km_init(hex: "#616469")
+        self.titleLabel.font = .SFProTextRegularFont(12)
+        
+        self.setBox.borderWidth = 0
+        self.ocrBox.borderWidth = 0
+        self.pageRangeBox.borderWidth = 0
+    }
+    
+    override func viewDidMoveToWindow() {
+        super.viewDidMoveToWindow()
+        
+        if (self.ocrItemView == nil) {
+            self.ocrItemView = KMConvertOCRSettingItemView.createFromNib()
+            self.ocrBox.contentView = self.ocrItemView
+        }
+        self.ocrItemView?.languageIndex = self.ocrLanuguageIndex
+
+        if (self.pageRangeItemView == nil) {
+            self.pageRangeItemView = KMConvertPageRangeSettingItemView.createFromNib()
+            self.pageRangeBox.contentView = self.pageRangeItemView
+        }
+    }
+    
+    @objc func radioAction(sender: ComponentRadio) {
+        for radio in [self.extractTextRadio, self.extactTableRadio] {
+            if sender.isEqual(to: radio) {
+                radio?.properties.checkboxType = .selected
+            } else {
+                radio?.properties.checkboxType = .normal
+            }
+            radio?.reloadData()
+        }
+        
+        if sender.isEqual(to: self.extractTextRadio) {
+            self.extractIndex = 0
+        } else if sender.isEqual(to: self.extactTableRadio) {
+            self.extractIndex = 1
+        }
+    }
+}

+ 101 - 0
PDF Office/PDF Master/KMClass/Convert/View/KMConvertJsonSettingView.xib

@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21507" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21507"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner"/>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <customView id="c22-O7-iKe" customClass="KMConvertJsonSettingView" customModule="PDF_Reader_Pro" customModuleProvider="target">
+            <rect key="frame" x="0.0" y="0.0" width="480" height="345"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <subviews>
+                <box boxType="custom" cornerRadius="4" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="J9I-Z0-aBC">
+                    <rect key="frame" x="0.0" y="225" width="480" height="120"/>
+                    <view key="contentView" id="hYH-NR-2a1">
+                        <rect key="frame" x="1" y="1" width="478" height="118"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <subviews>
+                            <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Lnf-WO-SVE">
+                                <rect key="frame" x="14" y="94" width="37" height="16"/>
+                                <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="Kly-qe-zid">
+                                    <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>
+                            <customView translatesAutoresizingMaskIntoConstraints="NO" id="TXI-RA-BC6" customClass="ComponentRadio" customModule="KMComponentLibrary">
+                                <rect key="frame" x="16" y="54" width="446" height="24"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="24" id="Vbg-NF-gUG"/>
+                                </constraints>
+                            </customView>
+                            <customView translatesAutoresizingMaskIntoConstraints="NO" id="cFV-cc-a3r" customClass="ComponentRadio" customModule="KMComponentLibrary">
+                                <rect key="frame" x="16" y="24" width="446" height="24"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="24" id="DvP-HQ-RdW"/>
+                                </constraints>
+                            </customView>
+                        </subviews>
+                        <constraints>
+                            <constraint firstAttribute="trailing" secondItem="TXI-RA-BC6" secondAttribute="trailing" constant="16" id="A7u-uk-1Hg"/>
+                            <constraint firstItem="cFV-cc-a3r" firstAttribute="top" secondItem="TXI-RA-BC6" secondAttribute="bottom" constant="6" id="E5z-Kt-HvM"/>
+                            <constraint firstItem="Lnf-WO-SVE" firstAttribute="leading" secondItem="hYH-NR-2a1" secondAttribute="leading" constant="16" id="S9k-GN-zBD"/>
+                            <constraint firstAttribute="trailing" secondItem="cFV-cc-a3r" secondAttribute="trailing" constant="16" id="SYK-D3-Hae"/>
+                            <constraint firstItem="TXI-RA-BC6" firstAttribute="leading" secondItem="hYH-NR-2a1" secondAttribute="leading" constant="16" id="VKe-q0-ZhB"/>
+                            <constraint firstItem="Lnf-WO-SVE" firstAttribute="top" secondItem="hYH-NR-2a1" secondAttribute="top" constant="8" id="X5A-5s-OkU"/>
+                            <constraint firstItem="TXI-RA-BC6" firstAttribute="top" secondItem="Lnf-WO-SVE" secondAttribute="bottom" constant="16" id="jTu-QO-hqQ"/>
+                            <constraint firstItem="cFV-cc-a3r" firstAttribute="leading" secondItem="hYH-NR-2a1" secondAttribute="leading" constant="16" id="rxh-AB-3jJ"/>
+                        </constraints>
+                    </view>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="120" id="vkf-e9-BxB"/>
+                    </constraints>
+                </box>
+                <box boxType="custom" cornerRadius="4" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="ceM-RS-vem">
+                    <rect key="frame" x="0.0" y="105" width="480" height="120"/>
+                    <view key="contentView" id="ahb-Hl-HyI">
+                        <rect key="frame" x="1" y="1" width="478" height="118"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                    </view>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="120" id="K5e-me-ZDa"/>
+                    </constraints>
+                </box>
+                <box boxType="custom" cornerRadius="4" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="Fgg-r2-5Kw">
+                    <rect key="frame" x="0.0" y="36" width="480" height="60"/>
+                    <view key="contentView" id="NZp-on-ku2">
+                        <rect key="frame" x="1" y="1" width="478" height="58"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                    </view>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="60" id="Mz7-sT-094"/>
+                    </constraints>
+                </box>
+            </subviews>
+            <constraints>
+                <constraint firstItem="J9I-Z0-aBC" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" id="4wM-Un-nl1"/>
+                <constraint firstItem="ceM-RS-vem" firstAttribute="top" secondItem="J9I-Z0-aBC" secondAttribute="bottom" id="7zu-lq-5MH"/>
+                <constraint firstItem="Fgg-r2-5Kw" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" id="8aY-UO-gAq"/>
+                <constraint firstItem="J9I-Z0-aBC" firstAttribute="top" secondItem="c22-O7-iKe" secondAttribute="top" id="RGg-Ki-1wY"/>
+                <constraint firstAttribute="trailing" secondItem="ceM-RS-vem" secondAttribute="trailing" id="Ssq-3o-msE"/>
+                <constraint firstAttribute="trailing" secondItem="Fgg-r2-5Kw" secondAttribute="trailing" id="ksh-Wd-L4e"/>
+                <constraint firstItem="Fgg-r2-5Kw" firstAttribute="top" secondItem="ceM-RS-vem" secondAttribute="bottom" constant="9" id="lFM-Pj-8fI"/>
+                <constraint firstItem="ceM-RS-vem" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" id="ltZ-Er-rej"/>
+                <constraint firstAttribute="trailing" secondItem="J9I-Z0-aBC" secondAttribute="trailing" id="nxn-38-84Q"/>
+            </constraints>
+            <connections>
+                <outlet property="extactTableRadio" destination="cFV-cc-a3r" id="4WL-Ns-39s"/>
+                <outlet property="extractTextRadio" destination="TXI-RA-BC6" id="Rse-Rh-4UN"/>
+                <outlet property="ocrBox" destination="ceM-RS-vem" id="jQy-DK-LVu"/>
+                <outlet property="pageRangeBox" destination="Fgg-r2-5Kw" id="SwR-F8-Sdq"/>
+                <outlet property="setBox" destination="J9I-Z0-aBC" id="2nw-O8-ZMf"/>
+                <outlet property="titleLabel" destination="Lnf-WO-SVE" id="rNk-eG-WcC"/>
+            </connections>
+            <point key="canvasLocation" x="-5" y="178.5"/>
+        </customView>
+    </objects>
+</document>

+ 19 - 19
PDF Office/PDF Master/KMClass/Convert/View/KMConvertOCRSettingItemView.swift

@@ -182,27 +182,27 @@ class KMConvertOCRSettingItemView: KMConvertBaseView {
     
     @objc func checkBoxAction(sender: NSButton) {
 #if VERSION_DMG
-        let isExist = KMResourceDownloadManager.manager.documentAIBundleExists()
-        if isExist || self._checkVC?.state == .Checked {
-            if let state = self._checkVC?.state {
-                self._checkVC?.state = state == .Checked ? .Norm : .Checked
-            }
+//        let isExist = KMResourceDownloadManager.manager.documentAIBundleExists()
+//        if isExist || self._checkVC?.state == .Checked {
+//            if let state = self._checkVC?.state {
+//                self._checkVC?.state = state == .Checked ? .Norm : .Checked
+//            }
             
             self._checkAction()
-        } else {
-            let alert = NSAlert()
-            alert.messageText = NSLocalizedString("Download OCR", comment: "")
-            alert.informativeText = NSLocalizedString("Using OCR requires downloading additional resource pack. Do you want to continue?", comment: "")
-            alert.addButton(withTitle: NSLocalizedString("Yes", comment: ""))
-            alert.addButton(withTitle: NSLocalizedString("No", comment: ""))
-            alert.beginSheetModal(for: self.window!) { [weak self] result in
-                if (result == .alertFirstButtonReturn) { /// 取消
-                    self?.downLoad()
-                } else if result == .alertSecondButtonReturn {
-                    return
-                }
-            }
-        }
+//        } else {
+//            let alert = NSAlert()
+//            alert.messageText = NSLocalizedString("Download OCR", comment: "")
+//            alert.informativeText = NSLocalizedString("Using OCR requires downloading additional resource pack. Do you want to continue?", comment: "")
+//            alert.addButton(withTitle: NSLocalizedString("Yes", comment: ""))
+//            alert.addButton(withTitle: NSLocalizedString("No", comment: ""))
+//            alert.beginSheetModal(for: self.window!) { [weak self] result in
+//                if (result == .alertFirstButtonReturn) { /// 取消
+//                    self?.downLoad()
+//                } else if result == .alertSecondButtonReturn {
+//                    return
+//                }
+//            }
+//        }
 #else
         if let state = self._checkVC?.state {
             self._checkVC?.state = state == .Checked ? .Norm : .Checked

+ 48 - 0
PDF Office/PDF Master/KMClass/Convert/Window/KMConvertHtmlWindowController.swift

@@ -0,0 +1,48 @@
+//
+//  KMConvertHtmlWindowController.swift
+//  PDF Reader Pro
+//
+//  Created by User-Tangchao on 2024/10/29.
+//
+
+import Cocoa
+
+class KMConvertHtmlWindowController: KMConvertBaseWindowController {
+
+    override var fileExtension: String {
+        return KMPDFConvert.pathExtension(.html)
+    }
+    
+    override func initDefaultValue() {
+        super.initDefaultValue()
+        
+        self.titleLabel.stringValue = NSLocalizedString("PDF to HTML", comment: "")
+    }
+    
+    override func initSettingView() -> KMConvertSettingView? {
+        return KMConvertHtmlSettingView.html_createFromNib()
+    }
+    
+    override func initConvert() -> KMPDFConvert {
+        return KMPDFConvertHTML()
+    }
+    
+    override func convertModelAppendParams(convert: KMPDFConvert) {
+        super.convertModelAppendParams(convert: convert)
+        
+        if let _convert = convert as? KMPDFConvertHTML {
+            let settingView: KMConvertHtmlSettingView = self.settingView as! KMConvertHtmlSettingView
+            let pageIndex = settingView.pageIndex
+            if (pageIndex == 0) {
+                _convert.paneOptions = .singlePage
+            } else if pageIndex == 1 {
+                _convert.paneOptions = .singlePageNavigationByBookmarks
+            } else if pageIndex == 2 {
+                _convert.paneOptions = .multiplePages
+            } else if pageIndex == 3 {
+                _convert.paneOptions = .multiplePagesSplitByBookmarks
+            }
+        }
+    }
+
+}

+ 43 - 0
PDF Office/PDF Master/KMClass/Convert/Window/KMConvertJsonWindowController.swift

@@ -0,0 +1,43 @@
+//
+//  KMConvertJsonWindowController.swift
+//  PDF Reader Pro
+//
+//  Created by User-Tangchao on 2024/10/29.
+//
+
+import Cocoa
+
+class KMConvertJsonWindowController: KMConvertBaseWindowController {
+    override var fileExtension: String {
+        return KMPDFConvert.pathExtension(.json)
+    }
+    
+    override func initDefaultValue() {
+        super.initDefaultValue()
+        
+        self.titleLabel.stringValue = NSLocalizedString("PDF to Json", comment: "")
+    }
+    
+    override func initSettingView() -> KMConvertSettingView? {
+        return KMConvertJsonSettingView.json_createFromNib()
+    }
+    
+    override func initConvert() -> KMPDFConvert {
+        return KMPDFConvertJson()
+    }
+    
+    override func convertModelAppendParams(convert: KMPDFConvert) {
+        super.convertModelAppendParams(convert: convert)
+        
+        if let _convert = convert as? KMPDFConvertHTML {
+            let settingView: KMConvertJsonSettingView = self.settingView as! KMConvertJsonSettingView
+            let index = settingView.extractIndex
+            if (index == 0) {
+                _convert.isAllInOneSheet = false
+            } else if index == 1 {
+                _convert.isAllInOneSheet = true
+            }
+        }
+    }
+
+}

+ 15 - 0
PDF Office/PDF Master/KMClass/KMPDFViewController/KMPDFViewController.swift

@@ -401,6 +401,21 @@ extension KMPDFViewController: KMPDFToolbarControllerDelegate {
             let model = KMDocumentModel(url: self.pdfView.document.documentURL)
             winC.documentModel = model
             winC.own_beginSheetModal(for: self.view.window, completionHandler: nil)
+        } else if itemIdentifier == KMPDFToolbar_convert_image_Identifier {
+            let winC = KMConvertImageWindowController()
+            let model = KMDocumentModel(url: self.pdfView.document.documentURL)
+            winC.documentModel = model
+            winC.own_beginSheetModal(for: self.view.window, completionHandler: nil)
+        } else if itemIdentifier == KMPDFToolbar_convert_HTML_Identifier {
+            let winC = KMConvertHtmlWindowController()
+            let model = KMDocumentModel(url: self.pdfView.document.documentURL)
+            winC.documentModel = model
+            winC.own_beginSheetModal(for: self.view.window, completionHandler: nil)
+        } else if itemIdentifier == KMPDFToolbar_convert_Json_Identifier {
+            let winC = KMConvertJsonWindowController()
+            let model = KMDocumentModel(url: self.pdfView.document.documentURL)
+            winC.documentModel = model
+            winC.own_beginSheetModal(for: self.view.window, completionHandler: nil)
         } else if itemIdentifier == KMPDFToolbar_PageEdit_InsertFile_Identifier {
             pageEditViewController?.insertFromPDFAction()
         } else if itemIdentifier == KMPDFToolbar_PageEdit_InsertBlank_Identifier {

+ 48 - 0
PDF Office/PDF Reader Pro.xcodeproj/project.pbxproj

@@ -108,6 +108,24 @@
 		656C1E462CD0745200295F82 /* KMConvertSettingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 656C1E2D2CD0745200295F82 /* KMConvertSettingView.swift */; };
 		656C1E472CD0745200295F82 /* KMConvertSettingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 656C1E2D2CD0745200295F82 /* KMConvertSettingView.swift */; };
 		656C1E482CD0745200295F82 /* KMConvertSettingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 656C1E2D2CD0745200295F82 /* KMConvertSettingView.swift */; };
+		656C1E4D2CD0D19600295F82 /* KMConvertHtmlWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 656C1E4C2CD0D19600295F82 /* KMConvertHtmlWindowController.swift */; };
+		656C1E4E2CD0D19600295F82 /* KMConvertHtmlWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 656C1E4C2CD0D19600295F82 /* KMConvertHtmlWindowController.swift */; };
+		656C1E4F2CD0D19600295F82 /* KMConvertHtmlWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 656C1E4C2CD0D19600295F82 /* KMConvertHtmlWindowController.swift */; };
+		656C1E522CD0D27D00295F82 /* KMConvertHtmlSettingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 656C1E512CD0D27D00295F82 /* KMConvertHtmlSettingView.swift */; };
+		656C1E532CD0D27D00295F82 /* KMConvertHtmlSettingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 656C1E512CD0D27D00295F82 /* KMConvertHtmlSettingView.swift */; };
+		656C1E542CD0D27D00295F82 /* KMConvertHtmlSettingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 656C1E512CD0D27D00295F82 /* KMConvertHtmlSettingView.swift */; };
+		656C1E562CD0D28E00295F82 /* KMConvertHtmlSettingView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 656C1E552CD0D28E00295F82 /* KMConvertHtmlSettingView.xib */; };
+		656C1E572CD0D28E00295F82 /* KMConvertHtmlSettingView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 656C1E552CD0D28E00295F82 /* KMConvertHtmlSettingView.xib */; };
+		656C1E582CD0D28E00295F82 /* KMConvertHtmlSettingView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 656C1E552CD0D28E00295F82 /* KMConvertHtmlSettingView.xib */; };
+		656C1E5A2CD0DF1B00295F82 /* KMConvertJsonWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 656C1E592CD0DF1B00295F82 /* KMConvertJsonWindowController.swift */; };
+		656C1E5B2CD0DF1B00295F82 /* KMConvertJsonWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 656C1E592CD0DF1B00295F82 /* KMConvertJsonWindowController.swift */; };
+		656C1E5C2CD0DF1B00295F82 /* KMConvertJsonWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 656C1E592CD0DF1B00295F82 /* KMConvertJsonWindowController.swift */; };
+		656C1E5E2CD0DFE900295F82 /* KMConvertJsonSettingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 656C1E5D2CD0DFE900295F82 /* KMConvertJsonSettingView.swift */; };
+		656C1E5F2CD0DFE900295F82 /* KMConvertJsonSettingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 656C1E5D2CD0DFE900295F82 /* KMConvertJsonSettingView.swift */; };
+		656C1E602CD0DFE900295F82 /* KMConvertJsonSettingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 656C1E5D2CD0DFE900295F82 /* KMConvertJsonSettingView.swift */; };
+		656C1E622CD0DFF400295F82 /* KMConvertJsonSettingView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 656C1E612CD0DFF400295F82 /* KMConvertJsonSettingView.xib */; };
+		656C1E632CD0DFF400295F82 /* KMConvertJsonSettingView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 656C1E612CD0DFF400295F82 /* KMConvertJsonSettingView.xib */; };
+		656C1E642CD0DFF400295F82 /* KMConvertJsonSettingView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 656C1E612CD0DFF400295F82 /* KMConvertJsonSettingView.xib */; };
 		658FDBA92C9D4B3100EFA72E /* KMNoteReplyCellView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 658FDBA82C9D4B3100EFA72E /* KMNoteReplyCellView.swift */; };
 		658FDBAA2C9D4B3100EFA72E /* KMNoteReplyCellView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 658FDBA82C9D4B3100EFA72E /* KMNoteReplyCellView.swift */; };
 		658FDBAB2C9D4B3100EFA72E /* KMNoteReplyCellView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 658FDBA82C9D4B3100EFA72E /* KMNoteReplyCellView.swift */; };
@@ -5968,6 +5986,12 @@
 		656C1E2B2CD0745100295F82 /* KMConvertSettingLimitTipView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KMConvertSettingLimitTipView.swift; sourceTree = "<group>"; };
 		656C1E2C2CD0745100295F82 /* KMConvertCSVSettingView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KMConvertCSVSettingView.swift; sourceTree = "<group>"; };
 		656C1E2D2CD0745200295F82 /* KMConvertSettingView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KMConvertSettingView.swift; sourceTree = "<group>"; };
+		656C1E4C2CD0D19600295F82 /* KMConvertHtmlWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMConvertHtmlWindowController.swift; sourceTree = "<group>"; };
+		656C1E512CD0D27D00295F82 /* KMConvertHtmlSettingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMConvertHtmlSettingView.swift; sourceTree = "<group>"; };
+		656C1E552CD0D28E00295F82 /* KMConvertHtmlSettingView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMConvertHtmlSettingView.xib; sourceTree = "<group>"; };
+		656C1E592CD0DF1B00295F82 /* KMConvertJsonWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMConvertJsonWindowController.swift; sourceTree = "<group>"; };
+		656C1E5D2CD0DFE900295F82 /* KMConvertJsonSettingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMConvertJsonSettingView.swift; sourceTree = "<group>"; };
+		656C1E612CD0DFF400295F82 /* KMConvertJsonSettingView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMConvertJsonSettingView.xib; sourceTree = "<group>"; };
 		658FDBA82C9D4B3100EFA72E /* KMNoteReplyCellView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMNoteReplyCellView.swift; sourceTree = "<group>"; };
 		658FDBAC2C9D4B9600EFA72E /* KMNoteReplyCellView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMNoteReplyCellView.xib; sourceTree = "<group>"; };
 		658FDBB02C9D90CE00EFA72E /* KMNoteFilterStateCollevtionViewItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMNoteFilterStateCollevtionViewItem.swift; sourceTree = "<group>"; };
@@ -8416,6 +8440,10 @@
 				656C1E2B2CD0745100295F82 /* KMConvertSettingLimitTipView.swift */,
 				656C1E2D2CD0745200295F82 /* KMConvertSettingView.swift */,
 				656C1E292CD0745100295F82 /* KMConvertWordSettingView.swift */,
+				656C1E512CD0D27D00295F82 /* KMConvertHtmlSettingView.swift */,
+				656C1E552CD0D28E00295F82 /* KMConvertHtmlSettingView.xib */,
+				656C1E5D2CD0DFE900295F82 /* KMConvertJsonSettingView.swift */,
+				656C1E612CD0DFF400295F82 /* KMConvertJsonSettingView.xib */,
 			);
 			path = View;
 			sourceTree = "<group>";
@@ -8428,6 +8456,8 @@
 				651559152CCA6E3000C0F0D9 /* KMConvertImageWindowController.swift */,
 				651559172CCA6E3000C0F0D9 /* KMConvertPPTsWindowController.swift */,
 				651559142CCA6E2F00C0F0D9 /* KMConvertWordWindowController.swift */,
+				656C1E4C2CD0D19600295F82 /* KMConvertHtmlWindowController.swift */,
+				656C1E592CD0DF1B00295F82 /* KMConvertJsonWindowController.swift */,
 			);
 			path = Window;
 			sourceTree = "<group>";
@@ -16001,6 +16031,7 @@
 				AD1D48522AFB8510007AC1F0 /* KMMergeTableViewCell.xib in Resources */,
 				ADBC374C29CAD65D00D93208 /* KMComparativeOutlineCell.xib in Resources */,
 				BB03D6902B01C7AB008C9976 /* KMPDFEditInsertBlankPageWindow.xib in Resources */,
+				656C1E622CD0DFF400295F82 /* KMConvertJsonSettingView.xib in Resources */,
 				BBE788812CBD2463008086E2 /* WCCompWindowController.xib in Resources */,
 				9FDD0FBA295D5230000C4DAD /* KMToolbarController.xib in Resources */,
 				BB9599CF2B3184440062D346 /* KMRedactSelectPagesWindowController.xib in Resources */,
@@ -16194,6 +16225,7 @@
 				9F69DBB52B512614003D4C45 /* KMAnnotationTextWidgetOptionsViewController.xib in Resources */,
 				9F0CB4AA296CF19600007028 /* KMPropertiesPanelListMenuSubVC.xib in Resources */,
 				ADE8BC3329F9261900570F89 /* KMSearchCellView.xib in Resources */,
+				656C1E562CD0D28E00295F82 /* KMConvertHtmlSettingView.xib in Resources */,
 				AD3AAD492B0B7B8900DE5FE7 /* KMCompareToolbar.xib in Resources */,
 				AD055E4E2B7234810035F824 /* KMBookmarkSheetView.xib in Resources */,
 				9F0CB4C02977C06300007028 /* KMPropertiesPanelColorSubVC.xib in Resources */,
@@ -16610,6 +16642,7 @@
 				BB5A9D622CB6521400F64C1F /* KMPDFToolbarController.xib in Resources */,
 				BB072D5A2C057BD600779B45 /* KMToolbarConfigWindowController.xib in Resources */,
 				ADD1B6DC2946BE1700C3FFF7 /* KMPrintChoosePageSizeView.xib in Resources */,
+				656C1E632CD0DFF400295F82 /* KMConvertJsonSettingView.xib in Resources */,
 				BBD922412B50D6D600DB9585 /* rate_pic_free.pdf in Resources */,
 				BBA19F3329ADAC81001A285A /* signPicture_hover.pdf in Resources */,
 				BB42A5DB2B8F0F8B0092C524 /* KMTabbingHintWindowController.xib in Resources */,
@@ -16803,6 +16836,7 @@
 				89E9B3FA295BE2EC00AEFA61 /* KMEditPDFTextPropertyViewController.xib in Resources */,
 				9F853A032947137500DF644E /* default-icon.pdf in Resources */,
 				BB0FE0412B734DD1001E0F88 /* AITypeChooseView.xib in Resources */,
+				656C1E572CD0D28E00295F82 /* KMConvertHtmlSettingView.xib in Resources */,
 				ADBC372E29CA951E00D93208 /* KMComparativeOutlineView.xib in Resources */,
 				654A5A852C89628A001FBD4B /* KMWatermarkAdjectivePropertyBaseController.xib in Resources */,
 				ADDF83752B391A5D00A81A4E /* CDSignatureDrawViewController.xib in Resources */,
@@ -16992,6 +17026,7 @@
 				BBB2ACE22B5943F800098854 /* Quick Start Guide.pdf in Resources */,
 				ADD1B6F22946C06C00C3FFF7 /* KMPrintChoosePageSizeSizeView.xib in Resources */,
 				AD7D5CE12B957693006562CD /* KMBookmarkOutlineFileCellView.xib in Resources */,
+				656C1E582CD0D28E00295F82 /* KMConvertHtmlSettingView.xib in Resources */,
 				AD1CA4162A061CCD0070541F /* KMAnnotationScreenColorViewItem.xib in Resources */,
 				ADE787B02AA5AA50002EC85A /* KMAccountExceptionView.xib in Resources */,
 				AD1CA3FC2A05FCB60070541F /* KMAnnotationScreenViewController.xib in Resources */,
@@ -17259,6 +17294,7 @@
 				BBAFC84F298519F700D0648E /* KMSavePanelAccessoryController.xib in Resources */,
 				F3A0F8662CC9459400E7373F /* KMNPDFInsertClipboardWindowController.xib in Resources */,
 				BBEC00C4295C306400A26C98 /* KMBatesPropertyController.xib in Resources */,
+				656C1E642CD0DFF400295F82 /* KMConvertJsonSettingView.xib in Resources */,
 				ADDF83A62B391A5D00A81A4E /* DSignatureConfigWindowController.xib in Resources */,
 				BB19A76D2CB7D107008204DC /* KMHomeFilesEmptyHeaderView.xib in Resources */,
 				9F8539D029430BF300DF644E /* KMBrowserWindowController.xib in Resources */,
@@ -17525,6 +17561,7 @@
 				ADBC373C29CA9AE100D93208 /* KMComparativeManager.swift in Sources */,
 				BBE788932CBD2463008086E2 /* ProgressVC.swift in Sources */,
 				BB147008299DC0D100784A6A /* OIDRegistrationRequest.m in Sources */,
+				656C1E4D2CD0D19600295F82 /* KMConvertHtmlWindowController.swift in Sources */,
 				BBA19F4729AE27DA001A285A /* KMAnnotationTableRowView.swift in Sources */,
 				BB67EE172B54FFEF00573BF0 /* ASIDataCompressor.m in Sources */,
 				BB8F4565295AA3ED0037EA22 /* KMHeaderFooterManager.swift in Sources */,
@@ -17931,6 +17968,7 @@
 				BB3D07692CD08FDB00EB94DF /* KMSplitPDFViewController.swift in Sources */,
 				ADDF83A72B391A5D00A81A4E /* DSignatureApperanceManager.swift in Sources */,
 				BB2C847F2BAE732700AF6142 /* KMBotaLeftView.swift in Sources */,
+				656C1E5A2CD0DF1B00295F82 /* KMConvertJsonWindowController.swift in Sources */,
 				AD2D74AD29F0CEB300EDC5E4 /* KMCancellationWindowController.swift in Sources */,
 				9F1FE4B729406E4700E952CA /* CTBrowserFrameView.m in Sources */,
 				BB146FD8299DC0D100784A6A /* GTLRFramework.m in Sources */,
@@ -18681,6 +18719,7 @@
 				ADE8BC2F29F8CD7200570F89 /* KMPDFThumbnailModel.swift in Sources */,
 				BBBAECFC2B57713F00266BD3 /* KMTransitionInfo.swift in Sources */,
 				BB0782F82CD0BDCA00101C81 /* KMSplitToolbar.swift in Sources */,
+				656C1E5E2CD0DFE900295F82 /* KMConvertJsonSettingView.swift in Sources */,
 				BB4EEF4029764FCC003A3537 /* KMWatermarkColorView.swift in Sources */,
 				BBBBB49F2B6F743700C7205E /* SKAttachmentEmailer.m in Sources */,
 				BB52F55C2CC1FBF6007418DB /* KMLinkPageView.swift in Sources */,
@@ -18731,6 +18770,7 @@
 				AD8810A929A8463600178CA1 /* KMAccountInfoWindowController.swift in Sources */,
 				9F0CB525298656BA00007028 /* KMDesignToken+BorderWidth.swift in Sources */,
 				BB2EDF6A296ECE17003BCF58 /* KMPageEditInsertTypeItemView.swift in Sources */,
+				656C1E522CD0D27D00295F82 /* KMConvertHtmlSettingView.swift in Sources */,
 				BB03085C2CC7A40A00F4AAC7 /* KMPDFSideBarController.swift in Sources */,
 				9F3D818729A0A9A60087B5AD /* KMDesignButton.swift in Sources */,
 				BBF19E8F2B0B304C007154C8 /* KMStampCreaterWindowController.swift in Sources */,
@@ -19193,6 +19233,7 @@
 				F3DB85F32CCA209600D0AFDE /* KMNBaseWindowController.swift in Sources */,
 				BBEC00C0295C306400A26C98 /* KMBatesPropertyController.swift in Sources */,
 				BB0A55222A30968900B6E84B /* KMDesignBaseView.swift in Sources */,
+				656C1E4E2CD0D19600295F82 /* KMConvertHtmlWindowController.swift in Sources */,
 				BB61F2132B59120F00777E27 /* KMScroller.swift in Sources */,
 				BB73F2892C63147E00131EE7 /* KMUnbindAlertViewController.swift in Sources */,
 				9FCFEC992AD14EEF00EAD2CB /* KMMailHelper.swift in Sources */,
@@ -19811,6 +19852,7 @@
 				AD7D5CD42B957442006562CD /* KMBookmarkOutlineFileCellView.swift in Sources */,
 				ADE86AF82B0AF59A00414DFA /* KMCompareContentSettingView.swift in Sources */,
 				BBFA1CDB2B60DBF90053AD4A /* KMScreenShotMaskViewController.swift in Sources */,
+				656C1E532CD0D27D00295F82 /* KMConvertHtmlSettingView.swift in Sources */,
 				BB981E532AD4F638001988CA /* KMCoverButton.swift in Sources */,
 				BB5F8A0F29BB04F000365ADB /* GBDeviceInfo_OSX.m in Sources */,
 				BBB7B48A2A033F6200B58A5A /* KMThumbnailView.swift in Sources */,
@@ -19908,6 +19950,7 @@
 				BBD3C8B72B2C438F00EB0867 /* KMToolbarPreviousNextItemView.swift in Sources */,
 				9FD0D2A42AD4ECA900DA3FF8 /* KMPDFEditAppendCustomView.swift in Sources */,
 				ADDF835A2B391A5C00A81A4E /* CDSignatureCertificateStateViewController.swift in Sources */,
+				656C1E5B2CD0DF1B00295F82 /* KMConvertJsonWindowController.swift in Sources */,
 				BBBF68852A3C3AF10058E14E /* NSDocumentController+KMExtension.swift in Sources */,
 				AD8810A129A8459000178CA1 /* KMComparativeTableViewController.swift in Sources */,
 				BBBB6CD32AD14A5F0035AA66 /* CPDFChoiceWidgetAnnotation+PDFListView.swift in Sources */,
@@ -19962,6 +20005,7 @@
 				BB403BAB2B15CA6E00B3106D /* KMBatchConvertOperation.swift in Sources */,
 				ADDEEA732AD3EFE200EF675D /* KMButton.swift in Sources */,
 				BB67EE272B54FFEF00573BF0 /* ASINetworkQueue.m in Sources */,
+				656C1E5F2CD0DFE900295F82 /* KMConvertJsonSettingView.swift in Sources */,
 				BB2F9AB92AFCC3AD00F9DD93 /* KMProfileInfo.swift in Sources */,
 				BB146FE5299DC0D100784A6A /* GTLRURITemplate.m in Sources */,
 				9F1FE4F129406E4700E952CA /* BackgroundGradientView.m in Sources */,
@@ -20983,6 +21027,7 @@
 				BB1B0AD92B4FC6E900889528 /* KMOpenFileGuideProperty.swift in Sources */,
 				BB0FE0452B734DD1001E0F88 /* AITypeChooseView.swift in Sources */,
 				9FD0FA2B29CD3ED400F2AB0D /* KMRightSideEmptyVC.swift in Sources */,
+				656C1E602CD0DFE900295F82 /* KMConvertJsonSettingView.swift in Sources */,
 				BB3A66A92B078CA400575343 /* KMNoteOutlineView.swift in Sources */,
 				BB6B43682A04919200E02B54 /* KMBaseViewController.swift in Sources */,
 				9F1FE4E329406E4700E952CA /* GTMNSAnimation+Duration.m in Sources */,
@@ -21045,6 +21090,7 @@
 				BB276A542B03776200AB5578 /* KMConvertOperationQueue.swift in Sources */,
 				AD055E8A2B882E7F0035F824 /* SKBookmark.m in Sources */,
 				BB072D682C05B44300779B45 /* KMToolbarConfigModel.swift in Sources */,
+				656C1E5C2CD0DF1B00295F82 /* KMConvertJsonWindowController.swift in Sources */,
 				ADDF83462B391A5C00A81A4E /* DSignatureManager.swift in Sources */,
 				BB1BFF7B2AEA0B8E003EB179 /* KMBatchOperateRightViewController.swift in Sources */,
 				F37322F8292DF9410013862C /* CSelfSignAnnotation.m in Sources */,
@@ -21082,6 +21128,7 @@
 				BB19A73C2CB7B4C9008204DC /* KMHomeRightView.swift in Sources */,
 				BB0308582CC7443100F4AAC7 /* KMPDFToolbarManager.swift in Sources */,
 				BBF38A5C294F2B760086D025 /* KMWatermarkPositionView.swift in Sources */,
+				656C1E542CD0D27D00295F82 /* KMConvertHtmlSettingView.swift in Sources */,
 				AD5999402AD7E88600412F8B /* KMStampManager.swift in Sources */,
 				AD199DDF2B200FA300D56FEE /* KMPrintPosterView.swift in Sources */,
 				ADAFDA2D2AE8DE1B00F084BC /* KMAdvertisementCache.swift in Sources */,
@@ -21188,6 +21235,7 @@
 				BBC3482B29559B22008D2CD1 /* KMBackgroundListCell.swift in Sources */,
 				F34BF93729530708002C25A2 /* NSImage+PDFListView.m in Sources */,
 				BB4A94A62B04DA0C00940F8B /* KMGOCRManagerNew.swift in Sources */,
+				656C1E4F2CD0D19600295F82 /* KMConvertHtmlWindowController.swift in Sources */,
 				BB276A522B0376B400AB5578 /* KMBatchOperateRemoveHeaderFooterViewController.swift in Sources */,
 				BB8F4551295A9FA50037EA22 /* KMCreateHeaderFooterController.swift in Sources */,
 				ADDF834F2B391A5C00A81A4E /* DSignatureCertifyDetailViewController.swift in Sources */,