浏览代码

页面编辑-拆分设置窗口绘制

tangchao 2 年之前
父节点
当前提交
754e0bf5b1

+ 40 - 0
PDF Office/PDF Office.xcodeproj/project.pbxproj

@@ -1474,6 +1474,18 @@
 		BBD1F78B296FACA300343885 /* KMPageEditExtractSettingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBD1F78A296FACA300343885 /* KMPageEditExtractSettingView.swift */; };
 		BBD1F78C296FACA300343885 /* KMPageEditExtractSettingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBD1F78A296FACA300343885 /* KMPageEditExtractSettingView.swift */; };
 		BBD1F78D296FACA300343885 /* KMPageEditExtractSettingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBD1F78A296FACA300343885 /* KMPageEditExtractSettingView.swift */; };
+		BBD1F78F296FE6A500343885 /* KMPageEditSplitWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBD1F78E296FE6A500343885 /* KMPageEditSplitWindowController.swift */; };
+		BBD1F790296FE6A500343885 /* KMPageEditSplitWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBD1F78E296FE6A500343885 /* KMPageEditSplitWindowController.swift */; };
+		BBD1F791296FE6A500343885 /* KMPageEditSplitWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBD1F78E296FE6A500343885 /* KMPageEditSplitWindowController.swift */; };
+		BBD1F793296FE92500343885 /* KMPageEditSplitSettingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBD1F792296FE92500343885 /* KMPageEditSplitSettingView.swift */; };
+		BBD1F794296FE92500343885 /* KMPageEditSplitSettingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBD1F792296FE92500343885 /* KMPageEditSplitSettingView.swift */; };
+		BBD1F795296FE92500343885 /* KMPageEditSplitSettingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBD1F792296FE92500343885 /* KMPageEditSplitSettingView.swift */; };
+		BBD1F798296FF78C00343885 /* KMPageEditSettingBaseModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBD1F797296FF78C00343885 /* KMPageEditSettingBaseModel.swift */; };
+		BBD1F799296FF78C00343885 /* KMPageEditSettingBaseModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBD1F797296FF78C00343885 /* KMPageEditSettingBaseModel.swift */; };
+		BBD1F79A296FF78C00343885 /* KMPageEditSettingBaseModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBD1F797296FF78C00343885 /* KMPageEditSettingBaseModel.swift */; };
+		BBD1F79C296FF7A600343885 /* KMPageEditSplitSettingModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBD1F79B296FF7A600343885 /* KMPageEditSplitSettingModel.swift */; };
+		BBD1F79D296FF7A600343885 /* KMPageEditSplitSettingModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBD1F79B296FF7A600343885 /* KMPageEditSplitSettingModel.swift */; };
+		BBD1F79E296FF7A600343885 /* KMPageEditSplitSettingModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBD1F79B296FF7A600343885 /* KMPageEditSplitSettingModel.swift */; };
 		BBEC00A4295BD42D00A26C98 /* KMHeaderFooterPageInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBEC00A3295BD42D00A26C98 /* KMHeaderFooterPageInfoView.swift */; };
 		BBEC00A5295BD42D00A26C98 /* KMHeaderFooterPageInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBEC00A3295BD42D00A26C98 /* KMHeaderFooterPageInfoView.swift */; };
 		BBEC00A6295BD42D00A26C98 /* KMHeaderFooterPageInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBEC00A3295BD42D00A26C98 /* KMHeaderFooterPageInfoView.swift */; };
@@ -2414,6 +2426,10 @@
 		BBD1F782296F9DB500343885 /* KMPageEditExtractWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPageEditExtractWindowController.swift; sourceTree = "<group>"; };
 		BBD1F786296FAC7C00343885 /* KMPageEditSettingBaseView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPageEditSettingBaseView.swift; sourceTree = "<group>"; };
 		BBD1F78A296FACA300343885 /* KMPageEditExtractSettingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPageEditExtractSettingView.swift; sourceTree = "<group>"; };
+		BBD1F78E296FE6A500343885 /* KMPageEditSplitWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPageEditSplitWindowController.swift; sourceTree = "<group>"; };
+		BBD1F792296FE92500343885 /* KMPageEditSplitSettingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPageEditSplitSettingView.swift; sourceTree = "<group>"; };
+		BBD1F797296FF78C00343885 /* KMPageEditSettingBaseModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPageEditSettingBaseModel.swift; sourceTree = "<group>"; };
+		BBD1F79B296FF7A600343885 /* KMPageEditSplitSettingModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPageEditSplitSettingModel.swift; sourceTree = "<group>"; };
 		BBEC00A3295BD42D00A26C98 /* KMHeaderFooterPageInfoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMHeaderFooterPageInfoView.swift; sourceTree = "<group>"; };
 		BBEC00A7295BDECF00A26C98 /* KMHeaderFooterContentInfoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMHeaderFooterContentInfoView.swift; sourceTree = "<group>"; };
 		BBEC00AD295C2AF300A26C98 /* KMBatesPreviewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMBatesPreviewController.swift; sourceTree = "<group>"; };
@@ -3773,6 +3789,7 @@
 		BB1EC7FA2967B24100EC0BC3 /* PageEdit */ = {
 			isa = PBXGroup;
 			children = (
+				BBD1F796296FF76200343885 /* Model */,
 				BB2EDF63296ECE17003BCF58 /* View */,
 				BB2EDF52296E8140003BCF58 /* Base */,
 				BB2EDF49296E6373003BCF58 /* Window */,
@@ -3890,6 +3907,7 @@
 				BB2EDF4A296E63E5003BCF58 /* KMPageEditInsertCustomPageWindowController.swift */,
 				BB2EDF4B296E63E5003BCF58 /* KMPageEditInsertCustomPageWindowController.xib */,
 				BBD1F782296F9DB500343885 /* KMPageEditExtractWindowController.swift */,
+				BBD1F78E296FE6A500343885 /* KMPageEditSplitWindowController.swift */,
 			);
 			path = Window;
 			sourceTree = "<group>";
@@ -3901,6 +3919,7 @@
 				BBD1F77A296F9BE000343885 /* KMPageEditSettingBaseWindowController.swift */,
 				BBD1F77B296F9BE000343885 /* KMPageEditSettingBaseWindowController.xib */,
 				BBD1F786296FAC7C00343885 /* KMPageEditSettingBaseView.swift */,
+				BBD1F797296FF78C00343885 /* KMPageEditSettingBaseModel.swift */,
 			);
 			path = Base;
 			sourceTree = "<group>";
@@ -3915,6 +3934,7 @@
 				BB2EDF68296ECE17003BCF58 /* KMPageEditInsertPageSizeItemView.swift */,
 				BB2EDF69296ECE17003BCF58 /* KMPageEditThumbnailItem.swift */,
 				BBD1F78A296FACA300343885 /* KMPageEditExtractSettingView.swift */,
+				BBD1F792296FE92500343885 /* KMPageEditSplitSettingView.swift */,
 			);
 			path = View;
 			sourceTree = "<group>";
@@ -4427,6 +4447,14 @@
 			path = Tools;
 			sourceTree = "<group>";
 		};
+		BBD1F796296FF76200343885 /* Model */ = {
+			isa = PBXGroup;
+			children = (
+				BBD1F79B296FF7A600343885 /* KMPageEditSplitSettingModel.swift */,
+			);
+			path = Model;
+			sourceTree = "<group>";
+		};
 		BBEC00AB295C2AB500A26C98 /* Bates */ = {
 			isa = PBXGroup;
 			children = (
@@ -5681,6 +5709,7 @@
 				ADCB98E12924776F00B51A03 /* KMBatchProcessingSizeTableCell.swift in Sources */,
 				F3599222292CA27B000D25DE /* CPDFListViewRuntime.m in Sources */,
 				AD4B454D294072B90076FA14 /* KMOCRWindowController.swift in Sources */,
+				BBD1F78F296FE6A500343885 /* KMPageEditSplitWindowController.swift in Sources */,
 				9F1FE50529406E4700E952CA /* CTTabStripDragController.m in Sources */,
 				9F1FE4CF29406E4700E952CA /* CTTabController.m in Sources */,
 				9F8539DE29470A0700DF644E /* KMTabStripView.swift in Sources */,
@@ -5754,6 +5783,7 @@
 				BBFE6E87293210AB00142C01 /* KMCompressCellView.swift in Sources */,
 				BB246DA428F6B492005E8F52 /* NSBezierPath_SKExtensions.m in Sources */,
 				89D9895E28FD21E6003A3E87 /* KMAnnotationCollectionView.swift in Sources */,
+				BBD1F793296FE92500343885 /* KMPageEditSplitSettingView.swift in Sources */,
 				BB897241294C028A0045787C /* KMWatermarkAdjectiveSegementControl.swift in Sources */,
 				89E4E76129656A88002DBA6F /* KMAnnotationStampViewController.m in Sources */,
 				89E4E755296427E5002DBA6F /* NSImage_SKExtensions.m in Sources */,
@@ -5776,6 +5806,7 @@
 				9F8DDF2629237910006CDC73 /* Array+KMExtensions.swift in Sources */,
 				BB8F4560295AA39F0037EA22 /* KMHeaderFooterModel.swift in Sources */,
 				BB86C21928F561C7005AD968 /* NSColor_SKExtensions.m in Sources */,
+				BBD1F798296FF78C00343885 /* KMPageEditSettingBaseModel.swift in Sources */,
 				9FAAA33E290FECA70046FFCE /* NSImage+QuickLook.swift in Sources */,
 				89E4E70E2963D62C002DBA6F /* KMAnnotationFontWindowController.m in Sources */,
 				F37322E4292DF9410013862C /* CPDFCircleAnnotation+PDFListView.m in Sources */,
@@ -5825,6 +5856,7 @@
 				F3732305292DF9410013862C /* CPDFSquareAnnotation+PDFListView.m in Sources */,
 				89D2D2BD29486D2400BFF5FE /* KMSignatureCellView.swift in Sources */,
 				9F1FE49629406E4700E952CA /* common.c in Sources */,
+				BBD1F79C296FF7A600343885 /* KMPageEditSplitSettingModel.swift in Sources */,
 				89E4E77329658E1D002DBA6F /* CStampObject.m in Sources */,
 				BB897265294C724D0045787C /* KMWatermarkAdjectiveOutsideView.swift in Sources */,
 				BBC2BCC6295DA8F30036B983 /* KMCropPreviewController.swift in Sources */,
@@ -6120,6 +6152,7 @@
 				9F8DDF2E2924B855006CDC73 /* KMPDFToolsViewController.swift in Sources */,
 				F34BF92229530320002C25A2 /* NSString+PDFListView.m in Sources */,
 				AD4B454E294072B90076FA14 /* KMOCRWindowController.swift in Sources */,
+				BBD1F790296FE6A500343885 /* KMPageEditSplitWindowController.swift in Sources */,
 				9F1FE50629406E4700E952CA /* CTTabStripDragController.m in Sources */,
 				9F1FE4D029406E4700E952CA /* CTTabController.m in Sources */,
 				9F8539DF29470A0700DF644E /* KMTabStripView.swift in Sources */,
@@ -6193,6 +6226,7 @@
 				F37322F7292DF9410013862C /* CSelfSignAnnotation.m in Sources */,
 				9F1FE4D929406E4700E952CA /* NSString+Utils.m in Sources */,
 				ADCB98CA2924741B00B51A03 /* KMBatchProcessingView.swift in Sources */,
+				BBD1F794296FE92500343885 /* KMPageEditSplitSettingView.swift in Sources */,
 				899700FF28F40710009AF911 /* KMBookMarkViewController.swift in Sources */,
 				89E4E76229656A88002DBA6F /* KMAnnotationStampViewController.m in Sources */,
 				89E4E756296427E5002DBA6F /* NSImage_SKExtensions.m in Sources */,
@@ -6215,6 +6249,7 @@
 				ADCB996F292C65EE00B51A03 /* KMOCROperation.m in Sources */,
 				BB8F4561295AA39F0037EA22 /* KMHeaderFooterModel.swift in Sources */,
 				9F1FE4C729406E4700E952CA /* CTUtil.m in Sources */,
+				BBD1F799296FF78C00343885 /* KMPageEditSettingBaseModel.swift in Sources */,
 				9FAAA33F290FECA70046FFCE /* NSImage+QuickLook.swift in Sources */,
 				89E4E70F2963D62C002DBA6F /* KMAnnotationFontWindowController.m in Sources */,
 				F3732324292DFFFE0013862C /* CPDFListView+Extension.m in Sources */,
@@ -6264,6 +6299,7 @@
 				BB3EAEAE293E3D6000D92407 /* KMConvertBaseWindowController.swift in Sources */,
 				9F1FE4A629406E4700E952CA /* CTToolbarView.m in Sources */,
 				BB162E9C295073B50088E9D1 /* KMWatermarkManager.swift in Sources */,
+				BBD1F79D296FF7A600343885 /* KMPageEditSplitSettingModel.swift in Sources */,
 				89E4E77429658E1D002DBA6F /* CStampObject.m in Sources */,
 				BB6DD81929348A00001F0544 /* KMSecureEncryptComboBoxCellView.swift in Sources */,
 				BBC2BCC7295DA8F30036B983 /* KMCropPreviewController.swift in Sources */,
@@ -6604,6 +6640,7 @@
 				BBC3483D2955A60B008D2CD1 /* KMBackgroundPropertyInfoController.swift in Sources */,
 				89D2D30A295A83B500BFF5FE /* KMEditPDFTextPropertyViewController.swift in Sources */,
 				BB897248294C19980045787C /* KMWatermarkAdjectiveListController.swift in Sources */,
+				BBD1F795296FE92500343885 /* KMPageEditSplitSettingView.swift in Sources */,
 				BBEC00DB295C39FD00A26C98 /* KMBatesPropertyInfoController.swift in Sources */,
 				9F1FE4AA29406E4700E952CA /* CTBrowserWindowController.m in Sources */,
 				BBC348042955403D008D2CD1 /* KMWatermarkFilePropertyInfoController.swift in Sources */,
@@ -6634,6 +6671,7 @@
 				F37322E9292DF9410013862C /* CPDFAnnotationModel.m in Sources */,
 				BB246DA628F6B492005E8F52 /* NSBezierPath_SKExtensions.m in Sources */,
 				BB99ACCC292DEE6E0048AFD9 /* KMMergeTitleBar.swift in Sources */,
+				BBD1F79E296FF7A600343885 /* KMPageEditSplitSettingModel.swift in Sources */,
 				BB897277294DC04F0045787C /* KMWatermartAdjectivePageRangeView.swift in Sources */,
 				BBEC00D3295C33D600A26C98 /* KMCreateBatesController.swift in Sources */,
 				89D9896028FD21E6003A3E87 /* KMAnnotationCollectionView.swift in Sources */,
@@ -6670,6 +6708,7 @@
 				F373228E292CCA650013862C /* CPDFListViewAnimatedBorderlessWindow.m in Sources */,
 				9F1FE4B029406E4700E952CA /* CTPresentationModeController.m in Sources */,
 				F37322E0292DF9410013862C /* CPDFFreeTextAnnotation+PDFListView.m in Sources */,
+				BBD1F791296FE6A500343885 /* KMPageEditSplitWindowController.swift in Sources */,
 				ADD1B6EA2946C02600C3FFF7 /* KMPrintChoosePageSizeMultipageView.swift in Sources */,
 				9F0CB4612966C9E200007028 /* KMFormPropertPanelViewController.swift in Sources */,
 				9F1FE4EF29406E4700E952CA /* ThrobberView.m in Sources */,
@@ -6747,6 +6786,7 @@
 				BB1EC80E2967DFE800EC0BC3 /* NSNumber_SKExtensions.m in Sources */,
 				899700EA28F3E4D3009AF911 /* MainWindowController.swift in Sources */,
 				ADCB9973292C65EE00B51A03 /* KMGOCROperation.m in Sources */,
+				BBD1F79A296FF78C00343885 /* KMPageEditSettingBaseModel.swift in Sources */,
 				BB8F4574295ACE380037EA22 /* KMHeaderFooterAdjectiveListCell.swift in Sources */,
 				ADD1B7082946CBB600C3FFF7 /* KMBaseTextFormatter.swift in Sources */,
 				89D2D2C329495D2100BFF5FE /* KMFormModel.swift in Sources */,

二进制
PDF Office/PDF Office.xcodeproj/project.xcworkspace/xcuserdata/kdanmobile.xcuserdatad/UserInterfaceState.xcuserstate


+ 55 - 0
PDF Office/PDF Office/Class/PDFTools/PageEdit/Base/KMPageEditSettingBaseModel.swift

@@ -0,0 +1,55 @@
+//
+//  KMPageEditSettingBaseModel.swift
+//  PDF Office
+//
+//  Created by tangchao on 2023/1/12.
+//
+
+import Cocoa
+
+class KMPageEditSettingBaseModel: NSObject {
+    var documentURL: URL!
+    var password: String = ""
+    
+    var fileName: String!
+    var pathExtension: String!
+    var outputFileName: String {
+        get {
+            if (fileName == nil || fileName.isEmpty) {
+                return ""
+            }
+            
+            var result: String = ""
+            let pathExtension = fileName.components(separatedBy: ".").last
+            let files = fileName.split(separator: ".")
+            for i in 0 ..< files.count-1 {
+                let file: String = String(files[i])
+                result.append(file)
+                if (i == files.count-2) {
+                    result.append(".")
+                }
+            }
+            
+            return fileName
+        }
+    }
+    
+    var pageCount: Int {
+        get {
+            if (documentURL == nil) {
+                return NSNotFound
+            }
+            documentURL.pathExtension
+            let document = CPDFDocument(url: documentURL)
+            if (document!.isLocked) {
+                if ((document?.unlock(withPassword: password))!) { /// 解锁成功
+                    return Int(document!.pageCount)
+                }
+                
+                return NSNotFound
+            }
+            
+            return Int(document!.pageCount)
+        }
+    }
+}

+ 16 - 0
PDF Office/PDF Office/Class/PDFTools/PageEdit/Base/KMPageEditSettingBaseWindowController.swift

@@ -18,8 +18,24 @@ class KMPageEditSettingBaseWindowController: NSWindowController {
     @IBOutlet weak var funcButton: NSButton!
     @IBOutlet weak var cancelButton: NSButton!
     
+    var settingView: KMPageEditSettingBaseView?
+    private var myModel: KMPageEditSettingBaseModel?
+    var model: KMPageEditSettingBaseModel? {
+        get {
+            return self.myModel
+        }
+        set {
+            self.myModel = newValue
+        }
+    }
+    
     var itemClick: KMPageEditSettingItemClick!
     
+    convenience init(_ model: KMPageEditSettingBaseModel?) {
+        self.init(windowNibName: "KMPageEditSettingBaseWindowController")
+        self.model = model
+    }
+    
     override func windowDidLoad() {
         super.windowDidLoad()
 

+ 305 - 0
PDF Office/PDF Office/Class/PDFTools/PageEdit/Base/KMPageEditSettingBaseWindowController.xib

@@ -171,5 +171,310 @@
             </connections>
             <point key="canvasLocation" x="-37" y="394"/>
         </customView>
+        <customView id="8HO-Hy-Nag" customClass="KMPageEditSplitSettingView" customModule="PDF_Office" customModuleProvider="target">
+            <rect key="frame" x="0.0" y="0.0" width="480" height="370"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <subviews>
+                <box boxType="custom" borderWidth="0.0" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="MwV-Fh-P6A">
+                    <rect key="frame" x="0.0" y="210" width="480" height="160"/>
+                    <view key="contentView" id="bqh-85-m52">
+                        <rect key="frame" x="0.0" y="0.0" width="480" height="160"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <subviews>
+                            <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="aRC-Og-uMz">
+                                <rect key="frame" x="14" y="127" width="40" height="17"/>
+                                <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="ELd-cx-Zg3">
+                                    <font key="font" metaFont="system" size="14"/>
+                                    <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                    <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                </textFieldCell>
+                            </textField>
+                            <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="wET-YY-DYd">
+                                <rect key="frame" x="14" y="90" width="65" height="18"/>
+                                <buttonCell key="cell" type="radio" title="Check" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="qEf-UO-0QI">
+                                    <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                    <font key="font" metaFont="system"/>
+                                </buttonCell>
+                            </button>
+                            <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1Xw-bg-2TE">
+                                <rect key="frame" x="14" y="55" width="65" height="18"/>
+                                <buttonCell key="cell" type="radio" title="Check" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="Ytk-Wn-VEL">
+                                    <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                    <font key="font" metaFont="system"/>
+                                </buttonCell>
+                            </button>
+                            <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="c7L-ui-7Lb">
+                                <rect key="frame" x="14" y="19" width="65" height="18"/>
+                                <buttonCell key="cell" type="radio" title="Check" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="gYc-Of-zbU">
+                                    <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                    <font key="font" metaFont="system"/>
+                                </buttonCell>
+                            </button>
+                            <customView translatesAutoresizingMaskIntoConstraints="NO" id="ZQL-FL-f9k">
+                                <rect key="frame" x="87" y="83" width="110" height="32"/>
+                                <subviews>
+                                    <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="9cn-T9-ymK">
+                                        <rect key="frame" x="14" y="8" width="68" height="16"/>
+                                        <textFieldCell key="cell" lineBreakMode="clipping" selectable="YES" editable="YES" title="Label" id="YP3-nS-wmI">
+                                            <font key="font" usesAppearanceFont="YES"/>
+                                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                        </textFieldCell>
+                                    </textField>
+                                    <stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="5dh-lc-jet">
+                                        <rect key="frame" x="94" y="2" width="19" height="28"/>
+                                        <stepperCell key="cell" continuous="YES" alignment="left" maxValue="100" id="eGu-bA-wuW"/>
+                                    </stepper>
+                                </subviews>
+                                <constraints>
+                                    <constraint firstAttribute="trailing" secondItem="5dh-lc-jet" secondAttribute="trailing" id="8VW-wz-zCe"/>
+                                    <constraint firstAttribute="width" constant="110" id="Gkr-KE-oMl"/>
+                                    <constraint firstItem="9cn-T9-ymK" firstAttribute="centerY" secondItem="ZQL-FL-f9k" secondAttribute="centerY" id="Q8O-0z-mbP"/>
+                                    <constraint firstItem="5dh-lc-jet" firstAttribute="centerY" secondItem="ZQL-FL-f9k" secondAttribute="centerY" id="U1M-Qc-tg2"/>
+                                    <constraint firstAttribute="height" constant="32" id="dhq-EQ-0Mv"/>
+                                    <constraint firstAttribute="trailing" secondItem="9cn-T9-ymK" secondAttribute="trailing" constant="30" id="hGG-vo-aig"/>
+                                    <constraint firstItem="9cn-T9-ymK" firstAttribute="leading" secondItem="ZQL-FL-f9k" secondAttribute="leading" constant="16" id="ll4-HY-oPA"/>
+                                </constraints>
+                            </customView>
+                            <customView translatesAutoresizingMaskIntoConstraints="NO" id="6Dh-GY-bzc">
+                                <rect key="frame" x="87" y="48" width="110" height="32"/>
+                                <subviews>
+                                    <stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ARp-F2-lcX">
+                                        <rect key="frame" x="94" y="2" width="19" height="28"/>
+                                        <stepperCell key="cell" continuous="YES" alignment="left" maxValue="100" id="VWD-uL-INN"/>
+                                    </stepper>
+                                    <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="RWl-fr-sY9">
+                                        <rect key="frame" x="14" y="8" width="68" height="16"/>
+                                        <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="EfU-VA-Ety">
+                                            <font key="font" metaFont="system"/>
+                                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                        </textFieldCell>
+                                    </textField>
+                                </subviews>
+                                <constraints>
+                                    <constraint firstAttribute="trailing" secondItem="ARp-F2-lcX" secondAttribute="trailing" id="6dC-ja-XWi"/>
+                                    <constraint firstItem="RWl-fr-sY9" firstAttribute="centerY" secondItem="6Dh-GY-bzc" secondAttribute="centerY" id="Ad5-oj-dbs"/>
+                                    <constraint firstAttribute="width" constant="110" id="DnU-Qy-z6M"/>
+                                    <constraint firstAttribute="trailing" secondItem="RWl-fr-sY9" secondAttribute="trailing" constant="30" id="XPk-hW-2r9"/>
+                                    <constraint firstItem="RWl-fr-sY9" firstAttribute="leading" secondItem="6Dh-GY-bzc" secondAttribute="leading" constant="16" id="gkQ-8O-dfB"/>
+                                    <constraint firstAttribute="height" constant="32" id="hzW-bd-uce"/>
+                                    <constraint firstItem="ARp-F2-lcX" firstAttribute="centerY" secondItem="6Dh-GY-bzc" secondAttribute="centerY" id="nSz-Ge-OGm"/>
+                                </constraints>
+                            </customView>
+                            <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="hu2-bV-yft">
+                                <rect key="frame" x="203" y="91" width="37" height="16"/>
+                                <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="GjV-IM-Z9j">
+                                    <font key="font" metaFont="system"/>
+                                    <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                    <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                </textFieldCell>
+                            </textField>
+                            <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="baP-W7-Evc">
+                                <rect key="frame" x="203" y="56" width="37" height="16"/>
+                                <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="E5I-FK-kGi">
+                                    <font key="font" metaFont="system"/>
+                                    <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                    <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                </textFieldCell>
+                            </textField>
+                            <comboBox verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="nTX-d3-Nl3">
+                                <rect key="frame" x="89" y="15" width="123" height="25"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" constant="120" id="Hk4-Ak-R8M"/>
+                                </constraints>
+                                <comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" numberOfVisibleItems="5" id="ykf-0B-vrC">
+                                    <font key="font" metaFont="system"/>
+                                    <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                    <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                    <objectValues>
+                                        <string>Item 1</string>
+                                        <string>Item 2</string>
+                                        <string>Item 3</string>
+                                    </objectValues>
+                                </comboBoxCell>
+                            </comboBox>
+                        </subviews>
+                        <constraints>
+                            <constraint firstItem="hu2-bV-yft" firstAttribute="leading" secondItem="ZQL-FL-f9k" secondAttribute="trailing" constant="8" id="3T8-nc-gw2"/>
+                            <constraint firstItem="c7L-ui-7Lb" firstAttribute="top" secondItem="1Xw-bg-2TE" secondAttribute="bottom" constant="20" id="DZQ-4o-que"/>
+                            <constraint firstItem="aRC-Og-uMz" firstAttribute="top" secondItem="bqh-85-m52" secondAttribute="top" constant="16" id="E7Y-ca-2rD"/>
+                            <constraint firstItem="baP-W7-Evc" firstAttribute="leading" secondItem="6Dh-GY-bzc" secondAttribute="trailing" constant="8" id="GZZ-8m-7ZD"/>
+                            <constraint firstItem="aRC-Og-uMz" firstAttribute="leading" secondItem="bqh-85-m52" secondAttribute="leading" constant="16" id="Jqp-1G-5Ci"/>
+                            <constraint firstItem="1Xw-bg-2TE" firstAttribute="top" secondItem="wET-YY-DYd" secondAttribute="bottom" constant="19" id="MQU-al-Jdn"/>
+                            <constraint firstItem="wET-YY-DYd" firstAttribute="top" secondItem="aRC-Og-uMz" secondAttribute="bottom" constant="20" id="MUT-wE-LKJ"/>
+                            <constraint firstItem="baP-W7-Evc" firstAttribute="centerY" secondItem="6Dh-GY-bzc" secondAttribute="centerY" id="ZPB-AG-As1"/>
+                            <constraint firstItem="c7L-ui-7Lb" firstAttribute="leading" secondItem="bqh-85-m52" secondAttribute="leading" constant="16" id="cCL-4Q-VbM"/>
+                            <constraint firstItem="nTX-d3-Nl3" firstAttribute="centerY" secondItem="c7L-ui-7Lb" secondAttribute="centerY" id="h6h-1a-SuX"/>
+                            <constraint firstItem="wET-YY-DYd" firstAttribute="leading" secondItem="bqh-85-m52" secondAttribute="leading" constant="16" id="hNR-nA-OC7"/>
+                            <constraint firstItem="hu2-bV-yft" firstAttribute="centerY" secondItem="ZQL-FL-f9k" secondAttribute="centerY" id="ktd-N1-WNJ"/>
+                            <constraint firstItem="ZQL-FL-f9k" firstAttribute="centerY" secondItem="wET-YY-DYd" secondAttribute="centerY" id="m7Q-Yp-quA"/>
+                            <constraint firstItem="ZQL-FL-f9k" firstAttribute="leading" secondItem="wET-YY-DYd" secondAttribute="trailing" constant="8" id="rLO-5i-rfe"/>
+                            <constraint firstItem="6Dh-GY-bzc" firstAttribute="leading" secondItem="1Xw-bg-2TE" secondAttribute="trailing" constant="8" id="sSd-mF-AHo"/>
+                            <constraint firstItem="nTX-d3-Nl3" firstAttribute="leading" secondItem="c7L-ui-7Lb" secondAttribute="trailing" constant="10" id="v7O-F9-8MI"/>
+                            <constraint firstItem="1Xw-bg-2TE" firstAttribute="leading" secondItem="bqh-85-m52" secondAttribute="leading" constant="16" id="wrd-5V-T4W"/>
+                            <constraint firstItem="6Dh-GY-bzc" firstAttribute="centerY" secondItem="1Xw-bg-2TE" secondAttribute="centerY" id="ywE-d4-JHZ"/>
+                        </constraints>
+                    </view>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="160" id="6Ic-4g-3nC"/>
+                    </constraints>
+                </box>
+                <box boxType="custom" borderWidth="0.0" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="VBO-Sp-SGn">
+                    <rect key="frame" x="0.0" y="30" width="480" height="180"/>
+                    <view key="contentView" id="zKz-Wc-K7q">
+                        <rect key="frame" x="0.0" y="0.0" width="480" height="180"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <subviews>
+                            <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="jHQ-JM-bgx">
+                                <rect key="frame" x="14" y="148" width="37" height="16"/>
+                                <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="Vzb-mF-8Pm">
+                                    <font key="font" usesAppearanceFont="YES"/>
+                                    <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                    <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                </textFieldCell>
+                            </textField>
+                            <customView translatesAutoresizingMaskIntoConstraints="NO" id="4Wl-y0-47A">
+                                <rect key="frame" x="16" y="114" width="346" height="32"/>
+                                <subviews>
+                                    <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="rBb-tH-78V">
+                                        <rect key="frame" x="14" y="8" width="318" height="16"/>
+                                        <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="rTF-JM-5FG">
+                                            <font key="font" usesAppearanceFont="YES"/>
+                                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                        </textFieldCell>
+                                    </textField>
+                                </subviews>
+                                <constraints>
+                                    <constraint firstItem="rBb-tH-78V" firstAttribute="centerY" secondItem="4Wl-y0-47A" secondAttribute="centerY" id="SWO-IF-Ihv"/>
+                                    <constraint firstAttribute="height" constant="32" id="bKx-FI-XfV"/>
+                                    <constraint firstAttribute="trailing" secondItem="rBb-tH-78V" secondAttribute="trailing" constant="16" id="gXt-59-p0H"/>
+                                    <constraint firstAttribute="width" constant="346" id="kjU-2r-xDp"/>
+                                    <constraint firstItem="rBb-tH-78V" firstAttribute="leading" secondItem="4Wl-y0-47A" secondAttribute="leading" constant="16" id="q85-cU-a71"/>
+                                </constraints>
+                            </customView>
+                            <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="a0r-63-2jU">
+                                <rect key="frame" x="14" y="87" width="65" height="18"/>
+                                <buttonCell key="cell" type="check" title="Check" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="aRB-8C-9A9">
+                                    <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                    <font key="font" metaFont="system"/>
+                                </buttonCell>
+                            </button>
+                            <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="fhq-6e-30z">
+                                <rect key="frame" x="14" y="51" width="65" height="18"/>
+                                <buttonCell key="cell" type="check" title="Check" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="snM-dt-ve4">
+                                    <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                    <font key="font" metaFont="system"/>
+                                </buttonCell>
+                            </button>
+                            <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="tx2-2Q-utf">
+                                <rect key="frame" x="14" y="15" width="65" height="18"/>
+                                <buttonCell key="cell" type="check" title="Check" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="UbX-QD-gHm">
+                                    <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                    <font key="font" metaFont="system"/>
+                                </buttonCell>
+                            </button>
+                            <customView translatesAutoresizingMaskIntoConstraints="NO" id="OLI-bg-hBY">
+                                <rect key="frame" x="98" y="44" width="110" height="32"/>
+                                <subviews>
+                                    <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="nPh-YU-WBb">
+                                        <rect key="frame" x="12" y="5" width="86" height="22"/>
+                                        <constraints>
+                                            <constraint firstAttribute="height" constant="22" id="3jx-cJ-BJ0"/>
+                                        </constraints>
+                                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" id="LyQ-nO-ugA">
+                                            <font key="font" usesAppearanceFont="YES"/>
+                                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                        </textFieldCell>
+                                    </textField>
+                                </subviews>
+                                <constraints>
+                                    <constraint firstItem="nPh-YU-WBb" firstAttribute="centerY" secondItem="OLI-bg-hBY" secondAttribute="centerY" id="UW5-bI-fum"/>
+                                    <constraint firstAttribute="trailing" secondItem="nPh-YU-WBb" secondAttribute="trailing" constant="12" id="cST-nu-KhD"/>
+                                    <constraint firstItem="nPh-YU-WBb" firstAttribute="leading" secondItem="OLI-bg-hBY" secondAttribute="leading" constant="12" id="dOF-KV-4Ql"/>
+                                    <constraint firstAttribute="height" constant="32" id="o7d-SC-ZcS"/>
+                                    <constraint firstAttribute="width" constant="110" id="oP0-Ff-56z"/>
+                                </constraints>
+                            </customView>
+                            <customView translatesAutoresizingMaskIntoConstraints="NO" id="sHS-HL-beY">
+                                <rect key="frame" x="98" y="8" width="110" height="32"/>
+                                <subviews>
+                                    <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="f5Q-Eu-B5p">
+                                        <rect key="frame" x="12" y="6" width="86" height="21"/>
+                                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" id="jmu-rU-q3D">
+                                            <font key="font" usesAppearanceFont="YES"/>
+                                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                        </textFieldCell>
+                                    </textField>
+                                </subviews>
+                                <constraints>
+                                    <constraint firstAttribute="width" constant="110" id="NBi-Ya-fn2"/>
+                                    <constraint firstAttribute="trailing" secondItem="f5Q-Eu-B5p" secondAttribute="trailing" constant="12" id="OGN-dL-6KG"/>
+                                    <constraint firstItem="f5Q-Eu-B5p" firstAttribute="leading" secondItem="sHS-HL-beY" secondAttribute="leading" constant="12" id="Orp-lM-8k6"/>
+                                    <constraint firstAttribute="height" constant="32" id="e21-z7-SjU"/>
+                                    <constraint firstItem="f5Q-Eu-B5p" firstAttribute="centerY" secondItem="sHS-HL-beY" secondAttribute="centerY" id="yVe-xv-BBC"/>
+                                </constraints>
+                            </customView>
+                        </subviews>
+                        <constraints>
+                            <constraint firstItem="4Wl-y0-47A" firstAttribute="leading" secondItem="zKz-Wc-K7q" secondAttribute="leading" constant="16" id="3Hr-7l-fq4"/>
+                            <constraint firstItem="OLI-bg-hBY" firstAttribute="centerY" secondItem="fhq-6e-30z" secondAttribute="centerY" id="B7N-UT-FZI"/>
+                            <constraint firstItem="tx2-2Q-utf" firstAttribute="leading" secondItem="zKz-Wc-K7q" secondAttribute="leading" constant="16" id="DXt-Qw-2sl"/>
+                            <constraint firstItem="tx2-2Q-utf" firstAttribute="top" secondItem="fhq-6e-30z" secondAttribute="bottom" constant="20" id="EOY-V5-R3r"/>
+                            <constraint firstItem="jHQ-JM-bgx" firstAttribute="leading" secondItem="zKz-Wc-K7q" secondAttribute="leading" constant="16" id="MGK-pP-wQA"/>
+                            <constraint firstItem="sHS-HL-beY" firstAttribute="centerY" secondItem="tx2-2Q-utf" secondAttribute="centerY" id="SXo-AP-yVf"/>
+                            <constraint firstItem="sHS-HL-beY" firstAttribute="leading" secondItem="tx2-2Q-utf" secondAttribute="trailing" constant="19" id="Srd-0a-Ouu"/>
+                            <constraint firstItem="4Wl-y0-47A" firstAttribute="top" secondItem="jHQ-JM-bgx" secondAttribute="bottom" constant="2" id="TT9-ID-BdH"/>
+                            <constraint firstItem="a0r-63-2jU" firstAttribute="leading" secondItem="zKz-Wc-K7q" secondAttribute="leading" constant="16" id="XFZ-nn-7YW"/>
+                            <constraint firstItem="fhq-6e-30z" firstAttribute="top" secondItem="a0r-63-2jU" secondAttribute="bottom" constant="20" id="eoX-f4-ayF"/>
+                            <constraint firstItem="jHQ-JM-bgx" firstAttribute="top" secondItem="zKz-Wc-K7q" secondAttribute="top" constant="16" id="rzP-Pt-LEZ"/>
+                            <constraint firstItem="OLI-bg-hBY" firstAttribute="leading" secondItem="fhq-6e-30z" secondAttribute="trailing" constant="19" id="swZ-ju-PjS"/>
+                            <constraint firstItem="a0r-63-2jU" firstAttribute="top" secondItem="4Wl-y0-47A" secondAttribute="bottom" constant="10" id="yCg-DJ-nU0"/>
+                            <constraint firstItem="fhq-6e-30z" firstAttribute="leading" secondItem="zKz-Wc-K7q" secondAttribute="leading" constant="16" id="z0R-GL-djt"/>
+                        </constraints>
+                    </view>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="180" id="3Nk-Ay-evv"/>
+                    </constraints>
+                </box>
+            </subviews>
+            <constraints>
+                <constraint firstAttribute="trailing" secondItem="MwV-Fh-P6A" secondAttribute="trailing" id="5Dm-gG-jgi"/>
+                <constraint firstItem="VBO-Sp-SGn" firstAttribute="leading" secondItem="8HO-Hy-Nag" secondAttribute="leading" id="FVu-4g-HfS"/>
+                <constraint firstItem="MwV-Fh-P6A" firstAttribute="top" secondItem="8HO-Hy-Nag" secondAttribute="top" id="hGR-tP-YAO"/>
+                <constraint firstItem="MwV-Fh-P6A" firstAttribute="leading" secondItem="8HO-Hy-Nag" secondAttribute="leading" id="nNL-9I-bh8"/>
+                <constraint firstItem="VBO-Sp-SGn" firstAttribute="top" secondItem="MwV-Fh-P6A" secondAttribute="bottom" id="uXo-18-omL"/>
+                <constraint firstAttribute="trailing" secondItem="VBO-Sp-SGn" secondAttribute="trailing" id="yMe-ZY-ZG5"/>
+            </constraints>
+            <connections>
+                <outlet property="nameLabel" destination="jHQ-JM-bgx" id="Up0-tr-AWR"/>
+                <outlet property="nameView" destination="4Wl-y0-47A" id="S2Y-LF-PAp"/>
+                <outlet property="nameViewLabel" destination="rBb-tH-78V" id="bHE-HT-bpA"/>
+                <outlet property="oneFileForOnePageOtherLabel" destination="hu2-bV-yft" id="pvs-UQ-UR4"/>
+                <outlet property="oneFileForOnePageRadio" destination="wET-YY-DYd" id="TWU-hZ-bnP"/>
+                <outlet property="oneFileForOnePageStepper" destination="5dh-lc-jet" id="9Dw-zm-bKE"/>
+                <outlet property="oneFileForOnePageTextField" destination="9cn-T9-ymK" id="E7V-Jw-Gob"/>
+                <outlet property="oneFileForOnePageView" destination="ZQL-FL-f9k" id="4OC-AZ-aJC"/>
+                <outlet property="pageRangeComboBox" destination="nTX-d3-Nl3" id="NSn-YA-h2G"/>
+                <outlet property="pageRangeRadio" destination="c7L-ui-7Lb" id="otk-JW-Z55"/>
+                <outlet property="prefixForOrigFileNameCheck" destination="a0r-63-2jU" id="zap-dE-JmF"/>
+                <outlet property="sepCheck" destination="tx2-2Q-utf" id="zQZ-uG-bE9"/>
+                <outlet property="sepTextView" destination="f5Q-Eu-B5p" id="D2p-6V-W9J"/>
+                <outlet property="sepView" destination="sHS-HL-beY" id="A2D-wO-BPu"/>
+                <outlet property="splitMuitiFileOtherLabel" destination="baP-W7-Evc" id="QoD-ZI-5CF"/>
+                <outlet property="splitMuitiFileRadio" destination="1Xw-bg-2TE" id="y1E-ro-Inu"/>
+                <outlet property="splitMuitiFileStepper" destination="ARp-F2-lcX" id="XoO-di-n3C"/>
+                <outlet property="splitMuitiFileTextField" destination="RWl-fr-sY9" id="vJF-JN-Ijp"/>
+                <outlet property="splitMuitiFileView" destination="6Dh-GY-bzc" id="djh-4s-rkq"/>
+                <outlet property="tagCheck" destination="fhq-6e-30z" id="iEW-GU-r3P"/>
+                <outlet property="tagTextField" destination="nPh-YU-WBb" id="u5X-QD-qRX"/>
+                <outlet property="tagView" destination="OLI-bg-hBY" id="TKi-HT-4by"/>
+                <outlet property="typeLabel" destination="aRC-Og-uMz" id="e32-zy-M9r"/>
+            </connections>
+            <point key="canvasLocation" x="-20" y="679"/>
+        </customView>
     </objects>
 </document>

+ 31 - 2
PDF Office/PDF Office/Class/PDFTools/PageEdit/Controller/KMPDFEditViewController.swift

@@ -397,8 +397,9 @@ class KMPDFEditViewController: NSViewController, KMPDFThumbnailViewDelegate {
             
             let windowController_extract: KMPageEditExtractWindowController = self?.windowController as! KMPageEditExtractWindowController
             /// 提取设置项
-            let oneDocumentPerPage: Bool = windowController_extract.settingView?.independentPerPageCheck.state != .on
-            let extractAfterDelete: Bool = windowController_extract.settingView?.extractAfterDeletePageCheck.state == .on
+            let settingView: KMPageEditExtractSettingView = windowController_extract.settingView! as! KMPageEditExtractSettingView
+            let oneDocumentPerPage: Bool = settingView.independentPerPageCheck.state != .on
+            let extractAfterDelete: Bool = settingView.extractAfterDeletePageCheck.state == .on
             
             self?.view.window?.endSheet((self?.windowController.window)!)
             self?.windowController = nil
@@ -459,7 +460,35 @@ class KMPDFEditViewController: NSViewController, KMPDFThumbnailViewDelegate {
     }
     
     @objc func splitMenuAction(sender: KMToolbarClickButton) {
+        let model = KMPageEditSplitSettingModel()
+        model.documentURL = self.listView?.document.documentURL
+        model.fileName = model.documentURL.lastPathComponent
+        model.pathExtension = model.fileName.components(separatedBy: ".").last
         
+        if (self.thumbnailView.getSelectedPages().count > 0) {
+            model.type = 2
+            model.pageRangeType = 2
+            var selectedIndexs: Array<Int> = []
+            for i in self.thumbnailView.getSelectedPages() {
+                selectedIndexs.append(i)
+            }
+            
+            model.pageRangeString = KMPageRangeTools.newParseSelectedIndexs(selectedIndex: selectedIndexs)
+        } else {
+            model.type = 0
+        }
+        
+        let windowController = KMPageEditSplitWindowController(model)
+        self.view.window?.beginSheet(windowController.window!)
+        self.windowController = windowController
+        
+        windowController.itemClick = { [weak self] index, value in
+            if (index == 1) { /// 取消
+                self?.view.window?.endSheet((self?.windowController.window)!)
+                self?.windowController = nil
+                return
+            }
+        }
     }
     
     @objc func reverseMenuAction(sender: KMToolbarClickButton) {

+ 68 - 0
PDF Office/PDF Office/Class/PDFTools/PageEdit/Model/KMPageEditSplitSettingModel.swift

@@ -0,0 +1,68 @@
+//
+//  KMPageEditSplitSettingModel.swift
+//  PDF Office
+//
+//  Created by tangchao on 2023/1/12.
+//
+
+import Cocoa
+
+class KMPageEditSplitSettingModel: KMPageEditSettingBaseModel {
+    var type: Int = 0
+    var avgNumberForOneFile: Int = 1
+    var avgSplitNumberFile: Int = 1
+    var pageRangeType: Int = 1
+    var pageRangeString: String = ""
+    
+    var origFileNameIsPrefix: Bool = true
+    
+    var hasTag: Bool = true
+    var tagString: String = "part"
+    
+    var hasSep: Bool = true
+    var sepString: String = "-"
+    
+    override var outputFileName: String {
+        get {
+            if (fileName == nil || fileName.isEmpty) {
+                return ""
+            }
+            
+            var result: String = ""
+            
+            var newFileName: String = ""
+            let pathExtension = fileName.components(separatedBy: ".").last
+            let files = fileName.split(separator: ".")
+            for i in 0 ..< files.count-1 {
+                let file: String = String(files[i])
+                newFileName.append(file)
+                if (i < files.count-2) {
+                    newFileName.append(".")
+                }
+            }
+            
+            if (origFileNameIsPrefix) {
+                result.append(newFileName)
+                if (hasSep) {
+                    result.append(sepString)
+                }
+                if (hasTag) {
+                    result.append(tagString)
+                }
+            } else {
+                if (hasTag) {
+                    result.append(tagString)
+                }
+                if (hasSep) {
+                    result.append(sepString)
+                }
+                result.append(newFileName)
+            }
+            
+            result.append(".")
+            result.append(self.pathExtension)
+            
+            return result
+        }
+    }
+}

+ 316 - 0
PDF Office/PDF Office/Class/PDFTools/PageEdit/View/KMPageEditSplitSettingView.swift

@@ -0,0 +1,316 @@
+//
+//  KMPageEditSplitSettingView.swift
+//  PDF Office
+//
+//  Created by tangchao on 2023/1/12.
+//
+
+import Cocoa
+
+class KMPageEditSplitSettingView: KMPageEditSettingBaseView {
+
+    @IBOutlet weak var typeLabel: NSTextField!
+    
+    @IBOutlet weak var oneFileForOnePageRadio: NSButton!
+    @IBOutlet weak var oneFileForOnePageView: NSView!
+    @IBOutlet weak var oneFileForOnePageTextField: NSTextField!
+    @IBOutlet weak var oneFileForOnePageStepper: NSStepper!
+    @IBOutlet weak var oneFileForOnePageOtherLabel: NSTextField!
+    
+    @IBOutlet weak var splitMuitiFileRadio: NSButton!
+    @IBOutlet weak var splitMuitiFileView: NSView!
+    @IBOutlet weak var splitMuitiFileStepper: NSStepper!
+    @IBOutlet weak var splitMuitiFileTextField: NSTextField!
+    @IBOutlet weak var splitMuitiFileOtherLabel: NSTextField!
+    
+    @IBOutlet weak var pageRangeRadio: NSButton!
+    @IBOutlet weak var pageRangeComboBox: NSComboBox!
+    
+    
+    @IBOutlet weak var nameLabel: NSTextField!
+    @IBOutlet weak var nameView: NSView!
+    @IBOutlet weak var nameViewLabel: NSTextField!
+    @IBOutlet weak var prefixForOrigFileNameCheck: NSButton!
+    @IBOutlet weak var tagCheck: NSButton!
+    @IBOutlet weak var sepCheck: NSButton!
+    @IBOutlet weak var tagView: NSView!
+    @IBOutlet weak var tagTextField: NSTextField!
+    @IBOutlet weak var sepView: NSView!
+    @IBOutlet weak var sepTextView: NSTextField!
+    
+    var type: Int {
+        get {
+            -1
+        }
+        set {
+            if (newValue == 0) {
+                self.selectRadio(radio: self.oneFileForOnePageRadio)
+            } else if (newValue == 1) {
+                self.selectRadio(radio: self.splitMuitiFileRadio)
+            } else if (newValue == 2) {
+                self.selectRadio(radio: self.pageRangeRadio)
+            }
+        }
+    }
+    
+    override func awakeFromNib() {
+        super.awakeFromNib()
+        
+        self.typeLabel.stringValue = "拆分方式"
+        self.oneFileForOnePageRadio.title = "平均每"
+        self.oneFileForOnePageTextField.stringValue = "1"
+        self.oneFileForOnePageStepper.minValue = 1
+        self.oneFileForOnePageStepper.integerValue = 1
+        self.oneFileForOnePageOtherLabel.stringValue = "页拆分为一个PDF文件"
+        
+        self.splitMuitiFileRadio.title = "平均拆分为"
+        self.splitMuitiFileTextField.stringValue = "1"
+        self.splitMuitiFileStepper.minValue = 1
+        self.splitMuitiFileStepper.integerValue = 1
+        self.splitMuitiFileOtherLabel.stringValue = "个PDF文件"
+        
+        self.pageRangeRadio.title = "按页面范围拆分"
+        self.pageRangeComboBox.removeAllItems()
+        self.pageRangeComboBox.addItems(withObjectValues: ["奇数页","偶数页","自定义"])
+        self.pageRangeComboBox.placeholderString = "e.g. 1,3-5,10"
+        self.pageRangeComboBox.selectItem(at: 0)
+        self.pageRangeComboBox.isEditable = false
+        self.pageRangeComboBox.delegate = self
+        
+        for radio in [self.oneFileForOnePageRadio, self.splitMuitiFileRadio, self.pageRangeRadio] {
+            radio?.target = self
+            radio?.action = #selector(radioAction)
+        }
+        self.selectRadio(radio: self.oneFileForOnePageRadio)
+        
+        self.nameLabel.stringValue = "文档命名"
+        self.prefixForOrigFileNameCheck.title = "将原始文档名前置"
+        self.tagCheck.title = "标签"
+        self.sepCheck.title = "分隔符"
+        self.tagTextField.stringValue = "part"
+        self.sepTextView.stringValue = "-"
+        
+        for textfield in [self.oneFileForOnePageTextField, self.splitMuitiFileTextField, self.tagTextField, self.sepTextView] {
+            textfield?.isEditable = true
+            textfield?.focusRingType = .none
+            textfield?.isBordered = false
+            textfield?.delegate = self
+        }
+        self.oneFileForOnePageTextField.formatter = TextFieldFormatter()
+        self.splitMuitiFileTextField.formatter = TextFieldFormatter()
+        
+        for stepper in [self.oneFileForOnePageStepper, self.splitMuitiFileStepper] {
+            stepper?.target = self
+            stepper?.action = #selector(stepperAction)
+        }
+        
+        for view in [self.oneFileForOnePageView, self.splitMuitiFileView] {
+            view?.wantsLayer = true
+            view?.layer?.backgroundColor = NSColor(white: 238.0/255.0, alpha: 1.0).cgColor
+            view?.layer?.cornerRadius = 2
+        }
+        
+        for view in [self.nameView, self.tagView, self.sepView] {
+            view?.wantsLayer = true
+            view?.layer?.borderWidth = 1
+            view?.layer?.borderColor = NSColor.black.cgColor
+            view?.layer?.cornerRadius = 2
+        }
+        
+        for check in [self.prefixForOrigFileNameCheck, self.tagCheck, self.sepCheck] {
+            check?.target = self
+            check?.action = #selector(checkAction)
+        }
+    }
+    
+    @objc func radioAction(sender: NSButton) {
+        selectRadio(radio: sender)
+        
+        guard let callback = self.itemClick else {
+            return
+        }
+        
+        var index: Int = 1
+        if (sender.isEqual(to: self.splitMuitiFileRadio)) {
+            index = 2
+        } else if (sender.isEqual(to: self.pageRangeRadio)) {
+            index = 3
+        }
+        callback(1, index)
+    }
+    
+    @objc func stepperAction(sender: NSStepper) {
+        var index: Int = 2
+        if (self.oneFileForOnePageStepper.isEqual(to: sender)) {
+            self.oneFileForOnePageTextField.stringValue = "\(sender.integerValue)"
+        } else if (self.splitMuitiFileStepper.isEqual(to: sender)) {
+            self.splitMuitiFileTextField.stringValue = "\(sender.integerValue)"
+            index = 3
+        }
+        
+        guard let callback = self.itemClick else {
+            return
+        }
+        
+        callback(index, sender.integerValue)
+    }
+    
+    @objc func checkAction(sender: NSButton) {
+        if (self.tagCheck.state == .on) {
+            self.tagTextField.isEnabled = true
+        } else {
+            self.tagTextField.isEnabled = false
+        }
+        
+        if (sepCheck.state == .on) {
+            self.sepTextView.isEnabled = true
+        } else {
+            self.sepTextView.isEnabled = false
+        }
+        
+        var index: Int = 6
+        if (sender.isEqual(to: self.prefixForOrigFileNameCheck)) {
+            index = 6
+        } else if (sender.isEqual(to: self.tagCheck)) {
+            index = 7
+        } else if (sender.isEqual(to: self.sepCheck)) {
+            index = 8
+        }
+        
+        guard let callback = self.itemClick else {
+            return
+        }
+        callback(index, sender.state == .on)
+    }
+    
+    public func setPageRangeString(_ string: String) {
+        self.pageRangeComboBox.stringValue = string
+        self.pageRangeComboBox.isEditable = true
+        
+        self.window?.makeFirstResponder(self.pageRangeComboBox)
+    }
+    
+    public func updateName(_ name: String) {
+        self.nameViewLabel.stringValue = name
+    }
+    
+    // MARK: Private Methods
+    
+    private func selectRadio(radio: NSButton) {
+        for item in [self.oneFileForOnePageRadio, self.splitMuitiFileRadio, self.pageRangeRadio] {
+            if (radio.isEqual(to: item)) {
+                item?.state = .on
+            } else {
+                item?.state = .off
+            }
+        }
+        
+        if (self.oneFileForOnePageRadio.state == .on) {
+            self.oneFileForOnePageTextField.isEnabled = true
+            self.oneFileForOnePageStepper.isEnabled = true
+        } else {
+            self.oneFileForOnePageTextField.isEnabled = false
+            self.oneFileForOnePageStepper.isEnabled = false
+        }
+        
+        if (self.splitMuitiFileRadio.state == .on) {
+            self.splitMuitiFileTextField.isEnabled = true
+            self.splitMuitiFileStepper.isEnabled = true
+        } else {
+            self.splitMuitiFileTextField.isEnabled = false
+            self.splitMuitiFileStepper.isEnabled = false
+        }
+        
+        if (self.pageRangeRadio.state == .on) {
+            self.pageRangeComboBox.isEnabled = true
+        } else {
+            self.pageRangeComboBox.isEnabled = false
+        }
+    }
+    
+}
+
+extension KMPageEditSplitSettingView: NSTextFieldDelegate {
+    func controlTextDidChange(_ obj: Notification) {
+        if (self.oneFileForOnePageTextField.isEqual(to: obj.object)) {
+            if (self.oneFileForOnePageTextField.integerValue <= 0) {
+                self.oneFileForOnePageTextField.stringValue = "1"
+                self.oneFileForOnePageStepper.integerValue = 1
+            } else if (self.oneFileForOnePageTextField.integerValue > Int(self.oneFileForOnePageStepper.maxValue)) {
+                self.oneFileForOnePageTextField.stringValue = "\(Int(self.oneFileForOnePageStepper.maxValue))"
+                self.oneFileForOnePageStepper.integerValue = Int(self.oneFileForOnePageStepper.maxValue)
+            } else {
+                self.oneFileForOnePageStepper.integerValue = self.oneFileForOnePageTextField.integerValue
+            }
+            
+            guard let callback = self.itemClick else {
+                return
+            }
+            
+            callback(2, self.oneFileForOnePageStepper.integerValue)
+        } else if (self.splitMuitiFileTextField.isEqual(to: obj.object)) {
+            if (self.splitMuitiFileTextField.integerValue <= 0) {
+                self.splitMuitiFileTextField.stringValue = "1"
+                self.splitMuitiFileStepper.integerValue = 1
+            } else if (self.splitMuitiFileTextField.integerValue > Int(self.splitMuitiFileStepper.maxValue)) {
+                self.splitMuitiFileTextField.stringValue = "\(Int(self.splitMuitiFileStepper.maxValue))"
+                self.splitMuitiFileStepper.integerValue = Int(self.splitMuitiFileStepper.maxValue)
+            } else {
+                self.splitMuitiFileStepper.integerValue = self.splitMuitiFileTextField.integerValue
+            }
+            
+            guard let callback = self.itemClick else {
+                return
+            }
+            
+            callback(3, self.splitMuitiFileStepper.integerValue)
+        } else if (self.pageRangeComboBox.isEqual(to: obj.object)) {
+            guard let callback = self.itemClick else {
+                return
+            }
+            
+            callback(5, self.pageRangeComboBox.stringValue)
+        } else if (self.tagTextField.isEqual(to: obj.object)) {
+            guard let callback = self.itemClick else {
+                return
+            }
+            
+            callback(9, self.tagTextField.stringValue)
+        } else if (self.sepTextView.isEqual(to: obj.object)) {
+            guard let callback = self.itemClick else {
+                return
+            }
+            
+            callback(10, self.sepTextView.stringValue)
+        }
+    }
+}
+
+extension KMPageEditSplitSettingView: NSComboBoxDelegate {
+    func comboBoxSelectionDidChange(_ notification: Notification) {
+        if (self.pageRangeComboBox.isEqual(to: notification.object)) {
+            var index = self.pageRangeComboBox.indexOfSelectedItem
+            if (index < 0) {
+                index = 0
+            }
+            
+            if (index == 0) { /// 奇数页
+                self.pageRangeComboBox.isEditable = false
+            } else if (index == 1) { /// 偶数页
+                self.pageRangeComboBox.isEditable = false
+            } else { /// ziding
+                self.pageRangeComboBox.isEditable = true
+                
+                DispatchQueue.main.async {
+                    self.pageRangeComboBox.stringValue = ""
+                }
+            }
+            
+            guard let callback = self.itemClick else {
+                return
+            }
+            
+            callback(4, index)
+        }
+    }
+}

+ 0 - 2
PDF Office/PDF Office/Class/PDFTools/PageEdit/Window/KMPageEditExtractWindowController.swift

@@ -9,8 +9,6 @@ import Cocoa
 
 class KMPageEditExtractWindowController: KMPageEditSettingBaseWindowController {
     
-    var settingView: KMPageEditExtractSettingView?
-    
     override func windowDidLoad() {
         super.windowDidLoad()
         setWindowSize(NSSize(width: 320, height: 208))

+ 103 - 0
PDF Office/PDF Office/Class/PDFTools/PageEdit/Window/KMPageEditSplitWindowController.swift

@@ -0,0 +1,103 @@
+//
+//  KMPageEditSplitWindowController.swift
+//  PDF Office
+//
+//  Created by tangchao on 2023/1/12.
+//
+
+import Cocoa
+
+class KMPageEditSplitWindowController: KMPageEditSettingBaseWindowController {
+    
+    override var model: KMPageEditSettingBaseModel? {
+        get {
+            return super.model
+        }
+        set {
+            super.model = newValue
+        }
+    }
+    
+    override func windowDidLoad() {
+        super.windowDidLoad()
+    
+        setWindowSize(NSSize(width: 480, height: 481))
+        
+        self.titleLabel.stringValue = "拆分页面"
+        
+        funcButton.title = NSLocalizedString("拆分", comment: "")
+        funcButton.layer?.backgroundColor = NSColor.black.cgColor
+        funcButton.attributedTitle = NSMutableAttributedString(string: funcButton.title, attributes: [NSAttributedString.Key.foregroundColor : NSColor.white])
+        
+        let settingView: KMPageEditSplitSettingView = KMPageEditSplitSettingView.createFromNib()!
+        self.contentBox.contentView?.addSubview(settingView)
+        settingView.frame = self.contentBox.contentView!.bounds
+        settingView.autoresizingMask = [.width, .height]
+        self.settingView = settingView
+        settingView.oneFileForOnePageStepper.maxValue = Double(self.model!.pageCount)
+        settingView.splitMuitiFileStepper.maxValue = Double(self.model!.pageCount)
+        settingView.type = (self.model as! KMPageEditSplitSettingModel).type
+        if ((self.model as! KMPageEditSplitSettingModel).type == 2) {
+            settingView.setPageRangeString((self.model as! KMPageEditSplitSettingModel).pageRangeString)
+        }
+        settingView.updateName(self.model!.outputFileName)
+        
+        settingView.itemClick = { [weak self] index, value in
+            if (index == 1) { /// 类型切换
+                (self?.model as! KMPageEditSplitSettingModel).type = value as! Int
+                return
+            }
+            if (index == 2) { /// 平均每几页拆分
+                (self?.model as! KMPageEditSplitSettingModel).avgNumberForOneFile = value as! Int
+                return
+            }
+            if (index == 3) { /// 平均拆分几个文件
+                (self?.model as! KMPageEditSplitSettingModel).avgSplitNumberFile = value as! Int
+                return
+            }
+            if (index == 4) { /// 页面范围切换
+                (self?.model as! KMPageEditSplitSettingModel).pageRangeType = value as! Int
+                return
+            }
+            if (index == 5) { /// 页面范围输入
+                (self?.model as! KMPageEditSplitSettingModel).pageRangeString = value as! String
+                return
+            }
+            if (index == 6) { /// 将原始文档名前置
+                (self?.model as! KMPageEditSplitSettingModel).origFileNameIsPrefix = value as! Bool
+                
+                (self?.settingView as! KMPageEditSplitSettingView).updateName((self?.model!.outputFileName)!)
+                return
+            }
+            if (index == 7) { /// 标签
+                (self?.model as! KMPageEditSplitSettingModel).hasTag = value as! Bool
+                
+                (self?.settingView as! KMPageEditSplitSettingView).updateName((self?.model!.outputFileName)!)
+                return
+            }
+            if (index == 8) { /// 分隔符
+                (self?.model as! KMPageEditSplitSettingModel).hasSep = value as! Bool
+                
+                (self?.settingView as! KMPageEditSplitSettingView).updateName((self?.model!.outputFileName)!)
+                return
+            }
+            
+            if (index == 9) { /// 分隔符
+                (self?.model as! KMPageEditSplitSettingModel).tagString = value as! String
+                
+                (self?.settingView as! KMPageEditSplitSettingView).updateName((self?.model!.outputFileName)!)
+                return
+            }
+            
+            if (index == 10) { /// 分隔符
+                (self?.model as! KMPageEditSplitSettingModel).sepString = value as! String
+                
+                (self?.settingView as! KMPageEditSplitSettingView).updateName((self?.model!.outputFileName)!)
+                return
+            }
+        }
+    }
+    
+    
+
+}

+ 49 - 0
PDF Office/PDF Office/Class/PDFTools/Watermark/Tools/KMPageRangeTools.swift

@@ -170,4 +170,53 @@ class KMPageRangeTools: NSObject {
         }
         return string
     }
+    
+    class func newParseSelectedIndexs(selectedIndex: Array<Int>) -> String {
+        if (selectedIndex.count == 0) {
+            return ""
+        }
+        
+        if (selectedIndex.count == 1) {
+            return "\(selectedIndex.first!+1)"
+        }
+        
+        var newDatas: Array<Int> = []
+        for i in selectedIndex {
+            newDatas.append(i)
+        }
+        /// 排序
+        /// 根据id进行排序(升序)
+        newDatas.sort(){$0 < $1}
+        
+        var a: Int = 0
+        var b: Int = 0
+        var result: String? = nil
+        for i in newDatas {
+            if (result == nil) {
+                a = i
+                b = i
+                result = ""
+            } else {
+                if (i == b+1) {
+                    b = i
+                    if (i == newDatas.last) {
+                        result!.append(String(format: "%d-%d", a+1,b+1))
+                    }
+                } else {
+                    if (a == b) {
+                        result!.append(String(format: "%d,", a+1))
+                    } else {
+                        result!.append(String(format: "%d-%d,", a+1,b+1))
+                    }
+                    a = i
+                    b = i
+                    if (i == newDatas.last) {
+                        result!.append(String(format: "%d", a+1))
+                    }
+                }
+            }
+        }
+        
+        return result!
+    }
 }

+ 1 - 0
PDF Office/PDF Office/PDF Office DMG-Bridging-Header.h

@@ -20,3 +20,4 @@
 #import "CPDFListView+Public.h"
 #import "KMGeneralAnnotationViewController.h"
 #import "KMAnnotationPropertiesViewController.h"
+#import "TextFieldFormatter.h"

+ 1 - 0
PDF Office/PDF Office/PDF Office Pro-Bridging-Header.h

@@ -20,3 +20,4 @@
 #import "CPDFListView+Public.h"
 #import "KMGeneralAnnotationViewController.h"
 #import "KMAnnotationPropertiesViewController.h"
+#import "TextFieldFormatter.h"

+ 2 - 0
PDF Office/PDF Office/PDF Office-Bridging-Header.h

@@ -31,3 +31,5 @@
 #import "CPDFPage+PDFListView.h"
 #import "KMPopUpButton.h"
 #import <Masonry/Masonry.h>
+#import "TextFieldFormatter.h"
+