Browse Source

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

niehaoyu 4 months ago
parent
commit
e7d36e7a2d

+ 0 - 31
PDF Office/PDF Master/Class/PDFTools/Convert/Controller/KMConvertCSVWindowController.xib

@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21507" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
-    <dependencies>
-        <deployment identifier="macosx"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21507"/>
-        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
-    </dependencies>
-    <objects>
-        <customObject id="-2" userLabel="File's Owner" customClass="KMConvertCSVWindowController" customModule="PDF_Office" customModuleProvider="target">
-            <connections>
-                <outlet property="window" destination="F0z-JX-Cv5" id="gIp-Ho-8D9"/>
-            </connections>
-        </customObject>
-        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
-        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
-        <window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="F0z-JX-Cv5">
-            <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
-            <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
-            <rect key="contentRect" x="196" y="240" width="480" height="270"/>
-            <rect key="screenRect" x="0.0" y="0.0" width="2560" height="1415"/>
-            <view key="contentView" id="se5-gp-TjO">
-                <rect key="frame" x="0.0" y="0.0" width="480" height="270"/>
-                <autoresizingMask key="autoresizingMask"/>
-            </view>
-            <connections>
-                <outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
-            </connections>
-            <point key="canvasLocation" x="132" y="-82"/>
-        </window>
-    </objects>
-</document>

+ 0 - 31
PDF Office/PDF Master/Class/PDFTools/Convert/Controller/KMConvertExcelWindowController.xib

@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21507" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
-    <dependencies>
-        <deployment identifier="macosx"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21507"/>
-        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
-    </dependencies>
-    <objects>
-        <customObject id="-2" userLabel="File's Owner" customClass="KMConvertExcelWindowController" customModule="PDF_Office" customModuleProvider="target">
-            <connections>
-                <outlet property="window" destination="F0z-JX-Cv5" id="gIp-Ho-8D9"/>
-            </connections>
-        </customObject>
-        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
-        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
-        <window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="F0z-JX-Cv5">
-            <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
-            <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
-            <rect key="contentRect" x="196" y="240" width="480" height="270"/>
-            <rect key="screenRect" x="0.0" y="0.0" width="2560" height="1415"/>
-            <view key="contentView" id="se5-gp-TjO">
-                <rect key="frame" x="0.0" y="0.0" width="480" height="270"/>
-                <autoresizingMask key="autoresizingMask"/>
-            </view>
-            <connections>
-                <outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
-            </connections>
-            <point key="canvasLocation" x="127" y="-46"/>
-        </window>
-    </objects>
-</document>

+ 0 - 31
PDF Office/PDF Master/Class/PDFTools/Convert/Controller/KMConvertImageWindowController.xib

@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22155" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
-    <dependencies>
-        <deployment identifier="macosx"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22155"/>
-        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
-    </dependencies>
-    <objects>
-        <customObject id="-2" userLabel="File's Owner" customClass="KMConvertImageWindowController" customModule="PDF_Master" customModuleProvider="target">
-            <connections>
-                <outlet property="window" destination="F0z-JX-Cv5" id="gIp-Ho-8D9"/>
-            </connections>
-        </customObject>
-        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
-        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
-        <window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="F0z-JX-Cv5">
-            <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
-            <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
-            <rect key="contentRect" x="196" y="240" width="480" height="270"/>
-            <rect key="screenRect" x="0.0" y="0.0" width="2560" height="1415"/>
-            <view key="contentView" id="se5-gp-TjO">
-                <rect key="frame" x="0.0" y="0.0" width="480" height="270"/>
-                <autoresizingMask key="autoresizingMask"/>
-            </view>
-            <connections>
-                <outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
-            </connections>
-            <point key="canvasLocation" x="132" y="-82"/>
-        </window>
-    </objects>
-</document>

+ 0 - 28
PDF Office/PDF Master/Class/PDFTools/Convert/Controller/KMConvertPPTsWindowController.xib

@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="11163" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
-    <dependencies>
-        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="11163"/>
-    </dependencies>
-    <objects>
-        <customObject id="-2" userLabel="File's Owner" customClass="KMConvertPPTsWindowController" customModuleProvider="target">
-            <connections>
-                <outlet property="window" destination="F0z-JX-Cv5" id="gIp-Ho-8D9"/>
-            </connections>
-        </customObject>
-        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
-        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
-        <window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="F0z-JX-Cv5">
-            <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
-            <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
-            <rect key="contentRect" x="196" y="240" width="480" height="270"/>
-            <rect key="screenRect" x="0.0" y="0.0" width="1440" height="877"/>
-            <view key="contentView" id="se5-gp-TjO">
-                <rect key="frame" x="0.0" y="0.0" width="480" height="270"/>
-                <autoresizingMask key="autoresizingMask"/>
-            </view>
-            <connections>
-                <outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
-            </connections>
-        </window>
-    </objects>
-</document>

+ 0 - 31
PDF Office/PDF Master/Class/PDFTools/Convert/Controller/KMConvertWordWindowController.xib

@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21507" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
-    <dependencies>
-        <deployment identifier="macosx"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21507"/>
-        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
-    </dependencies>
-    <objects>
-        <customObject id="-2" userLabel="File's Owner" customClass="KMConvertWordWindowController" customModule="PDF_Office" customModuleProvider="target">
-            <connections>
-                <outlet property="window" destination="F0z-JX-Cv5" id="gIp-Ho-8D9"/>
-            </connections>
-        </customObject>
-        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
-        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
-        <window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="F0z-JX-Cv5">
-            <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
-            <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
-            <rect key="contentRect" x="196" y="240" width="480" height="270"/>
-            <rect key="screenRect" x="0.0" y="0.0" width="2560" height="1415"/>
-            <view key="contentView" id="se5-gp-TjO">
-                <rect key="frame" x="0.0" y="0.0" width="480" height="270"/>
-                <autoresizingMask key="autoresizingMask"/>
-            </view>
-            <connections>
-                <outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
-            </connections>
-            <point key="canvasLocation" x="38" y="-46"/>
-        </window>
-    </objects>
-</document>

+ 131 - 130
PDF Office/PDF Master/Class/PDFTools/Convert/Controller/KMConvertBaseWindowController.swift

@@ -8,12 +8,12 @@
 import PDFKit
 
 typealias KMConvertBaseWindowControllerItemClick = (Int) -> ()
-class KMConvertBaseWindowController: KMBaseWindowController {
+class KMConvertBaseWindowController: KMNBaseWindowController {
     
     @IBOutlet weak var titleLabel: NSTextField!
     
     @IBOutlet weak var leftBox: NSBox!
-    @IBOutlet weak var prePDFView: KMCustomPDFView?
+    @IBOutlet weak var prePDFView: KMNPDFPreView?
     @IBOutlet weak var numberBox: NSView!
     @IBOutlet weak var numberTextField: NSTextField!
     @IBOutlet weak var perLabel: NSTextField!
@@ -93,26 +93,27 @@ class KMConvertBaseWindowController: KMBaseWindowController {
 //        #endif
         
         if (self.documentModel != nil) {
-            let document = CPDFDocument(url: self.documentModel!.documentURL)
-            if (document!.isLocked) {
-                document?.unlock(withPassword: self.documentModel!.password)
-            }
-            self.prePDFView?.document = document!
+//            let document = CPDFDocument(url: self.documentModel!.documentURL)
+//            if (document!.isLocked) {
+//                document?.unlock(withPassword: self.documentModel!.password)
+//            }
+//            self.prePDFView?.document = document!
             
-            let number: Int = Int((self.prePDFView?.document.pageCount)!)
-            let string = "\(number)"
-            totalNumberLabel.stringValue = string
+            self.prePDFView?.setFileUrl(self.documentModel!.documentURL, password: self.documentModel?.password)
+//            let number: Int = Int((self.prePDFView?.document.pageCount)!)
+//            let string = "\(number)"
+//            totalNumberLabel.stringValue = string
             
-            self.prePDFView?.go(toPageIndex: self.documentModel!.currentIndex, animated: false)
-        }
-        if (self.prePDFView?.documentView() != nil) {
-            self.prePDFView?.documentView().enclosingScrollView?.hasVerticalScroller = false
-            self.prePDFView?.documentView().enclosingScrollView?.hasHorizontalScroller = false
+//            self.prePDFView?.go(toPageIndex: self.documentModel!.currentIndex, animated: false)
         }
+//        if (self.prePDFView?.documentView() != nil) {
+//            self.prePDFView?.documentView().enclosingScrollView?.hasVerticalScroller = false
+//            self.prePDFView?.documentView().enclosingScrollView?.hasHorizontalScroller = false
+//        }
         
-        if let pageCount = self.prePDFView?.document.pageCount {
-            self.settingView?.pageCount = Int(pageCount)
-        }
+//        if let pageCount = self.prePDFView?.document.pageCount {
+//            self.settingView?.pageCount = Int(pageCount)
+//        }
 
         batchButton.title = NSLocalizedString("Batch", comment: "")
         batchButton.isBordered = false
@@ -224,10 +225,10 @@ class KMConvertBaseWindowController: KMBaseWindowController {
         
         self.totalNumberLabel.lineBreakMode = .byTruncatingTail
         
-        self.prePDFView?.setDisplay(.singlePage)
-        self.prePDFView?.layoutDocumentView()
-        self.prePDFView?.autoScales = true
-        self.prePDFView?.delegate = self
+//        self.prePDFView?.setDisplay(.singlePage)
+//        self.prePDFView?.layoutDocumentView()
+//        self.prePDFView?.autoScales = true
+//        self.prePDFView?.delegate = self
         
         self.backBox.fillColor = .clear
         self.backButtonVC?.target = self
@@ -276,7 +277,7 @@ class KMConvertBaseWindowController: KMBaseWindowController {
         self.titleLabel.font = .SFProTextSemiboldFont(16)
         
         self.leftBox.fillColor = NSColor.km_init(hex: "#F7F8FA")
-        self.prePDFView?.backgroundColor = NSColor.km_init(hex: "#F7F8FA")
+//        self.prePDFView?.backgroundColor = NSColor.km_init(hex: "#F7F8FA")
         self.numberBox.layer?.borderColor = NSColor.km_init(hex: "#DFE1E5").cgColor
         self.perLabel.textColor = NSColor.titleColor()
         self.perLabel.font = .SFProTextRegularFont(12)
@@ -310,23 +311,23 @@ class KMConvertBaseWindowController: KMBaseWindowController {
     }
     
     @objc func backButtonAction() {
-        if let _ = self.prePDFView?.canGoToPreviousPage() {
-            self.currentPageIndex -= 1
-            self.prePDFView?.goToPreviousPage(nil)
-            
-            self.numberTextField.stringValue = "\(self.prePDFView!.currentPageIndex+1)"
-            self.updateBackAndNextButtonState()
-        }
+//        if let _ = self.prePDFView?.canGoToPreviousPage() {
+//            self.currentPageIndex -= 1
+//            self.prePDFView?.goToPreviousPage(nil)
+//
+//            self.numberTextField.stringValue = "\(self.prePDFView!.currentPageIndex+1)"
+//            self.updateBackAndNextButtonState()
+//        }
     }
     
     @objc func nextButtonAction() {
-        if let _ = self.prePDFView?.canGoToNextPage() {
-            self.currentPageIndex += 1
-            self.prePDFView?.goToNextPage(nil)
-            
-            self.numberTextField.stringValue = "\(self.prePDFView!.currentPageIndex+1)"
-            self.updateBackAndNextButtonState()
-        }
+//        if let _ = self.prePDFView?.canGoToNextPage() {
+//            self.currentPageIndex += 1
+//            self.prePDFView?.goToNextPage(nil)
+//
+//            self.numberTextField.stringValue = "\(self.prePDFView!.currentPageIndex+1)"
+//            self.updateBackAndNextButtonState()
+//        }
     }
     
     @objc func batchButtonAction() {
@@ -362,11 +363,11 @@ class KMConvertBaseWindowController: KMBaseWindowController {
         if (FileManager.default.fileExists(atPath: filePath)) {
             try?FileManager.default.removeItem(atPath: filePath)
         }
-        if ((self.prePDFView?.document?.writeDecrypt(to: URL(fileURLWithPath: filePath)))!) {
-            for i in 0 ..< self.prePDFView!.document.pageCount {
-                pages.append(Int(i)+1)
-            }
-        }
+//        if ((self.prePDFView?.document?.writeDecrypt(to: URL(fileURLWithPath: filePath)))!) {
+//            for i in 0 ..< self.prePDFView!.document.pageCount {
+//                pages.append(Int(i)+1)
+//            }
+//        }
         
         if (pages.count <= 0) {
             let alert = NSAlert()
@@ -519,13 +520,13 @@ class KMConvertBaseWindowController: KMBaseWindowController {
     
     private func updateBackAndNextButtonState() {
         var nextEnabled = false
-        if let result = self.prePDFView?.canGoToNextPage() {
-            nextEnabled = result
-        }
+//        if let result = self.prePDFView?.canGoToNextPage() {
+//            nextEnabled = result
+//        }
         var backEnabled = false
-        if let result = self.prePDFView?.canGoToPreviousPage() {
-            backEnabled = result
-        }
+//        if let result = self.prePDFView?.canGoToPreviousPage() {
+//            backEnabled = result
+//        }
         
         if (Thread.isMainThread) {
             self.backButtonVC?.state = backEnabled ? .Norm : .Disabled
@@ -539,45 +540,45 @@ class KMConvertBaseWindowController: KMBaseWindowController {
     }
     
     internal func updatePreView(pageRange: KMPageRange, pageString: String = "") {
-        let pages = self.getPages(pageRange, pageString: pageString)
-        if (pages == nil || pages!.isEmpty) {
-            let alert = NSAlert()
-            alert.alertStyle = .warning
-            alert.messageText = NSLocalizedString("Invalid page range or the page number is out of range. Please try again.", comment: "")
-            alert.runModal()
-            return
-        }
-        var indexs = IndexSet()
-        for i in 0 ..< self.prePDFView!.document.pageCount  {
-            indexs.insert(IndexSet.Element(i))
-        }
-        self.prePDFView?.document.removePage(at: indexs)
-        
-        #if DEBUG
-        let pageIndexs = self.getPageIndexs(pageRange, pageString: pageString)
-        if (pageIndexs != nil) {
-            for i in pageIndexs! {
-                
-                KMPrint(i)
-            }
-        }
-        #endif
-//        self.prePDFView.document?.importPages(pageIndexs!, from: self.documentModel.document, at: 0)
-        for page in pages! {
-            self.prePDFView?.document.insertPageObject(page, at: self.prePDFView!.document.pageCount)
-        }
-        DispatchQueue.main.async {
-            self.prePDFView?.layoutDocumentView()
-            self.prePDFView?.setNeedsDisplayForVisiblePages()
-            self.prePDFView?.goToFirstPage(nil)
-            
-            let number: Int = Int(self.prePDFView!.document!.pageCount)
-            self.totalNumberLabel.stringValue = "\(number)"
-            self.currentPageIndex = 1
-            self.numberTextField.stringValue = "1"
-            
-            self.updateBackAndNextButtonState()
-        }
+//        let pages = self.getPages(pageRange, pageString: pageString)
+//        if (pages == nil || pages!.isEmpty) {
+//            let alert = NSAlert()
+//            alert.alertStyle = .warning
+//            alert.messageText = NSLocalizedString("Invalid page range or the page number is out of range. Please try again.", comment: "")
+//            alert.runModal()
+//            return
+//        }
+//        var indexs = IndexSet()
+//        for i in 0 ..< self.prePDFView!.document.pageCount  {
+//            indexs.insert(IndexSet.Element(i))
+//        }
+//        self.prePDFView?.document.removePage(at: indexs)
+//
+//        #if DEBUG
+//        let pageIndexs = self.getPageIndexs(pageRange, pageString: pageString)
+//        if (pageIndexs != nil) {
+//            for i in pageIndexs! {
+//
+//                KMPrint(i)
+//            }
+//        }
+//        #endif
+////        self.prePDFView.document?.importPages(pageIndexs!, from: self.documentModel.document, at: 0)
+//        for page in pages! {
+//            self.prePDFView?.document.insertPageObject(page, at: self.prePDFView!.document.pageCount)
+//        }
+//        DispatchQueue.main.async {
+//            self.prePDFView?.layoutDocumentView()
+//            self.prePDFView?.setNeedsDisplayForVisiblePages()
+//            self.prePDFView?.goToFirstPage(nil)
+//
+//            let number: Int = Int(self.prePDFView!.document!.pageCount)
+//            self.totalNumberLabel.stringValue = "\(number)"
+//            self.currentPageIndex = 1
+//            self.numberTextField.stringValue = "1"
+//
+//            self.updateBackAndNextButtonState()
+//        }
     }
     
     private func getPageIndexs(_ pageRange: KMPageRange, pageString: String = "") -> IndexSet? {
@@ -665,10 +666,10 @@ class KMConvertBaseWindowController: KMBaseWindowController {
                 pages.append(page!)
             }
         } else if (pageRange == .current) {
-            let page = self.prePDFView?.currentPage()
-            if (page != nil) {
-                pages.append(page!)
-            }
+//            let page = self.prePDFView?.currentPage()
+//            if (page != nil) {
+//                pages.append(page!)
+//            }
         } else if (pageRange == .custom) {
             let array = self.findSelectPage(pageRangeString: pageString)
             if array.count == 0 {
@@ -698,20 +699,20 @@ class KMConvertBaseWindowController: KMBaseWindowController {
             try?FileManager.default.removeItem(atPath: filePath)
         }
         if (limit) {
-            if let _ = KMTools.saveWatermarkDocument(document: self.prePDFView!.document, to: URL(fileURLWithPath: filePath), removePWD: true) {
-                for i in 0 ..< self.prePDFView!.document.pageCount {
-                    if (i >= 10) {
-                        break
-                    }
-                    pages.append(Int(i)+1)
-                }
-            }
+//            if let _ = KMTools.saveWatermarkDocument(document: self.prePDFView!.document, to: URL(fileURLWithPath: filePath), removePWD: true) {
+//                for i in 0 ..< self.prePDFView!.document.pageCount {
+//                    if (i >= 10) {
+//                        break
+//                    }
+//                    pages.append(Int(i)+1)
+//                }
+//            }
         } else {
-            if ((self.prePDFView?.document?.writeDecrypt(to: URL(fileURLWithPath: filePath)))!) {
-                for i in 0 ..< self.prePDFView!.document.pageCount {
-                    pages.append(Int(i)+1)
-                }
-            }
+//            if ((self.prePDFView?.document?.writeDecrypt(to: URL(fileURLWithPath: filePath)))!) {
+//                for i in 0 ..< self.prePDFView!.document.pageCount {
+//                    pages.append(Int(i)+1)
+//                }
+//            }
         }
         
         if (pages.count <= 0) {
@@ -724,13 +725,13 @@ class KMConvertBaseWindowController: KMBaseWindowController {
         
         DispatchQueue.main.async {
             NSPanel.savePanel(self.window!) { panel in
-                var url: URL = self.prePDFView!.document.documentURL
-                if (self.oriDocumentUrl != nil) {
-                    url = self.oriDocumentUrl!
-                }
-                let name = url.deletingPathExtension().lastPathComponent
-                panel.nameFieldStringValue = name
-                panel.allowedFileTypes = [self.fileExtension]
+//                var url: URL = self.prePDFView!.document.documentURL
+//                if (self.oriDocumentUrl != nil) {
+//                    url = self.oriDocumentUrl!
+//                }
+//                let name = url.deletingPathExtension().lastPathComponent
+//                panel.nameFieldStringValue = name
+//                panel.allowedFileTypes = [self.fileExtension]
             } completion: { response, url in
                 if (response == .cancel) {
                     return
@@ -890,9 +891,9 @@ class KMConvertBaseWindowController: KMBaseWindowController {
     
     private func _clearData() {
         if let _ = self.oriDocumentUrl {
-            if let data = self.prePDFView?.document.documentURL.path, FileManager.default.fileExists(atPath: data) {
-                try?FileManager.default.removeItem(atPath: data)
-            }
+//            if let data = self.prePDFView?.document.documentURL.path, FileManager.default.fileExists(atPath: data) {
+//                try?FileManager.default.removeItem(atPath: data)
+//            }
         }
     }
 }
@@ -917,12 +918,12 @@ extension KMConvertBaseWindowController: NSTextFieldDelegate {
             if value.isEmpty {
                 value.append("1")
             } else {
-                if Int(value)! <= 0 {
-                    value = "1"
-                } else if Int(value)! > self.prePDFView!.document!.pageCount {
-                    let number: Int = Int(self.prePDFView!.document!.pageCount)
-                    value = "\(number)"
-                }
+//                if Int(value)! <= 0 {
+//                    value = "1"
+//                } else if Int(value)! > self.prePDFView!.document!.pageCount {
+//                    let number: Int = Int(self.prePDFView!.document!.pageCount)
+//                    value = "\(number)"
+//                }
             }
             
             numberTextField.stringValue = value
@@ -933,22 +934,22 @@ extension KMConvertBaseWindowController: NSTextFieldDelegate {
         if numberTextField.isEqual(to: obj.object) {
             if (numberTextField.stringValue.isEmpty) {
                 numberTextField.stringValue = "1"
-                self.prePDFView?.go(toPageIndex: 0, animated: false)
+//                self.prePDFView?.go(toPageIndex: 0, animated: false)
                 self.currentPageIndex = 1
                 
                 self.updateBackAndNextButtonState()
                 return
             }
             let number: Int = Int(numberTextField.stringValue)!
-            if number > 0 && number <= self.prePDFView!.document!.pageCount {
-                guard let page = self.prePDFView?.document?.page(at: UInt(number-1)) else {
-                    return
-                }
-                self.prePDFView?.go(to: page)
-                currentPageIndex = number
-                
-                self.updateBackAndNextButtonState()
-            }
+//            if number > 0 && number <= self.prePDFView!.document!.pageCount {
+//                guard let page = self.prePDFView?.document?.page(at: UInt(number-1)) else {
+//                    return
+//                }
+//                self.prePDFView?.go(to: page)
+//                currentPageIndex = number
+//
+//                self.updateBackAndNextButtonState()
+//            }
         }
     }
 }

+ 23 - 23
PDF Office/PDF Master/Class/PDFTools/Convert/Controller/KMConvertBaseWindowController.xib

@@ -1,13 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22154" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21507" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
     <dependencies>
         <deployment identifier="macosx"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22154"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21507"/>
         <capability name="System colors introduced in macOS 10.13" minToolsVersion="9.0"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
-        <customObject id="-2" userLabel="File's Owner" customClass="KMConvertBaseWindowController" customModule="PDF_Master" customModuleProvider="target">
+        <customObject id="-2" userLabel="File's Owner" customClass="KMConvertBaseWindowController" customModule="PDF_Reader_Pro" customModuleProvider="target">
             <connections>
                 <outlet property="backBox" destination="gFg-Q7-54m" id="8ww-CO-9PP"/>
                 <outlet property="batchButton" destination="iFO-Ki-C0L" id="KTA-dQ-WkN"/>
@@ -32,7 +32,7 @@
             <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
             <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
             <rect key="contentRect" x="196" y="240" width="586" height="483"/>
-            <rect key="screenRect" x="0.0" y="0.0" width="2560" height="1415"/>
+            <rect key="screenRect" x="0.0" y="0.0" width="1440" height="875"/>
             <value key="minSize" type="size" width="586" height="483"/>
             <value key="maxSize" type="size" width="586" height="483"/>
             <view key="contentView" id="se5-gp-TjO">
@@ -69,7 +69,7 @@
                             <rect key="frame" x="0.0" y="0.0" width="212" height="320"/>
                             <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                             <subviews>
-                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="mvl-fd-L7y" customClass="KMCustomPDFView" customModule="PDF_Master" customModuleProvider="target">
+                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="mvl-fd-L7y" customClass="KMNPDFPreView" customModule="PDF_Reader_Pro" customModuleProvider="target">
                                     <rect key="frame" x="16" y="56" width="182" height="248"/>
                                 </customView>
                                 <customView translatesAutoresizingMaskIntoConstraints="NO" id="XyN-M5-Ckr">
@@ -168,21 +168,21 @@
                                 <scrollView borderType="none" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="jkb-2v-6fa">
                                     <rect key="frame" x="0.0" y="0.0" width="358" height="391"/>
                                     <clipView key="contentView" id="tI2-Vq-Nms">
-                                        <rect key="frame" x="0.0" y="0.0" width="343" height="376"/>
+                                        <rect key="frame" x="0.0" y="0.0" width="358" height="391"/>
                                         <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                                         <subviews>
                                             <view id="dBH-xr-mGL">
-                                                <rect key="frame" x="0.0" y="0.0" width="328" height="361"/>
+                                                <rect key="frame" x="0.0" y="0.0" width="343" height="376"/>
                                                 <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                                             </view>
                                         </subviews>
                                     </clipView>
                                     <scroller key="horizontalScroller" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="MLK-hj-eAf">
-                                        <rect key="frame" x="0.0" y="376" width="343" height="15"/>
+                                        <rect key="frame" x="0.0" y="375" width="358" height="16"/>
                                         <autoresizingMask key="autoresizingMask"/>
                                     </scroller>
                                     <scroller key="verticalScroller" wantsLayer="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="L4p-RZ-VGS">
-                                        <rect key="frame" x="343" y="0.0" width="15" height="376"/>
+                                        <rect key="frame" x="342" y="0.0" width="16" height="391"/>
                                         <autoresizingMask key="autoresizingMask"/>
                                     </scroller>
                                 </scrollView>
@@ -209,14 +209,14 @@
                                 </box>
                                 <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="iFO-Ki-C0L">
                                     <rect key="frame" x="16" y="16" width="70" height="32"/>
-                                    <buttonCell key="cell" type="bevel" title="Button" bezelStyle="rounded" alignment="center" imageScaling="proportionallyDown" inset="2" id="d7s-3h-qfP">
-                                        <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
-                                        <font key="font" metaFont="system"/>
-                                    </buttonCell>
                                     <constraints>
                                         <constraint firstAttribute="height" constant="32" id="C1r-dK-Ys8"/>
                                         <constraint firstAttribute="width" constant="70" id="JwP-9x-Fn9"/>
                                     </constraints>
+                                    <buttonCell key="cell" type="bevel" title="Button" bezelStyle="rounded" alignment="center" imageScaling="proportionallyDown" inset="2" id="d7s-3h-qfP">
+                                        <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                        <font key="font" metaFont="system"/>
+                                    </buttonCell>
                                 </button>
                                 <box boxType="custom" borderWidth="0.0" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="Xgn-Dg-lq9">
                                     <rect key="frame" x="394" y="16" width="80" height="32"/>
@@ -280,7 +280,7 @@
             </connections>
             <point key="canvasLocation" x="13" y="100.5"/>
         </window>
-        <customView id="LzC-nd-jo2" customClass="KMConvertWordSettingView" customModule="PDF_Master" customModuleProvider="target">
+        <customView id="LzC-nd-jo2" customClass="KMConvertWordSettingView" customModule="PDF_Reader_Pro" customModuleProvider="target">
             <rect key="frame" x="0.0" y="0.0" width="276" height="250"/>
             <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
             <subviews>
@@ -298,13 +298,13 @@
                                     <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
                                 </textFieldCell>
                             </textField>
-                            <customView translatesAutoresizingMaskIntoConstraints="NO" id="sIu-Jp-911" customClass="KMImageTitleButton" customModule="PDF_Master" customModuleProvider="target">
+                            <customView translatesAutoresizingMaskIntoConstraints="NO" id="sIu-Jp-911" customClass="KMImageTitleButton" customModule="PDF_Reader_Pro" customModuleProvider="target">
                                 <rect key="frame" x="16" y="37" width="244" height="22"/>
                                 <constraints>
                                     <constraint firstAttribute="height" constant="22" id="vJn-IG-4gT"/>
                                 </constraints>
                             </customView>
-                            <customView translatesAutoresizingMaskIntoConstraints="NO" id="y6s-OJ-cG8" customClass="KMImageTitleButton" customModule="PDF_Master" customModuleProvider="target">
+                            <customView translatesAutoresizingMaskIntoConstraints="NO" id="y6s-OJ-cG8" customClass="KMImageTitleButton" customModule="PDF_Reader_Pro" customModuleProvider="target">
                                 <rect key="frame" x="16" y="7" width="244" height="22"/>
                                 <constraints>
                                     <constraint firstAttribute="height" constant="22" id="obd-W8-at7"/>
@@ -367,7 +367,7 @@
             </connections>
             <point key="canvasLocation" x="118" y="543"/>
         </customView>
-        <customView id="rMz-DL-eLf" customClass="KMConvertOCRSettingItemView" customModule="PDF_Master" customModuleProvider="target">
+        <customView id="rMz-DL-eLf" customClass="KMConvertOCRSettingItemView" customModule="PDF_Reader_Pro" customModuleProvider="target">
             <rect key="frame" x="0.0" y="0.0" width="276" height="86"/>
             <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
             <subviews>
@@ -420,7 +420,7 @@
             </connections>
             <point key="canvasLocation" x="436" y="466"/>
         </customView>
-        <customView id="pQ2-zT-XVA" customClass="KMConvertPageRangeSettingItemView" customModule="PDF_Master" customModuleProvider="target">
+        <customView id="pQ2-zT-XVA" customClass="KMConvertPageRangeSettingItemView" customModule="PDF_Reader_Pro" customModuleProvider="target">
             <rect key="frame" x="0.0" y="0.0" width="280" height="76"/>
             <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
             <subviews>
@@ -458,7 +458,7 @@
             </connections>
             <point key="canvasLocation" x="438" y="599"/>
         </customView>
-        <customView id="Aiu-IG-eq4" customClass="KMConvertImageSettingView" customModule="PDF_Master" customModuleProvider="target">
+        <customView id="Aiu-IG-eq4" customClass="KMConvertImageSettingView" customModule="PDF_Reader_Pro" customModuleProvider="target">
             <rect key="frame" x="0.0" y="0.0" width="276" height="250"/>
             <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
             <subviews>
@@ -569,7 +569,7 @@
             </connections>
             <point key="canvasLocation" x="118" y="839.5"/>
         </customView>
-        <customView id="Gcl-gP-wFo" customClass="KMConvertCSVSettingView" customModule="PDF_Master" customModuleProvider="target">
+        <customView id="Gcl-gP-wFo" customClass="KMConvertCSVSettingView" customModule="PDF_Reader_Pro" customModuleProvider="target">
             <rect key="frame" x="0.0" y="0.0" width="276" height="250"/>
             <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
             <subviews>
@@ -587,7 +587,7 @@
                                 </buttonCell>
                             </button>
                             <comboBox hidden="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="uah-L1-IyT">
-                                <rect key="frame" x="31" y="-22" width="215" height="23"/>
+                                <rect key="frame" x="32" y="-23" width="214" height="25"/>
                                 <comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" numberOfVisibleItems="5" id="X1R-ss-GZO">
                                     <font key="font" metaFont="system"/>
                                     <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@@ -653,7 +653,7 @@
             </connections>
             <point key="canvasLocation" x="118" y="1154"/>
         </customView>
-        <customView id="xUu-ga-ZZ7" customClass="KMConvertPPTsSettingView" customModule="PDF_Master" customModuleProvider="target">
+        <customView id="xUu-ga-ZZ7" customClass="KMConvertPPTsSettingView" customModule="PDF_Reader_Pro" customModuleProvider="target">
             <rect key="frame" x="0.0" y="0.0" width="276" height="250"/>
             <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
             <subviews>
@@ -692,7 +692,7 @@
             </connections>
             <point key="canvasLocation" x="118" y="1465"/>
         </customView>
-        <customView id="CNe-Pz-PVB" customClass="KMConvertExcelSettingView" customModule="PDF_Master" customModuleProvider="target">
+        <customView id="CNe-Pz-PVB" customClass="KMConvertExcelSettingView" customModule="PDF_Reader_Pro" customModuleProvider="target">
             <rect key="frame" x="0.0" y="0.0" width="270" height="370"/>
             <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
             <subviews>

PDF Office/PDF Master/Class/PDFTools/Convert/Controller/KMConvertCSVWindowController.swift → PDF Office/PDF Master/KMClass/Convert/Window/KMConvertCSVWindowController.swift


PDF Office/PDF Master/Class/PDFTools/Convert/Controller/KMConvertExcelWindowController.swift → PDF Office/PDF Master/KMClass/Convert/Window/KMConvertExcelWindowController.swift


PDF Office/PDF Master/Class/PDFTools/Convert/Controller/KMConvertImageWindowController.swift → PDF Office/PDF Master/KMClass/Convert/Window/KMConvertImageWindowController.swift


PDF Office/PDF Master/Class/PDFTools/Convert/Controller/KMConvertPPTsWindowController.swift → PDF Office/PDF Master/KMClass/Convert/Window/KMConvertPPTsWindowController.swift


PDF Office/PDF Master/Class/PDFTools/Convert/Controller/KMConvertWordWindowController.swift → PDF Office/PDF Master/KMClass/Convert/Window/KMConvertWordWindowController.swift


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

@@ -179,6 +179,11 @@ extension KMPDFViewController: KMPDFToolbarControllerDelegate {
             } else {
                 exitPageEditMode()
             }
+        } else if itemIdentifier == KMPDFToolbar_convert_word_Identifier {
+            let winC = KMConvertWordWindowController()
+            let model = KMDocumentModel(url: self.pdfView.document.documentURL)
+            winC.documentModel = model
+            self.km_safe_beginSheet(windowC: winC)
         }
         
         refreshToolbarView()

+ 83 - 0
PDF Office/PDF Master/KMClass/Tools/PDFPreview/KMNPDFPreView.swift

@@ -0,0 +1,83 @@
+//
+//  KMNPDFPreView.swift
+//  PDF Reader Pro
+//
+//  Created by User-Tangchao on 2024/10/23.
+//
+
+import Cocoa
+
+class KMNPDFPreView: NSView {
+    private lazy var contentBox_: NSBox = {
+        let box = NSBox()
+        return box
+    }()
+    
+    lazy var pdfView: CPDFView = {
+        let view = CPDFView()
+        return view
+    }()
+    
+    var contentInset: NSEdgeInsets = .init(top: 0, left: 0, bottom: 0, right: 0) {
+        didSet {
+            self.needsLayout = true
+        }
+    }
+
+    deinit {
+        KMPrint("KMNPDFPreView deinit.")
+    }
+    
+    convenience init(fileUrl: URL, password: String?) {
+        self.init()
+        
+        initSubviews()
+        initDefaultValue()
+        
+        setFileUrl(fileUrl, password: password)
+    }
+    
+    override func awakeFromNib() {
+        super.awakeFromNib()
+        
+        initSubviews()
+        initDefaultValue()
+    }
+    
+    func initSubviews() {
+        self.addSubview(self.contentBox_)
+        
+        self.contentBox_.contentView = self.pdfView
+    }
+    
+    func initDefaultValue() {
+        
+    }
+    
+    func setFileUrl(_ fileUrl: URL, password: String?) {
+        let document = CPDFDocument(url: fileUrl)
+        let isLocked = document?.isLocked ?? false
+        if isLocked {
+            document?.unlock(withPassword: password ?? "")
+        }
+        pdfView.document = document
+    }
+    
+    override func layout() {
+        super.layout()
+        
+        let theFrame = self.bounds
+        let contentX = self.contentInset.left
+        let contentY = self.contentInset.top
+        let contentW = NSWidth(theFrame)-contentX-self.contentInset.right
+        let contentH = NSHeight(theFrame)-contentY-self.contentInset.bottom
+        self.contentBox_.frame = NSMakeRect(contentX, contentY, contentW, contentH)
+    }
+    
+    override func draw(_ dirtyRect: NSRect) {
+        super.draw(dirtyRect)
+
+        // Drawing code here.
+    }
+    
+}

+ 108 - 96
PDF Office/PDF Reader Pro.xcodeproj/project.pbxproj

@@ -7,6 +7,32 @@
 	objects = {
 
 /* Begin PBXBuildFile section */
+		650FF6752CC897090019FAE1 /* NSWindowController+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBA633372CC09DE10040B7F6 /* NSWindowController+Extension.swift */; };
+		650FF6762CC8970A0019FAE1 /* NSWindowController+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBA633372CC09DE10040B7F6 /* NSWindowController+Extension.swift */; };
+		650FF6782CC897EB0019FAE1 /* KMNPDFPreView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 650FF6772CC897EB0019FAE1 /* KMNPDFPreView.swift */; };
+		650FF6792CC897EB0019FAE1 /* KMNPDFPreView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 650FF6772CC897EB0019FAE1 /* KMNPDFPreView.swift */; };
+		650FF67A2CC897EB0019FAE1 /* KMNPDFPreView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 650FF6772CC897EB0019FAE1 /* KMNPDFPreView.swift */; };
+		6515590E2CCA6E2400C0F0D9 /* KMConvertBaseWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6515590C2CCA6E2300C0F0D9 /* KMConvertBaseWindowController.swift */; };
+		6515590F2CCA6E2400C0F0D9 /* KMConvertBaseWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6515590C2CCA6E2300C0F0D9 /* KMConvertBaseWindowController.swift */; };
+		651559102CCA6E2400C0F0D9 /* KMConvertBaseWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6515590C2CCA6E2300C0F0D9 /* KMConvertBaseWindowController.swift */; };
+		651559112CCA6E2400C0F0D9 /* KMConvertBaseWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6515590D2CCA6E2300C0F0D9 /* KMConvertBaseWindowController.xib */; };
+		651559122CCA6E2400C0F0D9 /* KMConvertBaseWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6515590D2CCA6E2300C0F0D9 /* KMConvertBaseWindowController.xib */; };
+		651559132CCA6E2400C0F0D9 /* KMConvertBaseWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6515590D2CCA6E2300C0F0D9 /* KMConvertBaseWindowController.xib */; };
+		651559192CCA6E3100C0F0D9 /* KMConvertWordWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 651559142CCA6E2F00C0F0D9 /* KMConvertWordWindowController.swift */; };
+		6515591A2CCA6E3100C0F0D9 /* KMConvertWordWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 651559142CCA6E2F00C0F0D9 /* KMConvertWordWindowController.swift */; };
+		6515591B2CCA6E3100C0F0D9 /* KMConvertWordWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 651559142CCA6E2F00C0F0D9 /* KMConvertWordWindowController.swift */; };
+		6515591C2CCA6E3100C0F0D9 /* KMConvertImageWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 651559152CCA6E3000C0F0D9 /* KMConvertImageWindowController.swift */; };
+		6515591D2CCA6E3100C0F0D9 /* KMConvertImageWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 651559152CCA6E3000C0F0D9 /* KMConvertImageWindowController.swift */; };
+		6515591E2CCA6E3100C0F0D9 /* KMConvertImageWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 651559152CCA6E3000C0F0D9 /* KMConvertImageWindowController.swift */; };
+		6515591F2CCA6E3100C0F0D9 /* KMConvertExcelWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 651559162CCA6E3000C0F0D9 /* KMConvertExcelWindowController.swift */; };
+		651559202CCA6E3100C0F0D9 /* KMConvertExcelWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 651559162CCA6E3000C0F0D9 /* KMConvertExcelWindowController.swift */; };
+		651559212CCA6E3100C0F0D9 /* KMConvertExcelWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 651559162CCA6E3000C0F0D9 /* KMConvertExcelWindowController.swift */; };
+		651559222CCA6E3100C0F0D9 /* KMConvertPPTsWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 651559172CCA6E3000C0F0D9 /* KMConvertPPTsWindowController.swift */; };
+		651559232CCA6E3100C0F0D9 /* KMConvertPPTsWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 651559172CCA6E3000C0F0D9 /* KMConvertPPTsWindowController.swift */; };
+		651559242CCA6E3100C0F0D9 /* KMConvertPPTsWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 651559172CCA6E3000C0F0D9 /* KMConvertPPTsWindowController.swift */; };
+		651559252CCA6E3100C0F0D9 /* KMConvertCSVWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 651559182CCA6E3000C0F0D9 /* KMConvertCSVWindowController.swift */; };
+		651559262CCA6E3100C0F0D9 /* KMConvertCSVWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 651559182CCA6E3000C0F0D9 /* KMConvertCSVWindowController.swift */; };
+		651559272CCA6E3100C0F0D9 /* KMConvertCSVWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 651559182CCA6E3000C0F0D9 /* KMConvertCSVWindowController.swift */; };
 		651A59822C8EA20F005A35FB /* KMPurchaseEmbeddedWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F3A48C32C8017FA0047F565 /* KMPurchaseEmbeddedWindowController.swift */; };
 		651A59832C8EA210005A35FB /* KMPurchaseEmbeddedWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F3A48C32C8017FA0047F565 /* KMPurchaseEmbeddedWindowController.swift */; };
 		652E953D2C6670CE0061FA40 /* KMFreehandAnnotationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 652E953C2C6670CE0061FA40 /* KMFreehandAnnotationController.swift */; };
@@ -3535,12 +3561,6 @@
 		BB3D971A2B3060B5007094C8 /* KMPDFAnnotationRedactConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB3D97192B3060B5007094C8 /* KMPDFAnnotationRedactConfig.swift */; };
 		BB3D971B2B3060B5007094C8 /* KMPDFAnnotationRedactConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB3D97192B3060B5007094C8 /* KMPDFAnnotationRedactConfig.swift */; };
 		BB3D971C2B3060B5007094C8 /* KMPDFAnnotationRedactConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB3D97192B3060B5007094C8 /* KMPDFAnnotationRedactConfig.swift */; };
-		BB3EAEAD293E3D6000D92407 /* KMConvertBaseWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB3EAEAB293E3D6000D92407 /* KMConvertBaseWindowController.swift */; };
-		BB3EAEAE293E3D6000D92407 /* KMConvertBaseWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB3EAEAB293E3D6000D92407 /* KMConvertBaseWindowController.swift */; };
-		BB3EAEAF293E3D6000D92407 /* KMConvertBaseWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB3EAEAB293E3D6000D92407 /* KMConvertBaseWindowController.swift */; };
-		BB3EAEB0293E3D6000D92407 /* KMConvertBaseWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB3EAEAC293E3D6000D92407 /* KMConvertBaseWindowController.xib */; };
-		BB3EAEB1293E3D6000D92407 /* KMConvertBaseWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB3EAEAC293E3D6000D92407 /* KMConvertBaseWindowController.xib */; };
-		BB3EAEB2293E3D6000D92407 /* KMConvertBaseWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB3EAEAC293E3D6000D92407 /* KMConvertBaseWindowController.xib */; };
 		BB403BAA2B15CA6E00B3106D /* KMBatchConvertOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB403BA92B15CA6E00B3106D /* KMBatchConvertOperation.swift */; };
 		BB403BAB2B15CA6E00B3106D /* KMBatchConvertOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB403BA92B15CA6E00B3106D /* KMBatchConvertOperation.swift */; };
 		BB403BAC2B15CA6E00B3106D /* KMBatchConvertOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB403BA92B15CA6E00B3106D /* KMBatchConvertOperation.swift */; };
@@ -3568,12 +3588,6 @@
 		BB493F952B3E9805003E6175 /* KMBatchQuickActionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB493F942B3E9805003E6175 /* KMBatchQuickActionManager.swift */; };
 		BB493F962B3E9805003E6175 /* KMBatchQuickActionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB493F942B3E9805003E6175 /* KMBatchQuickActionManager.swift */; };
 		BB493F972B3E9805003E6175 /* KMBatchQuickActionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB493F942B3E9805003E6175 /* KMBatchQuickActionManager.swift */; };
-		BB49ECDD293EED6100C82CA2 /* KMConvertWordWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB49ECDB293EED6100C82CA2 /* KMConvertWordWindowController.swift */; };
-		BB49ECDE293EED6100C82CA2 /* KMConvertWordWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB49ECDB293EED6100C82CA2 /* KMConvertWordWindowController.swift */; };
-		BB49ECDF293EED6100C82CA2 /* KMConvertWordWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB49ECDB293EED6100C82CA2 /* KMConvertWordWindowController.swift */; };
-		BB49ECE0293EED6100C82CA2 /* KMConvertWordWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB49ECDC293EED6100C82CA2 /* KMConvertWordWindowController.xib */; };
-		BB49ECE1293EED6100C82CA2 /* KMConvertWordWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB49ECDC293EED6100C82CA2 /* KMConvertWordWindowController.xib */; };
-		BB49ECE2293EED6100C82CA2 /* KMConvertWordWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB49ECDC293EED6100C82CA2 /* KMConvertWordWindowController.xib */; };
 		BB49ECE5293EF54800C82CA2 /* KMCustomPDFView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB49ECE4293EF54800C82CA2 /* KMCustomPDFView.swift */; };
 		BB49ECE6293EF54800C82CA2 /* KMCustomPDFView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB49ECE4293EF54800C82CA2 /* KMCustomPDFView.swift */; };
 		BB49ECE7293EF54800C82CA2 /* KMCustomPDFView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB49ECE4293EF54800C82CA2 /* KMCustomPDFView.swift */; };
@@ -3586,30 +3600,6 @@
 		BB49ECF1293F40F500C82CA2 /* KMConvertPageRangeSettingItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB49ECF0293F40F500C82CA2 /* KMConvertPageRangeSettingItemView.swift */; };
 		BB49ECF2293F40F500C82CA2 /* KMConvertPageRangeSettingItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB49ECF0293F40F500C82CA2 /* KMConvertPageRangeSettingItemView.swift */; };
 		BB49ECF3293F40F500C82CA2 /* KMConvertPageRangeSettingItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB49ECF0293F40F500C82CA2 /* KMConvertPageRangeSettingItemView.swift */; };
-		BB49ECF6293F44DC00C82CA2 /* KMConvertExcelWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB49ECF4293F44DC00C82CA2 /* KMConvertExcelWindowController.swift */; };
-		BB49ECF7293F44DC00C82CA2 /* KMConvertExcelWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB49ECF4293F44DC00C82CA2 /* KMConvertExcelWindowController.swift */; };
-		BB49ECF8293F44DC00C82CA2 /* KMConvertExcelWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB49ECF4293F44DC00C82CA2 /* KMConvertExcelWindowController.swift */; };
-		BB49ECF9293F44DC00C82CA2 /* KMConvertExcelWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB49ECF5293F44DC00C82CA2 /* KMConvertExcelWindowController.xib */; };
-		BB49ECFA293F44DC00C82CA2 /* KMConvertExcelWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB49ECF5293F44DC00C82CA2 /* KMConvertExcelWindowController.xib */; };
-		BB49ECFB293F44DC00C82CA2 /* KMConvertExcelWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB49ECF5293F44DC00C82CA2 /* KMConvertExcelWindowController.xib */; };
-		BB49ECFE293F459500C82CA2 /* KMConvertPPTsWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB49ECFC293F459500C82CA2 /* KMConvertPPTsWindowController.swift */; };
-		BB49ECFF293F459500C82CA2 /* KMConvertPPTsWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB49ECFC293F459500C82CA2 /* KMConvertPPTsWindowController.swift */; };
-		BB49ED00293F459500C82CA2 /* KMConvertPPTsWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB49ECFC293F459500C82CA2 /* KMConvertPPTsWindowController.swift */; };
-		BB49ED01293F459500C82CA2 /* KMConvertPPTsWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB49ECFD293F459500C82CA2 /* KMConvertPPTsWindowController.xib */; };
-		BB49ED02293F459500C82CA2 /* KMConvertPPTsWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB49ECFD293F459500C82CA2 /* KMConvertPPTsWindowController.xib */; };
-		BB49ED03293F459500C82CA2 /* KMConvertPPTsWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB49ECFD293F459500C82CA2 /* KMConvertPPTsWindowController.xib */; };
-		BB49ED06293F461500C82CA2 /* KMConvertCSVWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB49ED04293F461500C82CA2 /* KMConvertCSVWindowController.swift */; };
-		BB49ED07293F461500C82CA2 /* KMConvertCSVWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB49ED04293F461500C82CA2 /* KMConvertCSVWindowController.swift */; };
-		BB49ED08293F461500C82CA2 /* KMConvertCSVWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB49ED04293F461500C82CA2 /* KMConvertCSVWindowController.swift */; };
-		BB49ED09293F461500C82CA2 /* KMConvertCSVWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB49ED05293F461500C82CA2 /* KMConvertCSVWindowController.xib */; };
-		BB49ED0A293F461500C82CA2 /* KMConvertCSVWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB49ED05293F461500C82CA2 /* KMConvertCSVWindowController.xib */; };
-		BB49ED0B293F461500C82CA2 /* KMConvertCSVWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB49ED05293F461500C82CA2 /* KMConvertCSVWindowController.xib */; };
-		BB49ED0E293F462E00C82CA2 /* KMConvertImageWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB49ED0C293F462E00C82CA2 /* KMConvertImageWindowController.swift */; };
-		BB49ED0F293F462E00C82CA2 /* KMConvertImageWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB49ED0C293F462E00C82CA2 /* KMConvertImageWindowController.swift */; };
-		BB49ED10293F462E00C82CA2 /* KMConvertImageWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB49ED0C293F462E00C82CA2 /* KMConvertImageWindowController.swift */; };
-		BB49ED11293F462E00C82CA2 /* KMConvertImageWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB49ED0D293F462E00C82CA2 /* KMConvertImageWindowController.xib */; };
-		BB49ED12293F462E00C82CA2 /* KMConvertImageWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB49ED0D293F462E00C82CA2 /* KMConvertImageWindowController.xib */; };
-		BB49ED13293F462E00C82CA2 /* KMConvertImageWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB49ED0D293F462E00C82CA2 /* KMConvertImageWindowController.xib */; };
 		BB49ED15293F489500C82CA2 /* KMConvertImageSettingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB49ED14293F489500C82CA2 /* KMConvertImageSettingView.swift */; };
 		BB49ED16293F489500C82CA2 /* KMConvertImageSettingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB49ED14293F489500C82CA2 /* KMConvertImageSettingView.swift */; };
 		BB49ED17293F489500C82CA2 /* KMConvertImageSettingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB49ED14293F489500C82CA2 /* KMConvertImageSettingView.swift */; };
@@ -5904,6 +5894,14 @@
 /* End PBXCopyFilesBuildPhase section */
 
 /* Begin PBXFileReference section */
+		650FF6772CC897EB0019FAE1 /* KMNPDFPreView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMNPDFPreView.swift; sourceTree = "<group>"; };
+		6515590C2CCA6E2300C0F0D9 /* KMConvertBaseWindowController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KMConvertBaseWindowController.swift; sourceTree = "<group>"; };
+		6515590D2CCA6E2300C0F0D9 /* KMConvertBaseWindowController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = KMConvertBaseWindowController.xib; sourceTree = "<group>"; };
+		651559142CCA6E2F00C0F0D9 /* KMConvertWordWindowController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KMConvertWordWindowController.swift; sourceTree = "<group>"; };
+		651559152CCA6E3000C0F0D9 /* KMConvertImageWindowController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KMConvertImageWindowController.swift; sourceTree = "<group>"; };
+		651559162CCA6E3000C0F0D9 /* KMConvertExcelWindowController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KMConvertExcelWindowController.swift; sourceTree = "<group>"; };
+		651559172CCA6E3000C0F0D9 /* KMConvertPPTsWindowController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KMConvertPPTsWindowController.swift; sourceTree = "<group>"; };
+		651559182CCA6E3000C0F0D9 /* KMConvertCSVWindowController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KMConvertCSVWindowController.swift; sourceTree = "<group>"; };
 		652E953C2C6670CE0061FA40 /* KMFreehandAnnotationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMFreehandAnnotationController.swift; sourceTree = "<group>"; };
 		652E95412C6913C20061FA40 /* KMLineAndBorderItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMLineAndBorderItemView.swift; sourceTree = "<group>"; };
 		652E95512C6914770061FA40 /* KMLineAndBorderItemView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMLineAndBorderItemView.xib; sourceTree = "<group>"; };
@@ -7276,8 +7274,6 @@
 		BB3D97112B301CF1007094C8 /* KMRedactPDFView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMRedactPDFView.swift; sourceTree = "<group>"; };
 		BB3D97152B3023C5007094C8 /* KMCustomButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMCustomButton.swift; sourceTree = "<group>"; };
 		BB3D97192B3060B5007094C8 /* KMPDFAnnotationRedactConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPDFAnnotationRedactConfig.swift; sourceTree = "<group>"; };
-		BB3EAEAB293E3D6000D92407 /* KMConvertBaseWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMConvertBaseWindowController.swift; sourceTree = "<group>"; };
-		BB3EAEAC293E3D6000D92407 /* KMConvertBaseWindowController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMConvertBaseWindowController.xib; sourceTree = "<group>"; };
 		BB403BA92B15CA6E00B3106D /* KMBatchConvertOperation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMBatchConvertOperation.swift; sourceTree = "<group>"; };
 		BB42A5D52B8ED77B0092C524 /* KMTabbingHintWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMTabbingHintWindowController.swift; sourceTree = "<group>"; };
 		BB42A5D72B8ED7960092C524 /* KMTabbingHintWindowController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = KMTabbingHintWindowController.xib; sourceTree = "<group>"; };
@@ -7288,20 +7284,10 @@
 		BB46CF4B2AFBB34800281EDF /* AutoSaveManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoSaveManager.swift; sourceTree = "<group>"; };
 		BB48F8702BE07DAA002DA996 /* KMMainModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMMainModel.swift; sourceTree = "<group>"; };
 		BB493F942B3E9805003E6175 /* KMBatchQuickActionManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMBatchQuickActionManager.swift; sourceTree = "<group>"; };
-		BB49ECDB293EED6100C82CA2 /* KMConvertWordWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMConvertWordWindowController.swift; sourceTree = "<group>"; };
-		BB49ECDC293EED6100C82CA2 /* KMConvertWordWindowController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMConvertWordWindowController.xib; sourceTree = "<group>"; };
 		BB49ECE4293EF54800C82CA2 /* KMCustomPDFView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMCustomPDFView.swift; sourceTree = "<group>"; };
 		BB49ECE8293F32A400C82CA2 /* KMConvertWordSettingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMConvertWordSettingView.swift; sourceTree = "<group>"; };
 		BB49ECEC293F3B0D00C82CA2 /* KMConvertOCRSettingItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMConvertOCRSettingItemView.swift; sourceTree = "<group>"; };
 		BB49ECF0293F40F500C82CA2 /* KMConvertPageRangeSettingItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMConvertPageRangeSettingItemView.swift; sourceTree = "<group>"; };
-		BB49ECF4293F44DC00C82CA2 /* KMConvertExcelWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMConvertExcelWindowController.swift; sourceTree = "<group>"; };
-		BB49ECF5293F44DC00C82CA2 /* KMConvertExcelWindowController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMConvertExcelWindowController.xib; sourceTree = "<group>"; };
-		BB49ECFC293F459500C82CA2 /* KMConvertPPTsWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMConvertPPTsWindowController.swift; sourceTree = "<group>"; };
-		BB49ECFD293F459500C82CA2 /* KMConvertPPTsWindowController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMConvertPPTsWindowController.xib; sourceTree = "<group>"; };
-		BB49ED04293F461500C82CA2 /* KMConvertCSVWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMConvertCSVWindowController.swift; sourceTree = "<group>"; };
-		BB49ED05293F461500C82CA2 /* KMConvertCSVWindowController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMConvertCSVWindowController.xib; sourceTree = "<group>"; };
-		BB49ED0C293F462E00C82CA2 /* KMConvertImageWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMConvertImageWindowController.swift; sourceTree = "<group>"; };
-		BB49ED0D293F462E00C82CA2 /* KMConvertImageWindowController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMConvertImageWindowController.xib; sourceTree = "<group>"; };
 		BB49ED14293F489500C82CA2 /* KMConvertImageSettingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMConvertImageSettingView.swift; sourceTree = "<group>"; };
 		BB49ED18293F4D4E00C82CA2 /* KMConvertCSVSettingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMConvertCSVSettingView.swift; sourceTree = "<group>"; };
 		BB49ED1C293F4FB200C82CA2 /* KMConvertPPTsSettingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMConvertPPTsSettingView.swift; sourceTree = "<group>"; };
@@ -8342,6 +8328,52 @@
 /* End PBXFrameworksBuildPhase section */
 
 /* Begin PBXGroup section */
+		650FF6732CC896D90019FAE1 /* PDFPreview */ = {
+			isa = PBXGroup;
+			children = (
+				650FF6772CC897EB0019FAE1 /* KMNPDFPreView.swift */,
+			);
+			path = PDFPreview;
+			sourceTree = "<group>";
+		};
+		651559072CCA6D0400C0F0D9 /* Convert */ = {
+			isa = PBXGroup;
+			children = (
+				6515590B2CCA6D5E00C0F0D9 /* Base */,
+				651559092CCA6D3F00C0F0D9 /* View */,
+				6515590A2CCA6D3F00C0F0D9 /* Window */,
+			);
+			path = Convert;
+			sourceTree = "<group>";
+		};
+		651559092CCA6D3F00C0F0D9 /* View */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			path = View;
+			sourceTree = "<group>";
+		};
+		6515590A2CCA6D3F00C0F0D9 /* Window */ = {
+			isa = PBXGroup;
+			children = (
+				651559182CCA6E3000C0F0D9 /* KMConvertCSVWindowController.swift */,
+				651559162CCA6E3000C0F0D9 /* KMConvertExcelWindowController.swift */,
+				651559152CCA6E3000C0F0D9 /* KMConvertImageWindowController.swift */,
+				651559172CCA6E3000C0F0D9 /* KMConvertPPTsWindowController.swift */,
+				651559142CCA6E2F00C0F0D9 /* KMConvertWordWindowController.swift */,
+			);
+			path = Window;
+			sourceTree = "<group>";
+		};
+		6515590B2CCA6D5E00C0F0D9 /* Base */ = {
+			isa = PBXGroup;
+			children = (
+				6515590C2CCA6E2300C0F0D9 /* KMConvertBaseWindowController.swift */,
+				6515590D2CCA6E2300C0F0D9 /* KMConvertBaseWindowController.xib */,
+			);
+			path = Base;
+			sourceTree = "<group>";
+		};
 		652E953A2C66707E0061FA40 /* Freehand */ = {
 			isa = PBXGroup;
 			children = (
@@ -12742,18 +12774,6 @@
 			isa = PBXGroup;
 			children = (
 				BB51073129A61ABA00978662 /* OC */,
-				BB3EAEAB293E3D6000D92407 /* KMConvertBaseWindowController.swift */,
-				BB3EAEAC293E3D6000D92407 /* KMConvertBaseWindowController.xib */,
-				BB49ECDB293EED6100C82CA2 /* KMConvertWordWindowController.swift */,
-				BB49ECDC293EED6100C82CA2 /* KMConvertWordWindowController.xib */,
-				BB49ECF4293F44DC00C82CA2 /* KMConvertExcelWindowController.swift */,
-				BB49ECF5293F44DC00C82CA2 /* KMConvertExcelWindowController.xib */,
-				BB49ECFC293F459500C82CA2 /* KMConvertPPTsWindowController.swift */,
-				BB49ECFD293F459500C82CA2 /* KMConvertPPTsWindowController.xib */,
-				BB49ED04293F461500C82CA2 /* KMConvertCSVWindowController.swift */,
-				BB49ED05293F461500C82CA2 /* KMConvertCSVWindowController.xib */,
-				BB49ED0C293F462E00C82CA2 /* KMConvertImageWindowController.swift */,
-				BB49ED0D293F462E00C82CA2 /* KMConvertImageWindowController.xib */,
 			);
 			path = Controller;
 			sourceTree = "<group>";
@@ -13042,6 +13062,7 @@
 		BB5A9D252CB651C900F64C1F /* KMClass */ = {
 			isa = PBXGroup;
 			children = (
+				651559072CCA6D0400C0F0D9 /* Convert */,
 				F39603E42CC62E55003C6F71 /* KMNPDFPageEdit */,
 				BB52F54C2CC1FA69007418DB /* KMPDFViewController */,
 				BBE7884A2CBD2450008086E2 /* ComponentLibraryDemo */,
@@ -15215,6 +15236,7 @@
 		F3D395632CBD2BE7000C6729 /* Tools */ = {
 			isa = PBXGroup;
 			children = (
+				650FF6732CC896D90019FAE1 /* PDFPreview */,
 				F3DB85E82CCA209600D0AFDE /* Base */,
 				BB4583C42CC91531005737F3 /* NSImage+Extension */,
 				F3A0F8522CC8F56400E7373F /* Tool */,
@@ -15569,7 +15591,6 @@
 				9F8810882B564E9700F69815 /* KMAnnotationButtonWidgetOptionsViewController.xib in Resources */,
 				AD3AAD4D2B0B7B9300DE5FE7 /* KMCompareTextView.xib in Resources */,
 				9FB220FA2B186C9800A5B208 /* KMAnnotationGeneralViewController.xib in Resources */,
-				BB49ED11293F462E00C82CA2 /* KMConvertImageWindowController.xib in Resources */,
 				BB5A9D362CB6520100F64C1F /* KMHomeOpenView.xib in Resources */,
 				AD1D481C2AFB6B96007AC1F0 /* KMMergeWindowController.xib in Resources */,
 				BB5DA54D2BCFF4B300849E86 /* KMPageEditPopViewController.xib in Resources */,
@@ -15701,7 +15722,6 @@
 				ADEC7A81299397F8009A8256 /* SF-Pro-Text-Regular.otf in Resources */,
 				BB4EEF3029763EE7003A3537 /* KMRedactBaseWindowController.xib in Resources */,
 				BB254D5A2B2A985A00C37B3B /* KMTTSWindowController.xib in Resources */,
-				BB3EAEB0293E3D6000D92407 /* KMConvertBaseWindowController.xib in Resources */,
 				BBE788992CBD2463008086E2 /* CheckBoxVC.xib in Resources */,
 				AD1CA4242A061D190070541F /* KMAnnotationScreenAuthorViewItem.xib in Resources */,
 				BBE788A22CBD2463008086E2 /* DropdownDemoVC.xib in Resources */,
@@ -15880,7 +15900,6 @@
 				BB2EDF73296ECE17003BCF58 /* KMPageEditThumbnailItem.xib in Resources */,
 				AD3AAD932B1034C000DE5FE7 /* KMHeaderFooterView.xib in Resources */,
 				9FD0FA4E29D43D6800F2AB0D /* KMDeviceBrowserWindowController.xib in Resources */,
-				BB49ED09293F461500C82CA2 /* KMConvertCSVWindowController.xib in Resources */,
 				9F1F82D5292F6D510092C4B4 /* KMPDFInsertPreviewViewController.xib in Resources */,
 				ADC63E4B2A49BEDD00854E02 /* KMSubscribeWaterMarkCollectionItem.xib in Resources */,
 				AD7D5C952B8F20FE006562CD /* synctex_parser_version.txt in Resources */,
@@ -15908,7 +15927,6 @@
 				BB1BFF752AEA0B38003EB179 /* KMBatchOperateLeftViewController.xib in Resources */,
 				9F0CB4A229683E2600007028 /* KMPropertiesPanelSizeSubVC.xib in Resources */,
 				ADDF833E2B391A5C00A81A4E /* KMPDFDigitalSignViewController.xib in Resources */,
-				BB49ECE0293EED6100C82CA2 /* KMConvertWordWindowController.xib in Resources */,
 				ADB2D6FD294882B70029D2B3 /* KMTextFieldStepperView.xib in Resources */,
 				BB69C95F299116FD0001A9B1 /* plaid.pdf in Resources */,
 				89D2D2FE294C806000BFF5FE /* KMPDFThumbnailItem.xib in Resources */,
@@ -15932,7 +15950,6 @@
 				BB4F7E912B0C80000077EC8C /* KMNoteColorCollectionViewItem.xib in Resources */,
 				ADF1569C29A63CBF001D1018 /* KMLightMember.xcassets in Resources */,
 				899700EB28F3E4D3009AF911 /* MainWindowController.xib in Resources */,
-				BB49ED01293F459500C82CA2 /* KMConvertPPTsWindowController.xib in Resources */,
 				9FF371C42C69A6BB005F9CC5 /* CAreaSettingWindowController.xib in Resources */,
 				ADD1B6AE2941E97F00C3FFF7 /* KMPrintWindowController.xib in Resources */,
 				BB1B0B0A2B4FC6E900889528 /* KMGuideInfoWindow.xib in Resources */,
@@ -16017,6 +16034,7 @@
 				AD3AAD452B0B7B7B00DE5FE7 /* KMCompareThumbView.xib in Resources */,
 				BBB789812BE8BF2300F7E09C /* AINewConfigWindowController.xib in Resources */,
 				BBB789BA2BE8BF2400F7E09C /* AIChatStringResultItem.xib in Resources */,
+				651559112CCA6E2400C0F0D9 /* KMConvertBaseWindowController.xib in Resources */,
 				ADFCEB482B4FBA440001EBAF /* RemoteConfigDefaults.plist in Resources */,
 				ADFA8F0D2B579957002595A4 /* KMSearchFindView.xib in Resources */,
 				BB6710612BC672260018CE54 /* KMSignatureWindowController.xib in Resources */,
@@ -16060,7 +16078,6 @@
 				BB52F5602CC1FC03007418DB /* KMLinkPageView.xib in Resources */,
 				89E4E6EF2963D1B7002DBA6F /* KMColorPickerViewController.xib in Resources */,
 				BB52F59A2CC245C8007418DB /* KMLinkPopupWebView.xib in Resources */,
-				BB49ECF9293F44DC00C82CA2 /* KMConvertExcelWindowController.xib in Resources */,
 				ADB2D6F2294741720029D2B3 /* KMPrintPaperSetView.xib in Resources */,
 				BB89723D294B3C840045787C /* KMWatermarkPropertyController.xib in Resources */,
 				BB52F5922CC245B3007418DB /* KMLinkPopupEmailView.xib in Resources */,
@@ -16258,7 +16275,6 @@
 				BB031B5B2C47BB080099F7AD /* KMUserFbHelpPopController.xib in Resources */,
 				ADE86AA92B031FFA00414DFA /* KMCompareView.xib in Resources */,
 				9FF94F1D29A770B500B1EF69 /* KMFillSignShapePanel.xib in Resources */,
-				BB49ECFA293F44DC00C82CA2 /* KMConvertExcelWindowController.xib in Resources */,
 				BB1B0AC32B4FC6E900889528 /* KMFunctionGuideWindowController.xib in Resources */,
 				89E4E7862967BF5A002DBA6F /* KMCustomizeStampViewController.xib in Resources */,
 				AD85D1BE2AF0D2DD000F4D28 /* KMHomeQuickToolsCollectionView.xib in Resources */,
@@ -16266,7 +16282,6 @@
 				BBA19F3729ADACC5001A285A /* signPicture_nor.pdf in Resources */,
 				BB8AA5402CC66E490084F183 /* PDFImages.xcassets in Resources */,
 				ADE3C1E829A5ABC200793B13 /* KMLoginWindowController.xib in Resources */,
-				BB49ED02293F459500C82CA2 /* KMConvertPPTsWindowController.xib in Resources */,
 				AD3AAD312B0B700500DE5FE7 /* KMCompareCoveringView.xib in Resources */,
 				BB072D622C05AC8F00779B45 /* KMToolbarConfigViewItem.xib in Resources */,
 				BBE788CA2CBD2463008086E2 /* ListVC.xib in Resources */,
@@ -16302,7 +16317,6 @@
 				AD1D480C2AFB18DA007AC1F0 /* KMCompressWIndowControllerNew.xib in Resources */,
 				AD1D48142AFB1912007AC1F0 /* KMCompressView.xib in Resources */,
 				89E4E77D2967B370002DBA6F /* KMDynamicStampViewController.xib in Resources */,
-				BB49ECE1293EED6100C82CA2 /* KMConvertWordWindowController.xib in Resources */,
 				BB1B0B0B2B4FC6E900889528 /* KMGuideInfoWindow.xib in Resources */,
 				AD867FAB29DFB78200F00440 /* KMAnnotationOutlineView.xib in Resources */,
 				BB99ACD3292E2AEF0048AFD9 /* KMMergeCollectionViewItem.xib in Resources */,
@@ -16623,6 +16637,7 @@
 				BB9007042B8DDCE400623B78 /* SyncPreferences.xib in Resources */,
 				9F1FE3F5293F4F0F00E952CA /* Info.plist in Resources */,
 				BB7648E929ECECBF00931039 /* Color.xcassets in Resources */,
+				651559122CCA6E2400C0F0D9 /* KMConvertBaseWindowController.xib in Resources */,
 				BB5F8A1D29BB15AD00365ADB /* KMEmailSubWindowController.xib in Resources */,
 				BBC348062955403D008D2CD1 /* KMWatermarkFilePropertyInfoController.xib in Resources */,
 				BB89725A294C559F0045787C /* KMWatermarkPropertyCreateController.xib in Resources */,
@@ -16639,10 +16654,8 @@
 				89E4E7422964160F002DBA6F /* KMAnnotationLinkViewController.xib in Resources */,
 				BBE7888E2CBD2463008086E2 /* TabbarDemoVC.xib in Resources */,
 				BB1E7F2D2B4FE2C6002D9785 /* GuideInfoImages.xcassets in Resources */,
-				BB49ED0A293F461500C82CA2 /* KMConvertCSVWindowController.xib in Resources */,
 				BBFE14D32BFD7FC300176992 /* KMCouponDueWindowController.xib in Resources */,
 				BBEC00B3295C2AF300A26C98 /* KMBatesPreviewController.xib in Resources */,
-				BB49ED12293F462E00C82CA2 /* KMConvertImageWindowController.xib in Resources */,
 				AD1CA4042A06040B0070541F /* KMAnnotationScreenCollectionView.xib in Resources */,
 				ADB5E5162A371131007110A8 /* KMSubscribeWaterMarkWindowController.xib in Resources */,
 				AD867FBC29DFBB3B00F00440 /* KMAnnotationOutlineSectionView.xib in Resources */,
@@ -16653,7 +16666,6 @@
 				89E9B3FA295BE2EC00AEFA61 /* KMEditPDFTextPropertyViewController.xib in Resources */,
 				9F853A032947137500DF644E /* default-icon.pdf in Resources */,
 				BB0FE0412B734DD1001E0F88 /* AITypeChooseView.xib in Resources */,
-				BB3EAEB1293E3D6000D92407 /* KMConvertBaseWindowController.xib in Resources */,
 				ADBC372E29CA951E00D93208 /* KMComparativeOutlineView.xib in Resources */,
 				654A5A852C89628A001FBD4B /* KMWatermarkAdjectivePropertyBaseController.xib in Resources */,
 				ADDF83752B391A5D00A81A4E /* CDSignatureDrawViewController.xib in Resources */,
@@ -16770,12 +16782,10 @@
 				AD1D480D2AFB18DA007AC1F0 /* KMCompressWIndowControllerNew.xib in Resources */,
 				AD85D1A92AF09864000F4D28 /* KMHomeQuickToolsWindowController.xib in Resources */,
 				BBE788DD2CBD2464008086E2 /* ControllerVC.xib in Resources */,
-				BB49ED03293F459500C82CA2 /* KMConvertPPTsWindowController.xib in Resources */,
 				BB2F9AA82AFC8D5A00F9DD93 /* KMProfileInfoWindowController.xib in Resources */,
 				BB89723F294B3C840045787C /* KMWatermarkPropertyController.xib in Resources */,
 				BBE7890A2CBD2464008086E2 /* NavigationDemoVC.xib in Resources */,
 				9FF371D32C69B8BC005F9CC5 /* CDistanceMeasureInfoWindowController.xib in Resources */,
-				BB49ECFB293F44DC00C82CA2 /* KMConvertExcelWindowController.xib in Resources */,
 				AD2D74B229F0CEB300EDC5E4 /* KMCancellationWindowController.xib in Resources */,
 				9F853A042947137500DF644E /* default-icon.pdf in Resources */,
 				ADE86AF42B0AF56C00414DFA /* KMCompareCoveringSettingView.xib in Resources */,
@@ -16975,7 +16985,6 @@
 				AD1FE81C2BD7C98300AA4A9B /* KMPDFMultiplePrintWindowController.xib in Resources */,
 				AD0FA50029A8DD8700EDEB50 /* KMRegisterSuccessView.xib in Resources */,
 				899700FB28F4051B009AF911 /* KMAnnotationViewController.xib in Resources */,
-				BB3EAEB2293E3D6000D92407 /* KMConvertBaseWindowController.xib in Resources */,
 				BBC821E52B0D9F72004B7E8E /* KMStampCreaterWindowController.xib in Resources */,
 				BB7F7C0229AA586900A3E4E7 /* signAdd.png in Resources */,
 				ADD1B6CD2942E85300C3FFF7 /* KMPrintBottomView.xib in Resources */,
@@ -17041,7 +17050,6 @@
 				BB8810992B4F7CD100AFA63E /* KMVerificationTrialViewController.xib in Resources */,
 				BB6EA2A52B70B8F2000D4490 /* KMConvertComparePayViewController.xib in Resources */,
 				BB6DD81129347F77001F0544 /* KMSecureEncryptWindowController.xib in Resources */,
-				BB49ECE2293EED6100C82CA2 /* KMConvertWordWindowController.xib in Resources */,
 				ADD1B6D129431D7100C3FFF7 /* KMPrintPreviewView.xib in Resources */,
 				BBD9223F2B50D6D600DB9585 /* rate_pic_star.pdf in Resources */,
 				BB1B0B062B4FC6E900889528 /* KMCustomColorGuideView.xib in Resources */,
@@ -17075,6 +17083,7 @@
 				658FDBB72C9D90CE00EFA72E /* KMNoteFilterStateCollevtionViewItem.xib in Resources */,
 				BB10FAF42AFE23BE00F18D65 /* LineInspector.xib in Resources */,
 				BB183DD62B4EAD5400F99C7E /* Ubuntu-Bold.ttf in Resources */,
+				651559132CCA6E2400C0F0D9 /* KMConvertBaseWindowController.xib in Resources */,
 				BBB789832BE8BF2300F7E09C /* AINewConfigWindowController.xib in Resources */,
 				BB7F7C0529AA586900A3E4E7 /* signAddBack.png in Resources */,
 				BB031B5C2C47BB080099F7AD /* KMUserFbHelpPopController.xib in Resources */,
@@ -17159,7 +17168,6 @@
 				BBADCF662AF3CB92004ECE0C /* KMWatermarkCollectionViewItem.xib in Resources */,
 				9F0CB49C29683E1000007028 /* KMPropertiesPanelTextSubVC.xib in Resources */,
 				AD3AAD182B0B5B2700DE5FE7 /* KMCompareContentWindowController.xib in Resources */,
-				BB49ED0B293F461500C82CA2 /* KMConvertCSVWindowController.xib in Resources */,
 				9FDCD8132B6C904900E22166 /* KMFormListMenuPopWindowController.xib in Resources */,
 				BB2E666429C885550000FEBC /* KMSignatureHelpViewController.xib in Resources */,
 				ADF1569929A62D31001D1018 /* KMLoginLeftImageView.xib in Resources */,
@@ -17307,7 +17315,6 @@
 				BBE788D72CBD2464008086E2 /* AlertControllerVC.xib in Resources */,
 				BB65A0842AF8FEA1003A27A0 /* KMBatchOperateRemoveHeaderFooterViewController.xib in Resources */,
 				BB8810632B4F74DD00AFA63E /* KMRepeatTrialAlertController.xib in Resources */,
-				BB49ED13293F462E00C82CA2 /* KMConvertImageWindowController.xib in Resources */,
 				BBB2A9A22CB65C8E0066560B /* KMURLCreatePDFWindowController.xib in Resources */,
 				ADE86A7D2B0221E100414DFA /* KMSecurityWindowController.xib in Resources */,
 				AD53AF952BF1BCA300DCFFFC /* KMLoadingView.xib in Resources */,
@@ -17732,9 +17739,9 @@
 				BB71853D2C2B0A7C00C1156B /* KMEditPDFToolbarView.swift in Sources */,
 				ADDEEA862AD7805200EF675D /* KMGeneralButton.swift in Sources */,
 				BB49ED19293F4D4E00C82CA2 /* KMConvertCSVSettingView.swift in Sources */,
+				650FF6782CC897EB0019FAE1 /* KMNPDFPreView.swift in Sources */,
 				AD9527BA295291F20039D2BC /* KMPrintPage.swift in Sources */,
 				89752E192941FD48003FF08E /* KMSearchCellView.swift in Sources */,
-				BB49ED0E293F462E00C82CA2 /* KMConvertImageWindowController.swift in Sources */,
 				ADE3C1C129A4C13700793B13 /* KMPrintAccessoryController_OC.m in Sources */,
 				BB183DE32B4EC0AF00F99C7E /* KMRepeatVerifyExpireController.m in Sources */,
 				8942F7F82926089200389627 /* KMSignatureViewController.swift in Sources */,
@@ -18025,7 +18032,6 @@
 				BB99ACCA292DEE6E0048AFD9 /* KMMergeTitleBar.swift in Sources */,
 				ADBC174F2A2991F700959CEE /* KMPurchaseManager.swift in Sources */,
 				BB67EE262B54FFEF00573BF0 /* ASINetworkQueue.m in Sources */,
-				BB49ECF6293F44DC00C82CA2 /* KMConvertExcelWindowController.swift in Sources */,
 				AD055E602B85E04C0035F824 /* KMTextWithIconCell.swift in Sources */,
 				BB8810D62B4F984000AFA63E /* JSONKit.m in Sources */,
 				BBC4F9F62AEB69940098A1A8 /* NSArray+Extension.swift in Sources */,
@@ -18058,7 +18064,6 @@
 				ADB2D6ED2947415E0029D2B3 /* KMPrintPaperSetView.swift in Sources */,
 				BB1B0A9D2B4FB88100889528 /* IAPProductsManager.m in Sources */,
 				BB147026299DC0D100784A6A /* OIDTokenRequest.m in Sources */,
-				BB3EAEAD293E3D6000D92407 /* KMConvertBaseWindowController.swift in Sources */,
 				BB2F61582966B69D001CB369 /* KMWatermarkPropertyHomeController.swift in Sources */,
 				ADDF83412B391A5C00A81A4E /* DSignatureConfigWindowController.swift in Sources */,
 				AD199DE72B230A9300D56FEE /* KMPrintMultipageView.swift in Sources */,
@@ -18219,7 +18224,6 @@
 				ADAFDA192AE8DD6600F084BC /* KMAdvertisementTableView.swift in Sources */,
 				AD867F9029D9554F00F00440 /* KMBOTAOutlineItem.swift in Sources */,
 				BB0A823229C00400002C5C1B /* KMCommonEnum.swift in Sources */,
-				BB49ED06293F461500C82CA2 /* KMConvertCSVWindowController.swift in Sources */,
 				AD88109229A7612000178CA1 /* KMRegisterModel.swift in Sources */,
 				BB2C846C2BAE716600AF6142 /* KMBotaTableRowView.swift in Sources */,
 				BB1BFF812AEA139F003EB179 /* KMLongerButton.swift in Sources */,
@@ -18341,6 +18345,7 @@
 				BB5A9D392CB6520100F64C1F /* KMHomeOpenView.swift in Sources */,
 				ADDF83652B391A5C00A81A4E /* DSignatureFromFileViewController.swift in Sources */,
 				AD1FE8292BD7C98300AA4A9B /* KMMaskView.m in Sources */,
+				651559222CCA6E3100C0F0D9 /* KMConvertPPTsWindowController.swift in Sources */,
 				BBB7B48D2A0384E100B58A5A /* NSCollectionViewItem+KMExtension.swift in Sources */,
 				F3732323292DFFFE0013862C /* CPDFListView+Extension.m in Sources */,
 				BB4EEF4C2976544F003A3537 /* KMRedactAligementView.swift in Sources */,
@@ -18351,9 +18356,10 @@
 				9F0CB48729683DC400007028 /* KMPropertiesPanelPresetColorSubVC.swift in Sources */,
 				9FB220DF2B10850400A5B208 /* KMAnnotationStampViewController.swift in Sources */,
 				9F1FE50229406E4700E952CA /* CTTabStripModelOrderController.m in Sources */,
-				BB49ECFE293F459500C82CA2 /* KMConvertPPTsWindowController.swift in Sources */,
 				BB9E2F732A495BCD000DC68D /* KMConvertSettingLimitTipView.swift in Sources */,
+				651559192CCA6E3100C0F0D9 /* KMConvertWordWindowController.swift in Sources */,
 				9F1F82E32934D5240092C4B4 /* KMHomeExtractActionViewController.swift in Sources */,
+				6515590E2CCA6E2400C0F0D9 /* KMConvertBaseWindowController.swift in Sources */,
 				89D2D2C5294972B900BFF5FE /* KMFormCellView.swift in Sources */,
 				AD7D5CA92B906E36006562CD /* CPDFListView+Sync.swift in Sources */,
 				BB6BA4C42B0B4A0F00462CAE /* KMLeftSideEmptyFileViewController.swift in Sources */,
@@ -18435,6 +18441,7 @@
 				BB897251294C3F660045787C /* KMMenuTableView.swift in Sources */,
 				BB9695B229BDA46500FD68D3 /* SKLocalization.m in Sources */,
 				9F0CB4ED298655A800007028 /* KMDesignToken+PaddingLeft.swift in Sources */,
+				6515591C2CCA6E3100C0F0D9 /* KMConvertImageWindowController.swift in Sources */,
 				ADFCEB712B4FC1410001EBAF /* KMAdsManager.swift in Sources */,
 				ADDF83A12B391A5D00A81A4E /* DSignatureFileListViewController.swift in Sources */,
 				9F1FE49C29406E4700E952CA /* HoverCloseButton.m in Sources */,
@@ -18535,7 +18542,6 @@
 				BB8F4576295AFA2D0037EA22 /* KMHeaderFooterAdjectiveInfoBaseView.swift in Sources */,
 				9F0CB4E12986556400007028 /* KMDesignToken+PaddingTop.swift in Sources */,
 				BB3D97162B3023C5007094C8 /* KMCustomButton.swift in Sources */,
-				BB49ECDD293EED6100C82CA2 /* KMConvertWordWindowController.swift in Sources */,
 				BBC4F9FA2AEB9E200098A1A8 /* KMBatchTableCellView.swift in Sources */,
 				BBBAED0B2B57D55300266BD3 /* SKTransitionController.m in Sources */,
 				BB1969D72B2842AD00922736 /* KMSnapshotWindowController.swift in Sources */,
@@ -18603,6 +18609,7 @@
 				BB90E4F62AF3B71800B04B9F /* KMPDFWatermarkData.swift in Sources */,
 				BBFD2B142AEFAB8F0016C456 /* KMOperationQueue.swift in Sources */,
 				9F0CB4DD2986554D00007028 /* KMDesignToken+HorizontalPadding.swift in Sources */,
+				651559252CCA6E3100C0F0D9 /* KMConvertCSVWindowController.swift in Sources */,
 				ADDEEA622AD3A6E700EF675D /* KMPDFSignatureTextView.swift in Sources */,
 				BB146FED299DC0D100784A6A /* GTLRBatchResult.m in Sources */,
 				9F8539C629430AC400DF644E /* KMToolbarRightView.swift in Sources */,
@@ -18632,6 +18639,7 @@
 				BBE0BDF329A22EF300440583 /* KMMainViewController+MenuAction.swift in Sources */,
 				BBF170582AE296B90013CE02 /* KMView.swift in Sources */,
 				BB4EEF382976451E003A3537 /* KMRedactContentBaseView.swift in Sources */,
+				6515591F2CCA6E3100C0F0D9 /* KMConvertExcelWindowController.swift in Sources */,
 				BB24D4A72977BE6700041659 /* KMRedactConfirmWindowController.swift in Sources */,
 				AD055E9F2B8836AE0035F824 /* SKDocumentController.m in Sources */,
 				9F0CB4F1298655BC00007028 /* KMDesignToken+ItemSpacing.swift in Sources */,
@@ -18683,6 +18691,7 @@
 				BBA9222C2B4E96450061057A /* KMPurchaseCompareWindowController.m in Sources */,
 				BB8F4540295A98960037EA22 /* KMHeaderFooterPropertyController.swift in Sources */,
 				ADBC373D29CA9AE100D93208 /* KMComparativeManager.swift in Sources */,
+				6515591A2CCA6E3100C0F0D9 /* KMConvertWordWindowController.swift in Sources */,
 				BBD922302B50D60000DB9585 /* KMRateWindowController.swift in Sources */,
 				BB147009299DC0D100784A6A /* OIDRegistrationRequest.m in Sources */,
 				BBBB6CDB2AD15B900035AA66 /* CPDFFreeTextAnnotation+PDFListView.swift in Sources */,
@@ -18789,6 +18798,7 @@
 				BBFCCE092B56988C003742B3 /* KMPreferenceCommon.swift in Sources */,
 				BB7289E12B8838D8004B53B5 /* KMDataManager.swift in Sources */,
 				ADDF834E2B391A5C00A81A4E /* DSignatureCertifyDetailViewController.swift in Sources */,
+				651559262CCA6E3100C0F0D9 /* KMConvertCSVWindowController.swift in Sources */,
 				BBF729902B1960FF00576AC5 /* KMCompressOperationQueue.swift in Sources */,
 				BBF8A3FE2AE8B04100788BAC /* KMBatchOperateFile.swift in Sources */,
 				BB9599CC2B3184230062D346 /* KMRedactSelectPagesWindowController.swift in Sources */,
@@ -18998,6 +19008,7 @@
 				9F0CB4CA2986533F00007028 /* KMDesignToken+Sizing.swift in Sources */,
 				9F8539DF29470A0700DF644E /* KMTabStripView.swift in Sources */,
 				AD055ECA2B8848400035F824 /* NSMenu_SKExtensions.m in Sources */,
+				650FF6792CC897EB0019FAE1 /* KMNPDFPreView.swift in Sources */,
 				AD9527EF295578BD0039D2BC /* KMBaseTextFieldPresenter.swift in Sources */,
 				BB49ED1E293F4FB200C82CA2 /* KMConvertPPTsSettingView.swift in Sources */,
 				AD055E202B70B3840035F824 /* KMBookmark.swift in Sources */,
@@ -19008,6 +19019,7 @@
 				AD53AF902BF1BC9200DCFFFC /* KMLoadingView.swift in Sources */,
 				AD9527BF295294E20039D2BC /* KMPrintPageModel.swift in Sources */,
 				BB8F457B295AFB330037EA22 /* KMHeaderFooterFontInfoView.swift in Sources */,
+				6515591D2CCA6E3100C0F0D9 /* KMConvertImageWindowController.swift in Sources */,
 				BBB5C80829F4CEE40054F261 /* KMLinkAnnotationPropertyEmptyController.swift in Sources */,
 				BB52F5872CC24599007418DB /* KMLinkPopupPageView.swift in Sources */,
 				ADAC0DE22AC273D600FD4F52 /* KMOCToolClass.swift in Sources */,
@@ -19053,7 +19065,6 @@
 				AD055EB52B8841780035F824 /* SKSeparatorCell.m in Sources */,
 				BBA5429D29F13A140041BAD0 /* KMMemorandumPattern.swift in Sources */,
 				BB3A81AD2AC2A4E4006FC66C /* NSTextView+KMExtension.swift in Sources */,
-				BB49ED0F293F462E00C82CA2 /* KMConvertImageWindowController.swift in Sources */,
 				ADAFDA142AE8DD6600F084BC /* KMAdvertisementCollectionViewItem.swift in Sources */,
 				BBB789A92BE8BF2400F7E09C /* AIChatFileInfoItem.swift in Sources */,
 				BBC28F4B2B0F509B00D73206 /* KMAnimatedBorderlessWindow.swift in Sources */,
@@ -19193,6 +19204,7 @@
 				9F3D818F29A22AD90087B5AD /* Date+KMExtensions.swift in Sources */,
 				89E4E756296427E5002DBA6F /* NSImage_SKExtensions.m in Sources */,
 				AD1D481A2AFB6B96007AC1F0 /* KMMergeWindowController.swift in Sources */,
+				650FF6752CC897090019FAE1 /* NSWindowController+Extension.swift in Sources */,
 				BBE788972CBD2463008086E2 /* TabbarDemoVC.swift in Sources */,
 				BB897276294DC04F0045787C /* KMWatermartAdjectivePageRangeView.swift in Sources */,
 				9FB221002B18866E00A5B208 /* KMAnnotationSelfSignViewController.swift in Sources */,
@@ -19234,6 +19246,7 @@
 				9FE0BBE52B0EFBA300CD1CAC /* KMAnnotationFontWindowController.swift in Sources */,
 				65D684072C6A250C003A532E /* KMWavyLineAnnotationController.swift in Sources */,
 				9FDD0F8D2952FCE0000C4DAD /* KMGlobalParser.swift in Sources */,
+				651559202CCA6E3100C0F0D9 /* KMConvertExcelWindowController.swift in Sources */,
 				658FDBB32C9D90CE00EFA72E /* KMNoteFilterStateCollevtionViewItem.swift in Sources */,
 				ADE787AB2AA5A8D3002EC85A /* KMAccountExceptionView.swift in Sources */,
 				ADDEEA932AD796FF00EF675D /* KMSelfSignAnnotationFreeText.swift in Sources */,
@@ -19330,7 +19343,6 @@
 				AD3AAD822B0E004B00DE5FE7 /* KMPostionIndicateView.swift in Sources */,
 				ADD272D129B9CFD30032B5D6 /* KMLightNoNetworkView.swift in Sources */,
 				BB31DA5F2AFA1B03006D63CB /* KMFontWell.swift in Sources */,
-				BB49ECF7293F44DC00C82CA2 /* KMConvertExcelWindowController.swift in Sources */,
 				9F1FE4EB29406E4700E952CA /* NSBezierPath+MCAdditions.m in Sources */,
 				BBA922362B4E97540061057A /* KMPurchaseFirstTrialWindowController.swift in Sources */,
 				BBFE6E762930E53000142C01 /* KMMergePopoverViewController.swift in Sources */,
@@ -19374,7 +19386,6 @@
 				BB4A94A12B04D8EC00940F8B /* KMGOCRManager.m in Sources */,
 				BBB9B32F299A5D6D004F3235 /* GTMAppAuthFetcherAuthorization.m in Sources */,
 				BBFD225E2CBE16AB00DA4ABD /* KMHistoryEmptyView.swift in Sources */,
-				BB3EAEAE293E3D6000D92407 /* KMConvertBaseWindowController.swift in Sources */,
 				BB8810D72B4F984000AFA63E /* JSONKit.m in Sources */,
 				ADDF83242B391A5C00A81A4E /* CDSDrawView.m in Sources */,
 				ADFCEB722B4FC1410001EBAF /* KMAdsManager.swift in Sources */,
@@ -19468,6 +19479,7 @@
 				AD88108429A719D400178CA1 /* KMRegisterView.swift in Sources */,
 				BB31981F2AC57ACA00107371 /* CPDFPage+PDFListView.swift in Sources */,
 				BBFEF71C2B3A784200C28AC0 /* KMSystemEditMenu.swift in Sources */,
+				6515590F2CCA6E2400C0F0D9 /* KMConvertBaseWindowController.swift in Sources */,
 				AD3AAD5D2B0DA3D400DE5FE7 /* KMCompareTextViewItem.swift in Sources */,
 				AD3AAD242B0B6F9E00DE5FE7 /* KMCompareContentView.swift in Sources */,
 				BB10FAE62AFE039E00F18D65 /* KMPDFEditPageRangeWindowController.swift in Sources */,
@@ -19543,7 +19555,6 @@
 				AD1CA3F82A05FCB60070541F /* KMAnnotationScreenViewController.swift in Sources */,
 				BBFEF7302B3A794700C28AC0 /* KMSystemViewMenu.swift in Sources */,
 				9FE0BBEC2B0F242C00CD1CAC /* NSUserDefaults_KMExtension.swift in Sources */,
-				BB49ED07293F461500C82CA2 /* KMConvertCSVWindowController.swift in Sources */,
 				BB853C922AF8DCBF009C20C1 /* KMBatchOperateRemovePasswordViewController.swift in Sources */,
 				9FDD0F852952FC9C000C4DAD /* KMAliasLightParser.swift in Sources */,
 				ADBC2D38299F0A5A006280C8 /* KMPrintHelpViewController.swift in Sources */,
@@ -19669,7 +19680,6 @@
 				9F1FE50329406E4700E952CA /* CTTabStripModelOrderController.m in Sources */,
 				F34BF93629530708002C25A2 /* NSImage+PDFListView.m in Sources */,
 				65D6840D2C6A3669003A532E /* KMEraserAnnotationController.swift in Sources */,
-				BB49ECFF293F459500C82CA2 /* KMConvertPPTsWindowController.swift in Sources */,
 				9F1F82EB2935D02E0092C4B4 /* KMComboBox.swift in Sources */,
 				ADE86AC12B034C7100414DFA /* KMBackgroundWindowController.swift in Sources */,
 				AD9527EB2955520C0039D2BC /* KMBaseTextFieldModel.swift in Sources */,
@@ -19709,6 +19719,7 @@
 				BB67EE1E2B54FFEF00573BF0 /* ASIFormDataRequest.m in Sources */,
 				F337CC1D2CC6456D00D46AF4 /* KMNThumbnailBaseViewController.swift in Sources */,
 				ADE3C1AC29A4779E00793B13 /* KMPrintAccessoryController.swift in Sources */,
+				651559232CCA6E3100C0F0D9 /* KMConvertPPTsWindowController.swift in Sources */,
 				BB10FAF72AFE2C2900F18D65 /* KMNumberArrayFormatter.swift in Sources */,
 				BB1413692C69E6CA00BB8E35 /* KMURLConfigManager.swift in Sources */,
 				BBD7FE082A13241C00F96075 /* KMOutlineEditViewController.swift in Sources */,
@@ -19847,7 +19858,6 @@
 				AD1D48102AFB1907007AC1F0 /* KMCompressView.swift in Sources */,
 				BB146FCA299DC0D100784A6A /* GTMSessionFetcher.m in Sources */,
 				BBC70EB52AEA847500AC1585 /* KMToolbarCustomViewController.swift in Sources */,
-				BB49ECDE293EED6100C82CA2 /* KMConvertWordWindowController.swift in Sources */,
 				BB6B4C09292F53CE0071CA06 /* KMMergeFileModel.swift in Sources */,
 				AD0E8AB52A31B78900DBFD3C /* KMDMGPurchaseManager.swift in Sources */,
 				BBEC00B8295C2C1600A26C98 /* KMBatesPropertyHomeController.swift in Sources */,
@@ -19998,6 +20008,7 @@
 				BBEC00B1295C2AF300A26C98 /* KMBatesPreviewController.swift in Sources */,
 				BBD426812B4FCF1500AC8660 /* KMTextFieldCell.swift in Sources */,
 				BBB789C82BE8BF2400F7E09C /* AIRedoConfirmView.swift in Sources */,
+				651559272CCA6E3100C0F0D9 /* KMConvertCSVWindowController.swift in Sources */,
 				BB897260294C5DDA0045787C /* KMWatermarkPropertyInfoController.swift in Sources */,
 				BB0A55162A3052F800B6E84B /* KMCustomTextField.swift in Sources */,
 				BB8F4562295AA39F0037EA22 /* KMHeaderFooterModel.swift in Sources */,
@@ -20070,6 +20081,7 @@
 				BBA19F4529ADE6A3001A285A /* KMBookMarkRowView.swift in Sources */,
 				BBE789192CBD2464008086E2 /* ListVC.swift in Sources */,
 				9FDD0FAC29534FCC000C4DAD /* KMAliasLight.swift in Sources */,
+				651559242CCA6E3100C0F0D9 /* KMConvertPPTsWindowController.swift in Sources */,
 				BBF811E22B07178F0074874F /* KMExtractImageWindowController.swift in Sources */,
 				BBEFD01A2AF9BD24003FABD8 /* KMDataVersionManager.swift in Sources */,
 				BBF38A64294F53FD0086D025 /* KMWatermarkFileView.swift in Sources */,
@@ -20270,6 +20282,7 @@
 				9FDD0F8A2952FCC6000C4DAD /* KMCompLightParser.swift in Sources */,
 				9FA607DB28F8227500B46586 /* KMBox.swift in Sources */,
 				ADDEEA9C2AD7BB2D00EF675D /* KMAnnotationPropertiesColorManager.swift in Sources */,
+				6515591B2CCA6E3100C0F0D9 /* KMConvertWordWindowController.swift in Sources */,
 				BB03D6962B021124008C9976 /* NSSegmentedControl+KMExtension.swift in Sources */,
 				89D2D2E4294C452B00BFF5FE /* KMPDFThumbnailView.swift in Sources */,
 				ADAFD9F02AE616B100F084BC /* FocusAwareSecureTextField.swift in Sources */,
@@ -20350,13 +20363,13 @@
 				ADE86AB02B03438400414DFA /* KMWatermarkWindowController.swift in Sources */,
 				AD199DF12B23121000D56FEE /* KMPrintPamphletView.swift in Sources */,
 				AD0FA4F229A8580D00EDEB50 /* KMComparativeTableView.swift in Sources */,
-				BB49ED10293F462E00C82CA2 /* KMConvertImageWindowController.swift in Sources */,
 				BBF38A60294F42FF0086D025 /* KMWatermarkAdjectiveStepper.swift in Sources */,
 				BB2F184C2A0C911B0003F65E /* KMBaseWindowController.swift in Sources */,
 				BB0FE05A2B734DD1001E0F88 /* KMAIRequestServerManager.swift in Sources */,
 				AD1D48112AFB1907007AC1F0 /* KMCompressView.swift in Sources */,
 				BBA93D2F29BEBAA60044E0DD /* KMPreferenceEnum.swift in Sources */,
 				BB89726B294DB41D0045787C /* KMWatermarkAdjectivePositionView.swift in Sources */,
+				650FF6762CC8970A0019FAE1 /* NSWindowController+Extension.swift in Sources */,
 				BB3D971C2B3060B5007094C8 /* KMPDFAnnotationRedactConfig.swift in Sources */,
 				BBA19F4929AE27DB001A285A /* KMAnnotationTableRowView.swift in Sources */,
 				BB147031299DC0D200784A6A /* OIDTokenUtilities.m in Sources */,
@@ -20421,6 +20434,7 @@
 				9F0CB52F298656D900007028 /* KMDesignToken+BorderWidthRight.swift in Sources */,
 				9FF371D72C69B8CA005F9CC5 /* CAreaMeasureInfoWindowController.swift in Sources */,
 				ADDEEA602AD39DC500EF675D /* KMSignatureManager.swift in Sources */,
+				651559212CCA6E3100C0F0D9 /* KMConvertExcelWindowController.swift in Sources */,
 				BBBE208D2B21649100509C4E /* KMPDFEditWindowController.swift in Sources */,
 				F30B22872CB8D9630041002E /* KMNQuickToolCollectionViewItem.swift in Sources */,
 				BBA8B7B1293600D70097D183 /* KMPasswordInputWindow.swift in Sources */,
@@ -20695,12 +20709,12 @@
 				BB981E542AD4F638001988CA /* KMCoverButton.swift in Sources */,
 				AD1FE8282BD7C98300AA4A9B /* KMBookletPDFView.m in Sources */,
 				AD1D48502AFB8506007AC1F0 /* KMMergeTableViewCell.swift in Sources */,
-				BB49ECF8293F44DC00C82CA2 /* KMConvertExcelWindowController.swift in Sources */,
 				9FBC48BA299B44C600CA39D7 /* KMSecondaryViewController.m in Sources */,
 				BB0FE0542B734DD1001E0F88 /* AIUserInfoController.swift in Sources */,
 				AD1CA3F92A05FCB60070541F /* KMAnnotationScreenViewController.swift in Sources */,
 				BBBAECFE2B57713F00266BD3 /* KMTransitionInfo.swift in Sources */,
 				9F1FE4EC29406E4700E952CA /* NSBezierPath+MCAdditions.m in Sources */,
+				650FF67A2CC897EB0019FAE1 /* KMNPDFPreView.swift in Sources */,
 				BB93C3182B9EFC9800A926E6 /* AITranslateTipWindowController.swift in Sources */,
 				BB1B0AFA2B4FC6E900889528 /* KMOpenFileFunctionView.swift in Sources */,
 				9F5664892988B16F00020985 /* KMTextfieldVC.swift in Sources */,
@@ -20737,7 +20751,6 @@
 				BB52F5902CC245AD007418DB /* KMLinkPopupEmailView.swift in Sources */,
 				9F3D819529A33A290087B5AD /* KMDesignDropdown.swift in Sources */,
 				ADB2D6EF2947415E0029D2B3 /* KMPrintPaperSetView.swift in Sources */,
-				BB3EAEAF293E3D6000D92407 /* KMConvertBaseWindowController.swift in Sources */,
 				BB7FF5092A60E84400901C2D /* KMEnumExtensions.swift in Sources */,
 				9F1FE4A729406E4700E952CA /* CTToolbarView.m in Sources */,
 				ADDF83AC2B391A5D00A81A4E /* DSignatureModel.swift in Sources */,
@@ -20857,7 +20870,6 @@
 				BBB3FF9A2B567D0300145C4A /* KMApplication.swift in Sources */,
 				9FDD0F862952FC9C000C4DAD /* KMAliasLightParser.swift in Sources */,
 				BB3A669C2B07520800575343 /* KMCustomOutlineView.swift in Sources */,
-				BB49ED08293F461500C82CA2 /* KMConvertCSVWindowController.swift in Sources */,
 				BB27BF3E2B33E85200A0BAAE /* CPDFView+KMExtension.swift in Sources */,
 				BBDE52BD2BF3676C000545B2 /* KMPresentTableViewCell.swift in Sources */,
 				ADB2D6E8294740F30029D2B3 /* KMPrintPaperSetWindowController.swift in Sources */,
@@ -20894,6 +20906,7 @@
 				BB88E43D294023CB002B3655 /* KMDocumentModel.swift in Sources */,
 				BB1B0ADF2B4FC6E900889528 /* KMOpenFileGuidePanel.swift in Sources */,
 				BB52F5532CC1FAB2007418DB /* KMLinkViewController.swift in Sources */,
+				651559102CCA6E2400C0F0D9 /* KMConvertBaseWindowController.swift in Sources */,
 				9F0ACC002C85CB22009574D5 /* KMDMGProductsManager.swift in Sources */,
 				9FB221102B1AE35E00A5B208 /* NSBitmapImageRep_KMExtension.swift in Sources */,
 				BBF2455A2AE78D0300037D08 /* KMBatchOperateWindowController.swift in Sources */,
@@ -20973,6 +20986,7 @@
 				BB146FB6299DC0D100784A6A /* GTLRUtilities.m in Sources */,
 				9F8539CD29430BF300DF644E /* KMBrowserWindowController.swift in Sources */,
 				BB67EE1C2B54FFEF00573BF0 /* ASIHTTPRequest.m in Sources */,
+				6515591E2CCA6E3100C0F0D9 /* KMConvertImageWindowController.swift in Sources */,
 				BB2C84612BAE70C400AF6142 /* KMLeftSideViewSearchField.swift in Sources */,
 				BBE788AD2CBD2463008086E2 /* CheckBoxVC.swift in Sources */,
 				AD055E732B8732E00035F824 /* SKDictionaryFormatter.m in Sources */,
@@ -21018,7 +21032,6 @@
 				AD61B7AD2A9DC6F600D346C1 /* KMResourceDownloadManager.swift in Sources */,
 				BB6013862AD3A0E300A76FB2 /* CPDFTextWidgetAnnotation+PDFListView.swift in Sources */,
 				65FABB332C9AFB0C00AA92E5 /* KMSectionCellView.swift in Sources */,
-				BB49ED00293F459500C82CA2 /* KMConvertPPTsWindowController.swift in Sources */,
 				BB0542172965705D00F2665C /* KMCropTipView.swift in Sources */,
 				BB89726F294DB67D0045787C /* KMWatermarkAdjectiveBaseView.swift in Sources */,
 				BB67EE222B54FFEF00573BF0 /* ASIDataDecompressor.m in Sources */,
@@ -21177,7 +21190,6 @@
 				9F0CB5172986566D00007028 /* KMDesignToken+BorderRadiusTopLeft.swift in Sources */,
 				BBBB6CCC2AD109F30035AA66 /* CPDFAnnotation+PDFListView.swift in Sources */,
 				ADDEEA902AD78E4400EF675D /* KMSelfSignAnnotation.swift in Sources */,
-				BB49ECDF293EED6100C82CA2 /* KMConvertWordWindowController.swift in Sources */,
 				BBE0BDF529A22EF300440583 /* KMMainViewController+MenuAction.swift in Sources */,
 				AD88109429A7612000178CA1 /* KMRegisterModel.swift in Sources */,
 				ADDF83AF2B391A5D00A81A4E /* DSignatureConfig.swift in Sources */,