瀏覽代碼

【2025版】【转档】左边区域UI处理

tangchao 4 月之前
父節點
當前提交
13918c6e07

+ 19 - 11
PDF Office/PDF Master/KMClass/Convert/Base/KMConvertBaseWindowController.swift

@@ -52,6 +52,9 @@ class KMConvertBaseWindowController: KMNBaseWindowController {
     }
     }
     
     
     var progressController: SKProgressController?
     var progressController: SKProgressController?
+    
+    var pdfPreView: KMNPreView?
+    
     private var convert: KMPDFConvert?
     private var convert: KMPDFConvert?
     
     
     var limit = true
     var limit = true
@@ -92,6 +95,10 @@ class KMConvertBaseWindowController: KMNBaseWindowController {
         NotificationCenter.default.addObserver(self, selector: #selector(km_windowWillCloseNotifation), name: NSWindow.willCloseNotification, object: nil)
         NotificationCenter.default.addObserver(self, selector: #selector(km_windowWillCloseNotifation), name: NSWindow.willCloseNotification, object: nil)
 //        #endif
 //        #endif
         
         
+        let view = KMNPreView.createFromNib()
+        leftBox.contentView = view
+        self.pdfPreView = view
+        
         if (self.documentModel != nil) {
         if (self.documentModel != nil) {
 //            let document = CPDFDocument(url: self.documentModel!.documentURL)
 //            let document = CPDFDocument(url: self.documentModel!.documentURL)
 //            if (document!.isLocked) {
 //            if (document!.isLocked) {
@@ -99,7 +106,8 @@ class KMConvertBaseWindowController: KMNBaseWindowController {
 //            }
 //            }
 //            self.prePDFView?.document = document!
 //            self.prePDFView?.document = document!
             
             
-            self.prePDFView?.setFileUrl(self.documentModel!.documentURL, password: self.documentModel?.password)
+//            self.prePDFView?.setFileUrl(self.documentModel!.documentURL, password: self.documentModel?.password)
+            pdfPreView?.setFileUrl(self.documentModel!.documentURL, password: self.documentModel?.password)
 //            let number: Int = Int((self.prePDFView?.document.pageCount)!)
 //            let number: Int = Int((self.prePDFView?.document.pageCount)!)
 //            let string = "\(number)"
 //            let string = "\(number)"
 //            totalNumberLabel.stringValue = string
 //            totalNumberLabel.stringValue = string
@@ -124,6 +132,16 @@ class KMConvertBaseWindowController: KMNBaseWindowController {
         batchButton.action = #selector(batchButtonAction)
         batchButton.action = #selector(batchButtonAction)
         batchButton.isHidden = true
         batchButton.isHidden = true
         
         
+        self.prePDFView?.currentPageDidChanged = { [weak self] preView, idx in
+            guard let pdfView = preView?.pdfView else {
+                return
+            }
+            let currentIndex = pdfView.currentPageIndex
+            self?.currentPageIndex = currentIndex + 1
+            self?.numberTextField.stringValue = "\(currentIndex+1)"
+            self?.updateBackAndNextButtonState()
+        }
+        
         self.updateBackAndNextButtonState()
         self.updateBackAndNextButtonState()
     }
     }
     
     
@@ -954,16 +972,6 @@ extension KMConvertBaseWindowController: NSTextFieldDelegate {
     }
     }
 }
 }
 
 
-extension KMConvertBaseWindowController: CPDFViewDelegate {
-    func pdfViewCurrentPageDidChanged(_ pdfView: CPDFView!) {
-        let currentIndex = pdfView.currentPageIndex
-        currentPageIndex = currentIndex + 1
-        numberTextField.stringValue = "\(currentIndex+1)"
-        
-        self.updateBackAndNextButtonState()
-    }
-}
-
 let kKMConvertCountKey = "KMConvertCountKey"
 let kKMConvertCountKey = "KMConvertCountKey"
 let kKMConvertCountMax = 2
 let kKMConvertCountMax = 2
 extension KMConvertBaseWindowController {
 extension KMConvertBaseWindowController {

+ 20 - 2
PDF Office/PDF Master/KMClass/Tools/PDFPreview/KMNPDFPreView.swift

@@ -8,13 +8,23 @@
 import Cocoa
 import Cocoa
 
 
 class KMNPDFPreView: NSView {
 class KMNPDFPreView: NSView {
+    // MARK: - lazy
+    
     private lazy var contentBox_: NSBox = {
     private lazy var contentBox_: NSBox = {
         let box = NSBox()
         let box = NSBox()
+        box.boxType = .custom
+        box.titlePosition = .noTitle
+        box.contentViewMargins = .zero
+        box.borderWidth = 0
         return box
         return box
     }()
     }()
     
     
     lazy var pdfView: CPDFView = {
     lazy var pdfView: CPDFView = {
         let view = CPDFView()
         let view = CPDFView()
+        view.setDisplay(.singlePage)
+        view.layoutDocumentView()
+        view.autoScales = true
+        view.delegate = self
         return view
         return view
     }()
     }()
     
     
@@ -23,6 +33,8 @@ class KMNPDFPreView: NSView {
             self.needsLayout = true
             self.needsLayout = true
         }
         }
     }
     }
+    
+    var currentPageDidChanged: KMItemClickBlock<KMNPDFPreView>?
 
 
     deinit {
     deinit {
         KMPrint("KMNPDFPreView deinit.")
         KMPrint("KMNPDFPreView deinit.")
@@ -51,7 +63,8 @@ class KMNPDFPreView: NSView {
     }
     }
     
     
     func initDefaultValue() {
     func initDefaultValue() {
-        
+        self.contentBox_.borderWidth = 2
+        self.contentBox_.borderColor = .red
     }
     }
     
     
     func setFileUrl(_ fileUrl: URL, password: String?) {
     func setFileUrl(_ fileUrl: URL, password: String?) {
@@ -79,5 +92,10 @@ class KMNPDFPreView: NSView {
 
 
         // Drawing code here.
         // Drawing code here.
     }
     }
-    
+}
+
+extension KMNPDFPreView: CPDFViewDelegate {
+    func pdfViewCurrentPageDidChanged(_ pdfView: CPDFView!) {
+        self.currentPageDidChanged?(self, 1)
+    }
 }
 }

+ 76 - 0
PDF Office/PDF Master/KMClass/Tools/PDFPreview/KMNPreView.swift

@@ -0,0 +1,76 @@
+//
+//  KMNPreView.swift
+//  PDF Reader Pro
+//
+//  Created by User-Tangchao on 2024/10/25.
+//
+
+import Cocoa
+import KMComponentLibrary
+
+class KMNPreView: NSView, NibLoadable {
+    @IBOutlet weak var pdfPreView: KMNPDFPreView!
+    @IBOutlet weak var paginationBox: NSBox!
+    
+    @IBOutlet weak var pdfPreViewLeftConst: NSLayoutConstraint!
+    @IBOutlet weak var pdfPreViewTopConst: NSLayoutConstraint!
+    @IBOutlet weak var pdfPreViewRightConst: NSLayoutConstraint!
+    
+    @IBOutlet weak var paginationTopSpaceConst: NSLayoutConstraint!
+    @IBOutlet weak var paginationLeftConst: NSLayoutConstraint!
+    @IBOutlet weak var paginationRightConst: NSLayoutConstraint!
+    @IBOutlet weak var paginationBottomConst: NSLayoutConstraint!
+    
+    var contentInset: NSEdgeInsets = .init(top: 16, left: 16, bottom: 16, right: 16) {
+        didSet {
+            pdfPreViewLeftConst.constant = contentInset.left
+            pdfPreViewTopConst.constant = contentInset.top
+            pdfPreViewRightConst.constant = contentInset.right
+            
+            paginationBottomConst.constant = contentInset.bottom
+        }
+    }
+    
+    private var pagination_ = ComponentPagination()
+    
+    
+    deinit {
+        KMPrint("KMNPreView deinit.")
+    }
+    
+    override func draw(_ dirtyRect: NSRect) {
+        super.draw(dirtyRect)
+
+        // Drawing code here.
+    }
+    
+    convenience init(fileUrl: URL, password: String?) {
+        self.init()
+        
+        initSubviews()
+        initDefaultValue()
+        
+        setFileUrl(fileUrl, password: password)
+    }
+    
+    override func awakeFromNib() {
+        super.awakeFromNib()
+        
+        initSubviews()
+        initDefaultValue()
+    }
+    
+    func initSubviews() {
+        self.paginationBox.contentView = self.pagination_
+    }
+    
+    func initDefaultValue() {
+//        self.contentBox_.borderWidth = 2
+//        self.contentBox_.borderColor = .red
+    }
+    
+    func setFileUrl(_ fileUrl: URL, password: String?) {
+        pdfPreView.setFileUrl(fileUrl, password: password)
+    }
+    
+}

+ 68 - 0
PDF Office/PDF Master/KMClass/Tools/PDFPreview/KMNPreView.xib

@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21507" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21507"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner"/>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <customView id="c22-O7-iKe" customClass="KMNPreView" customModule="PDF_Reader_Pro" customModuleProvider="target">
+            <rect key="frame" x="0.0" y="0.0" width="232" height="338"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <subviews>
+                <box boxType="custom" cornerRadius="4" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="qv8-xQ-3Pe">
+                    <rect key="frame" x="0.0" y="0.0" width="232" height="338"/>
+                    <view key="contentView" id="vnz-fF-JHm">
+                        <rect key="frame" x="1" y="1" width="230" height="336"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <subviews>
+                            <customView translatesAutoresizingMaskIntoConstraints="NO" id="YyT-05-l2S" customClass="KMNPDFPreView" customModule="PDF_Reader_Pro" customModuleProvider="target">
+                                <rect key="frame" x="16" y="56" width="198" height="264"/>
+                            </customView>
+                            <box boxType="custom" cornerRadius="4" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="03j-wv-ih3">
+                                <rect key="frame" x="16" y="16" width="198" height="24"/>
+                                <view key="contentView" id="0qI-Yw-gGw">
+                                    <rect key="frame" x="1" y="1" width="196" height="22"/>
+                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                </view>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="24" id="WVg-Fo-vXy"/>
+                                </constraints>
+                            </box>
+                        </subviews>
+                        <constraints>
+                            <constraint firstItem="YyT-05-l2S" firstAttribute="leading" secondItem="vnz-fF-JHm" secondAttribute="leading" constant="16" id="3IH-SI-ioQ"/>
+                            <constraint firstAttribute="trailing" secondItem="03j-wv-ih3" secondAttribute="trailing" constant="16" id="3wb-mc-uWb"/>
+                            <constraint firstItem="03j-wv-ih3" firstAttribute="top" secondItem="YyT-05-l2S" secondAttribute="bottom" constant="16" id="HWk-GP-szf"/>
+                            <constraint firstItem="YyT-05-l2S" firstAttribute="top" secondItem="vnz-fF-JHm" secondAttribute="top" constant="16" id="JAp-9x-Lux"/>
+                            <constraint firstAttribute="trailing" secondItem="YyT-05-l2S" secondAttribute="trailing" constant="16" id="MFJ-Qp-oht"/>
+                            <constraint firstAttribute="bottom" secondItem="03j-wv-ih3" secondAttribute="bottom" constant="16" id="WKp-WC-zIS"/>
+                            <constraint firstItem="03j-wv-ih3" firstAttribute="leading" secondItem="vnz-fF-JHm" secondAttribute="leading" constant="16" id="Xo2-Od-cUg"/>
+                        </constraints>
+                    </view>
+                </box>
+            </subviews>
+            <constraints>
+                <constraint firstAttribute="bottom" secondItem="qv8-xQ-3Pe" secondAttribute="bottom" id="3x4-YG-Okv"/>
+                <constraint firstAttribute="trailing" secondItem="qv8-xQ-3Pe" secondAttribute="trailing" id="Ehu-hh-uR4"/>
+                <constraint firstItem="qv8-xQ-3Pe" firstAttribute="top" secondItem="c22-O7-iKe" secondAttribute="top" id="Nke-GW-PQ0"/>
+                <constraint firstItem="qv8-xQ-3Pe" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" id="xv8-Bm-MXi"/>
+            </constraints>
+            <connections>
+                <outlet property="paginationBottomConst" destination="WKp-WC-zIS" id="aUA-HW-8By"/>
+                <outlet property="paginationBox" destination="03j-wv-ih3" id="Huy-ir-l8y"/>
+                <outlet property="paginationLeftConst" destination="Xo2-Od-cUg" id="jZC-Oq-827"/>
+                <outlet property="paginationRightConst" destination="3wb-mc-uWb" id="YRj-j3-LbZ"/>
+                <outlet property="paginationTopSpaceConst" destination="HWk-GP-szf" id="CkM-li-D4g"/>
+                <outlet property="pdfPreView" destination="YyT-05-l2S" id="2WL-Ya-eub"/>
+                <outlet property="pdfPreViewLeftConst" destination="3IH-SI-ioQ" id="8cb-yM-9Vc"/>
+                <outlet property="pdfPreViewRightConst" destination="MFJ-Qp-oht" id="gul-04-JmL"/>
+                <outlet property="pdfPreViewTopConst" destination="JAp-9x-Lux" id="CfK-QH-4Nh"/>
+            </connections>
+            <point key="canvasLocation" x="39" y="142"/>
+        </customView>
+    </objects>
+</document>

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

@@ -75,6 +75,12 @@
 		6554450E2C88483C00BD9010 /* KMDiscountToSaveWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6554450A2C88483C00BD9010 /* KMDiscountToSaveWindowController.m */; };
 		6554450E2C88483C00BD9010 /* KMDiscountToSaveWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6554450A2C88483C00BD9010 /* KMDiscountToSaveWindowController.m */; };
 		6554450F2C88483C00BD9010 /* KMDiscountToSaveWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6554450A2C88483C00BD9010 /* KMDiscountToSaveWindowController.m */; };
 		6554450F2C88483C00BD9010 /* KMDiscountToSaveWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6554450A2C88483C00BD9010 /* KMDiscountToSaveWindowController.m */; };
 		655445102C88483C00BD9010 /* KMDiscountToSaveWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6554450A2C88483C00BD9010 /* KMDiscountToSaveWindowController.m */; };
 		655445102C88483C00BD9010 /* KMDiscountToSaveWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6554450A2C88483C00BD9010 /* KMDiscountToSaveWindowController.m */; };
+		655B91B42CCB47420080AE6E /* KMNPreView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 655B91B32CCB47420080AE6E /* KMNPreView.swift */; };
+		655B91B52CCB47420080AE6E /* KMNPreView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 655B91B32CCB47420080AE6E /* KMNPreView.swift */; };
+		655B91B62CCB47420080AE6E /* KMNPreView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 655B91B32CCB47420080AE6E /* KMNPreView.swift */; };
+		655B91B92CCB47690080AE6E /* KMNPreView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 655B91B82CCB47690080AE6E /* KMNPreView.xib */; };
+		655B91BA2CCB47690080AE6E /* KMNPreView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 655B91B82CCB47690080AE6E /* KMNPreView.xib */; };
+		655B91BB2CCB47690080AE6E /* KMNPreView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 655B91B82CCB47690080AE6E /* KMNPreView.xib */; };
 		658FDBA92C9D4B3100EFA72E /* KMNoteReplyCellView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 658FDBA82C9D4B3100EFA72E /* KMNoteReplyCellView.swift */; };
 		658FDBA92C9D4B3100EFA72E /* KMNoteReplyCellView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 658FDBA82C9D4B3100EFA72E /* KMNoteReplyCellView.swift */; };
 		658FDBAA2C9D4B3100EFA72E /* KMNoteReplyCellView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 658FDBA82C9D4B3100EFA72E /* KMNoteReplyCellView.swift */; };
 		658FDBAA2C9D4B3100EFA72E /* KMNoteReplyCellView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 658FDBA82C9D4B3100EFA72E /* KMNoteReplyCellView.swift */; };
 		658FDBAB2C9D4B3100EFA72E /* KMNoteReplyCellView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 658FDBA82C9D4B3100EFA72E /* KMNoteReplyCellView.swift */; };
 		658FDBAB2C9D4B3100EFA72E /* KMNoteReplyCellView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 658FDBA82C9D4B3100EFA72E /* KMNoteReplyCellView.swift */; };
@@ -5915,6 +5921,8 @@
 		655445082C88483B00BD9010 /* KMDiscountToSaveWindowController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = KMDiscountToSaveWindowController.xib; sourceTree = "<group>"; };
 		655445082C88483B00BD9010 /* KMDiscountToSaveWindowController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = KMDiscountToSaveWindowController.xib; sourceTree = "<group>"; };
 		655445092C88483C00BD9010 /* KMDiscountToSaveWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMDiscountToSaveWindowController.h; sourceTree = "<group>"; };
 		655445092C88483C00BD9010 /* KMDiscountToSaveWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMDiscountToSaveWindowController.h; sourceTree = "<group>"; };
 		6554450A2C88483C00BD9010 /* KMDiscountToSaveWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMDiscountToSaveWindowController.m; sourceTree = "<group>"; };
 		6554450A2C88483C00BD9010 /* KMDiscountToSaveWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMDiscountToSaveWindowController.m; sourceTree = "<group>"; };
+		655B91B32CCB47420080AE6E /* KMNPreView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMNPreView.swift; sourceTree = "<group>"; };
+		655B91B82CCB47690080AE6E /* KMNPreView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMNPreView.xib; sourceTree = "<group>"; };
 		658FDBA82C9D4B3100EFA72E /* KMNoteReplyCellView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMNoteReplyCellView.swift; sourceTree = "<group>"; };
 		658FDBA82C9D4B3100EFA72E /* KMNoteReplyCellView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMNoteReplyCellView.swift; sourceTree = "<group>"; };
 		658FDBAC2C9D4B9600EFA72E /* KMNoteReplyCellView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMNoteReplyCellView.xib; sourceTree = "<group>"; };
 		658FDBAC2C9D4B9600EFA72E /* KMNoteReplyCellView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMNoteReplyCellView.xib; sourceTree = "<group>"; };
 		658FDBB02C9D90CE00EFA72E /* KMNoteFilterStateCollevtionViewItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMNoteFilterStateCollevtionViewItem.swift; sourceTree = "<group>"; };
 		658FDBB02C9D90CE00EFA72E /* KMNoteFilterStateCollevtionViewItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMNoteFilterStateCollevtionViewItem.swift; sourceTree = "<group>"; };
@@ -8332,6 +8340,8 @@
 			isa = PBXGroup;
 			isa = PBXGroup;
 			children = (
 			children = (
 				650FF6772CC897EB0019FAE1 /* KMNPDFPreView.swift */,
 				650FF6772CC897EB0019FAE1 /* KMNPDFPreView.swift */,
+				655B91B32CCB47420080AE6E /* KMNPreView.swift */,
+				655B91B82CCB47690080AE6E /* KMNPreView.xib */,
 			);
 			);
 			path = PDFPreview;
 			path = PDFPreview;
 			sourceTree = "<group>";
 			sourceTree = "<group>";
@@ -15752,6 +15762,7 @@
 				F3A0F85C2CC940DD00E7373F /* KMNPDFInsertBlankWindowController.xib in Resources */,
 				F3A0F85C2CC940DD00E7373F /* KMNPDFInsertBlankWindowController.xib in Resources */,
 				9FA607E128FD4C9F00B46586 /* KMHomePopViewController.xib in Resources */,
 				9FA607E128FD4C9F00B46586 /* KMHomePopViewController.xib in Resources */,
 				AD1FE81A2BD7C98300AA4A9B /* KMPDFMultiplePrintWindowController.xib in Resources */,
 				AD1FE81A2BD7C98300AA4A9B /* KMPDFMultiplePrintWindowController.xib in Resources */,
+				655B91B92CCB47690080AE6E /* KMNPreView.xib in Resources */,
 				9F0CB4B82977BC1000007028 /* KMPropertiesPanelPreviewSubVC.xib in Resources */,
 				9F0CB4B82977BC1000007028 /* KMPropertiesPanelPreviewSubVC.xib in Resources */,
 				AD7D5CDB2B957687006562CD /* KMBookmarkOutlinePageCellView.xib in Resources */,
 				AD7D5CDB2B957687006562CD /* KMBookmarkOutlinePageCellView.xib in Resources */,
 				ADE86A842B0222B300414DFA /* KMSecurityView.xib in Resources */,
 				ADE86A842B0222B300414DFA /* KMSecurityView.xib in Resources */,
@@ -16355,6 +16366,7 @@
 				BB183DDB2B4EBE1B00F99C7E /* KMTrialSuccessController.xib in Resources */,
 				BB183DDB2B4EBE1B00F99C7E /* KMTrialSuccessController.xib in Resources */,
 				9FF94F0D29A62B5000B1EF69 /* KMDesignSelect.xib in Resources */,
 				9FF94F0D29A62B5000B1EF69 /* KMDesignSelect.xib in Resources */,
 				AD1CA41D2A061CE10070541F /* KMAnnotationScreenTypeViewItem.xib in Resources */,
 				AD1CA41D2A061CE10070541F /* KMAnnotationScreenTypeViewItem.xib in Resources */,
+				655B91BA2CCB47690080AE6E /* KMNPreView.xib in Resources */,
 				89E4E7302963FBA2002DBA6F /* KMPropertiesViewPopController.xib in Resources */,
 				89E4E7302963FBA2002DBA6F /* KMPropertiesViewPopController.xib in Resources */,
 				ADE614B229779C6D00F62ED7 /* KMImageTitleButton.xib in Resources */,
 				ADE614B229779C6D00F62ED7 /* KMImageTitleButton.xib in Resources */,
 				9F221EDB29A9EC0900978A59 /* KMFillSignTextPanel.xib in Resources */,
 				9F221EDB29A9EC0900978A59 /* KMFillSignTextPanel.xib in Resources */,
@@ -17275,6 +17287,7 @@
 				BB183DD32B4EAD5400F99C7E /* Ubuntu-Medium.ttf in Resources */,
 				BB183DD32B4EAD5400F99C7E /* Ubuntu-Medium.ttf in Resources */,
 				ADE3C1B029A4779E00793B13 /* KMPrintAccessoryController.xib in Resources */,
 				ADE3C1B029A4779E00793B13 /* KMPrintAccessoryController.xib in Resources */,
 				89D2D300294C806000BFF5FE /* KMPDFThumbnailItem.xib in Resources */,
 				89D2D300294C806000BFF5FE /* KMPDFThumbnailItem.xib in Resources */,
+				655B91BB2CCB47690080AE6E /* KMNPreView.xib in Resources */,
 				BB2EDF75296ECE17003BCF58 /* KMPageEditThumbnailItem.xib in Resources */,
 				BB2EDF75296ECE17003BCF58 /* KMPageEditThumbnailItem.xib in Resources */,
 				BBB789982BE8BF2400F7E09C /* AIInfoInputView.xib in Resources */,
 				BBB789982BE8BF2400F7E09C /* AIInfoInputView.xib in Resources */,
 				AD867FAC29DFB78200F00440 /* KMAnnotationOutlineView.xib in Resources */,
 				AD867FAC29DFB78200F00440 /* KMAnnotationOutlineView.xib in Resources */,
@@ -17938,6 +17951,7 @@
 				BBCE57142A72713A00508EFC /* NSViewController+KMExtension.swift in Sources */,
 				BBCE57142A72713A00508EFC /* NSViewController+KMExtension.swift in Sources */,
 				8997011F28F41AB8009AF911 /* KMLeftSideViewController.swift in Sources */,
 				8997011F28F41AB8009AF911 /* KMLeftSideViewController.swift in Sources */,
 				ADFA8EFD2B5649AE002595A4 /* KMAutoFlowOptionsSheetController.swift in Sources */,
 				ADFA8EFD2B5649AE002595A4 /* KMAutoFlowOptionsSheetController.swift in Sources */,
+				655B91B42CCB47420080AE6E /* KMNPreView.swift in Sources */,
 				BB162E97295062CD0088E9D1 /* KMPageRangeTools.swift in Sources */,
 				BB162E97295062CD0088E9D1 /* KMPageRangeTools.swift in Sources */,
 				BB24FFDD2B28578C00A59054 /* KMTTSWindowController.swift in Sources */,
 				BB24FFDD2B28578C00A59054 /* KMTTSWindowController.swift in Sources */,
 				ADD1B6EC2946C04C00C3FFF7 /* KMPrintChoosePageSizePamphletView.swift in Sources */,
 				ADD1B6EC2946C04C00C3FFF7 /* KMPrintChoosePageSizePamphletView.swift in Sources */,
@@ -19006,6 +19020,7 @@
 				9F1FE4D029406E4700E952CA /* CTTabController.m in Sources */,
 				9F1FE4D029406E4700E952CA /* CTTabController.m in Sources */,
 				BBF729B42B19630500576AC5 /* KMAddBatesOperationQueue.swift in Sources */,
 				BBF729B42B19630500576AC5 /* KMAddBatesOperationQueue.swift in Sources */,
 				9F0CB4CA2986533F00007028 /* KMDesignToken+Sizing.swift in Sources */,
 				9F0CB4CA2986533F00007028 /* KMDesignToken+Sizing.swift in Sources */,
+				655B91B52CCB47420080AE6E /* KMNPreView.swift in Sources */,
 				9F8539DF29470A0700DF644E /* KMTabStripView.swift in Sources */,
 				9F8539DF29470A0700DF644E /* KMTabStripView.swift in Sources */,
 				AD055ECA2B8848400035F824 /* NSMenu_SKExtensions.m in Sources */,
 				AD055ECA2B8848400035F824 /* NSMenu_SKExtensions.m in Sources */,
 				650FF6792CC897EB0019FAE1 /* KMNPDFPreView.swift in Sources */,
 				650FF6792CC897EB0019FAE1 /* KMNPDFPreView.swift in Sources */,
@@ -21219,6 +21234,7 @@
 				9F1F82C5292F113A0092C4B4 /* KMHomeDragView.swift in Sources */,
 				9F1F82C5292F113A0092C4B4 /* KMHomeDragView.swift in Sources */,
 				BB853C712AF879C1009C20C1 /* KMBatchRemoveWatermarkOperation.swift in Sources */,
 				BB853C712AF879C1009C20C1 /* KMBatchRemoveWatermarkOperation.swift in Sources */,
 				ADDF83A02B391A5D00A81A4E /* CDSignatureDrawViewController.swift in Sources */,
 				ADDF83A02B391A5D00A81A4E /* CDSignatureDrawViewController.swift in Sources */,
+				655B91B62CCB47420080AE6E /* KMNPreView.swift in Sources */,
 				BB986AED2AD53AE800ADF172 /* KMInfoWindowController.swift in Sources */,
 				BB986AED2AD53AE800ADF172 /* KMInfoWindowController.swift in Sources */,
 				654A5A8E2C8AE200001FBD4B /* KMAnalytics+KMExtensions.swift in Sources */,
 				654A5A8E2C8AE200001FBD4B /* KMAnalytics+KMExtensions.swift in Sources */,
 				BB0A55122A302DB700B6E84B /* KMTextField.swift in Sources */,
 				BB0A55122A302DB700B6E84B /* KMTextField.swift in Sources */,