Browse Source

【PDF工具 - 批量】Convert PDF 空状态文件拖拽

lizhe 2 năm trước cách đây
mục cha
commit
727266af31

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

@@ -1135,6 +1135,15 @@
 		ADE614B129779C6D00F62ED7 /* KMImageTitleButton.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADE614B029779C6D00F62ED7 /* KMImageTitleButton.xib */; };
 		ADE614B229779C6D00F62ED7 /* KMImageTitleButton.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADE614B029779C6D00F62ED7 /* KMImageTitleButton.xib */; };
 		ADE614B329779C6D00F62ED7 /* KMImageTitleButton.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADE614B029779C6D00F62ED7 /* KMImageTitleButton.xib */; };
+		ADE614B529861CCC00F62ED7 /* KMBatchSelectedFilesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE614B429861CCC00F62ED7 /* KMBatchSelectedFilesView.swift */; };
+		ADE614B629861CCC00F62ED7 /* KMBatchSelectedFilesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE614B429861CCC00F62ED7 /* KMBatchSelectedFilesView.swift */; };
+		ADE614B729861CCC00F62ED7 /* KMBatchSelectedFilesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE614B429861CCC00F62ED7 /* KMBatchSelectedFilesView.swift */; };
+		ADE614BA29861CFF00F62ED7 /* KMBatchSelectedFilesView.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADE614B929861CFF00F62ED7 /* KMBatchSelectedFilesView.xib */; };
+		ADE614BB29861CFF00F62ED7 /* KMBatchSelectedFilesView.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADE614B929861CFF00F62ED7 /* KMBatchSelectedFilesView.xib */; };
+		ADE614BC29861CFF00F62ED7 /* KMBatchSelectedFilesView.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADE614B929861CFF00F62ED7 /* KMBatchSelectedFilesView.xib */; };
+		ADE614BF298620C000F62ED7 /* ImageToPDF.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = ADE614BE298620C000F62ED7 /* ImageToPDF.xcassets */; };
+		ADE614C0298620C000F62ED7 /* ImageToPDF.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = ADE614BE298620C000F62ED7 /* ImageToPDF.xcassets */; };
+		ADE614C1298620C000F62ED7 /* ImageToPDF.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = ADE614BE298620C000F62ED7 /* ImageToPDF.xcassets */; };
 		BB0542152965705D00F2665C /* KMCropTipView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB0542142965705D00F2665C /* KMCropTipView.swift */; };
 		BB0542162965705D00F2665C /* KMCropTipView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB0542142965705D00F2665C /* KMCropTipView.swift */; };
 		BB0542172965705D00F2665C /* KMCropTipView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB0542142965705D00F2665C /* KMCropTipView.swift */; };
@@ -2551,6 +2560,9 @@
 		ADE614A62977954000F62ED7 /* KMBatchConvertPDFViewPresenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMBatchConvertPDFViewPresenter.swift; sourceTree = "<group>"; };
 		ADE614AB29779C5200F62ED7 /* KMImageTitleButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMImageTitleButton.swift; sourceTree = "<group>"; };
 		ADE614B029779C6D00F62ED7 /* KMImageTitleButton.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMImageTitleButton.xib; sourceTree = "<group>"; };
+		ADE614B429861CCC00F62ED7 /* KMBatchSelectedFilesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMBatchSelectedFilesView.swift; sourceTree = "<group>"; };
+		ADE614B929861CFF00F62ED7 /* KMBatchSelectedFilesView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMBatchSelectedFilesView.xib; sourceTree = "<group>"; };
+		ADE614BE298620C000F62ED7 /* ImageToPDF.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = ImageToPDF.xcassets; sourceTree = "<group>"; };
 		BB0542142965705D00F2665C /* KMCropTipView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMCropTipView.swift; sourceTree = "<group>"; };
 		BB162E8D294FFC0C0088E9D1 /* KMWatermarkPDFView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMWatermarkPDFView.swift; sourceTree = "<group>"; };
 		BB162E91294FFE020088E9D1 /* KMWatermarkModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMWatermarkModel.swift; sourceTree = "<group>"; };
@@ -4088,6 +4100,7 @@
 		ADC25DF12923BA0D0080A3F6 /* ImageToPDF */ = {
 			isa = PBXGroup;
 			children = (
+				ADE614BD2986209C00F62ED7 /* Source */,
 				AD4B4546293ED7BE0076FA14 /* Manager */,
 				AD4B4545293ED7B30076FA14 /* Model */,
 				ADC25DF22923BA0D0080A3F6 /* View */,
@@ -4109,6 +4122,7 @@
 		ADC25DF32923BA0D0080A3F6 /* KMBatchProcessingView */ = {
 			isa = PBXGroup;
 			children = (
+				ADE614B829861CDF00F62ED7 /* SelectedFiles */,
 				ADCB98FB29274F0100B51A03 /* Tableview */,
 				ADCB98C82924741B00B51A03 /* KMBatchProcessingView.swift */,
 				ADCB98CC2924743300B51A03 /* KMBatchProcessingView.xib */,
@@ -4360,6 +4374,23 @@
 			path = KMImageTitleButton;
 			sourceTree = "<group>";
 		};
+		ADE614B829861CDF00F62ED7 /* SelectedFiles */ = {
+			isa = PBXGroup;
+			children = (
+				ADE614B429861CCC00F62ED7 /* KMBatchSelectedFilesView.swift */,
+				ADE614B929861CFF00F62ED7 /* KMBatchSelectedFilesView.xib */,
+			);
+			path = SelectedFiles;
+			sourceTree = "<group>";
+		};
+		ADE614BD2986209C00F62ED7 /* Source */ = {
+			isa = PBXGroup;
+			children = (
+				ADE614BE298620C000F62ED7 /* ImageToPDF.xcassets */,
+			);
+			path = Source;
+			sourceTree = "<group>";
+		};
 		BB162E95295062B40088E9D1 /* Tools */ = {
 			isa = PBXGroup;
 			children = (
@@ -5782,6 +5813,7 @@
 				BB2EDF4F296E63E5003BCF58 /* KMPageEditInsertCustomPageWindowController.xib in Resources */,
 				89E4E7412964160F002DBA6F /* KMAnnotationLinkViewController.xib in Resources */,
 				ADB1FE3E29700D3400ED072D /* KMBatchCollectionViewItem.xib in Resources */,
+				ADE614BF298620C000F62ED7 /* ImageToPDF.xcassets in Resources */,
 				9F1FE3F4293F4F0F00E952CA /* Info.plist in Resources */,
 				89D9896F28FD50EF003A3E87 /* KMAnnotationCollectionViewItem.xib in Resources */,
 				BBFE6E68293097A600142C01 /* KMPageRangePickerWindowController.xib in Resources */,
@@ -5807,6 +5839,7 @@
 				BBAFC83F2985194800D0648E /* KMPDFEditAppendWindow.xib in Resources */,
 				9FA607E128FD4C9F00B46586 /* KMHomePopViewController.xib in Resources */,
 				9F0CB4B82977BC1000007028 /* KMPropertiesPanelPreviewSubVC.xib in Resources */,
+				ADE614BA29861CFF00F62ED7 /* KMBatchSelectedFilesView.xib in Resources */,
 				89D2D2B92947316900BFF5FE /* Quick Start Guide_Widget.pdf in Resources */,
 				ADB1FE7229752ED500ED072D /* KMBatchConvertPDFView.xib in Resources */,
 				9FDD0F9C2952FF4D000C4DAD /* comp-light.json in Resources */,
@@ -5985,6 +6018,7 @@
 				89E4E76529656A88002DBA6F /* KMAnnotationStampViewController.xib in Resources */,
 				BB49ED02293F459500C82CA2 /* KMConvertPPTsWindowController.xib in Resources */,
 				BB8F455B295AA1270037EA22 /* KMHeaderFooterPropertyInfoController.xib in Resources */,
+				ADE614BB29861CFF00F62ED7 /* KMBatchSelectedFilesView.xib in Resources */,
 				F3A9DC82294309D80074E5D2 /* CPDFListEditAnnotationViewController.xib in Resources */,
 				8942F7F42926087200389627 /* KMSearchViewController.xib in Resources */,
 				9FAAA336290BD0A20046FFCE /* KMHistoryFileCollectionViewItem.xib in Resources */,
@@ -6066,6 +6100,7 @@
 				BBEC00C3295C306400A26C98 /* KMBatesPropertyController.xib in Resources */,
 				BB897262294C5DDA0045787C /* KMWatermarkPropertyInfoController.xib in Resources */,
 				9FDD0F68294AB645000C4DAD /* KMMainViewController.xib in Resources */,
+				ADE614C0298620C000F62ED7 /* ImageToPDF.xcassets in Resources */,
 				9FDD0FA32952FF4D000C4DAD /* $themes.json in Resources */,
 				9F0CB4B92977BC1000007028 /* KMPropertiesPanelPreviewSubVC.xib in Resources */,
 				9F8539FD2947137500DF644E /* throbber_waiting.png in Resources */,
@@ -6194,6 +6229,7 @@
 				BB8F4544295A98960037EA22 /* KMHeaderFooterPropertyController.xib in Resources */,
 				89E4E7312963FBA2002DBA6F /* KMPropertiesViewPopController.xib in Resources */,
 				ADD1B6B02941E97F00C3FFF7 /* KMPrintWindowController.xib in Resources */,
+				ADE614C1298620C000F62ED7 /* ImageToPDF.xcassets in Resources */,
 				9F853A072947137500DF644E /* newtab_h.pdf in Resources */,
 				9F0CB4842967F64D00007028 /* KMPropertiesPanelReadOnlySubVC.xib in Resources */,
 				9FDD0F9B2952FF4D000C4DAD /* alias-light.json in Resources */,
@@ -6332,6 +6368,7 @@
 				BBC348482956A638008D2CD1 /* KMEditBackgroundController.xib in Resources */,
 				F3B7DFA62949C8E300333201 /* CPDFListView.xcassets in Resources */,
 				ADD1B6DD2946BE1700C3FFF7 /* KMPrintChoosePageSizeView.xib in Resources */,
+				ADE614BC29861CFF00F62ED7 /* KMBatchSelectedFilesView.xib in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -6720,6 +6757,7 @@
 				9F1FE4F929406E4700E952CA /* CTTabStripView.m in Sources */,
 				89316852296E45CA0073EA59 /* KMImageAccessoryController.m in Sources */,
 				ADB1FE962975300B00ED072D /* KMBatchHeaderAndFooterView.swift in Sources */,
+				ADE614B529861CCC00F62ED7 /* KMBatchSelectedFilesView.swift in Sources */,
 				F3732323292DFFFE0013862C /* CPDFListView+Extension.m in Sources */,
 				BB4EEF4C2976544F003A3537 /* KMRedactAligementView.swift in Sources */,
 				9F1FE4C029406E4700E952CA /* NSWindow+CTThemed.m in Sources */,
@@ -7219,6 +7257,7 @@
 				BB162E98295062CD0088E9D1 /* KMPageRangeTools.swift in Sources */,
 				89316853296E45CA0073EA59 /* KMImageAccessoryController.m in Sources */,
 				ADB1FE972975300B00ED072D /* KMBatchHeaderAndFooterView.swift in Sources */,
+				ADE614B629861CCC00F62ED7 /* KMBatchSelectedFilesView.swift in Sources */,
 				BBA8B7A42935CD740097D183 /* KMRemovePasswordAlertWindowController.swift in Sources */,
 				BB4EEF4D2976544F003A3537 /* KMRedactAligementView.swift in Sources */,
 				F37322EE292DF9410013862C /* CPDFMarkupAnnotation+PDFListView.m in Sources */,
@@ -7586,6 +7625,7 @@
 				F373231B292DF97D0013862C /* CPDFSelection+PDFListView.m in Sources */,
 				BBFE6E89293210AB00142C01 /* KMCompressCellView.swift in Sources */,
 				8931683C296E436B0073EA59 /* KMSignatureWindowController.m in Sources */,
+				ADE614B729861CCC00F62ED7 /* KMBatchSelectedFilesView.swift in Sources */,
 				9F1F82EC2935D02E0092C4B4 /* KMComboBox.swift in Sources */,
 				8997012128F41AB8009AF911 /* KMLeftSideViewController.swift in Sources */,
 				89D2D2CC2949D4C900BFF5FE /* KMNoteTypeImageView.m in Sources */,

+ 11 - 91
PDF Office/PDF Office.xcodeproj/xcuserdata/lizhe.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -679,8 +679,8 @@
             filePath = "PDF Office/Class/PDFTools/ImageToPDF/View/KMBatchProcessingView/KMBatchProcessingView.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "108"
-            endingLineNumber = "108"
+            startingLineNumber = "126"
+            endingLineNumber = "126"
             landmarkName = "addPhotos(sender:)"
             landmarkType = "7">
          </BreakpointContent>
@@ -733,22 +733,6 @@
             landmarkType = "21">
          </BreakpointContent>
       </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
-            uuid = "BDA25E88-D714-4302-A4D3-4DE37807025E"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "PDF Office/Class/PDFTools/Batch/View/Choose/KMBatchSettingView.swift"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "63"
-            endingLineNumber = "63"
-            landmarkName = "reloadData()"
-            landmarkType = "7">
-         </BreakpointContent>
-      </BreakpointProxy>
       <BreakpointProxy
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
@@ -781,22 +765,6 @@
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
-            uuid = "94F1D853-F895-4502-9E68-910C02AA33D5"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "PDF Office/Class/PDFTools/Batch/View/Choose/KMBatchSettingView.swift"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "59"
-            endingLineNumber = "59"
-            landmarkName = "setup()"
-            landmarkType = "7">
-         </BreakpointContent>
-      </BreakpointProxy>
       <BreakpointProxy
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
@@ -832,31 +800,15 @@
       <BreakpointProxy
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
-            uuid = "FA15D326-F4E0-4CCE-A607-3AA73712FBB8"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "PDF Office/Class/PDFTools/Batch/View/Choose/KMBatchSettingView.swift"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "81"
-            endingLineNumber = "81"
-            landmarkName = "fetchCurrentView(type:)"
-            landmarkType = "7">
-         </BreakpointContent>
-      </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
-            uuid = "CF8DC3BB-F297-4788-9082-1297671DA9D9"
+            uuid = "0E04C536-9E7D-4D94-8887-7E938CBF46C6"
             shouldBeEnabled = "Yes"
             ignoreCount = "0"
             continueAfterRunningActions = "No"
-            filePath = "PDF Office/Class/PDFTools/Batch/View/Choose/ConvertPDF/KMBatchConvertPDFView.swift"
+            filePath = "PDF Office/Class/PDFTools/ImageToPDF/View/KMBatchProcessingView/SelectedFiles/KMBatchSelectedFilesView.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "69"
-            endingLineNumber = "69"
+            startingLineNumber = "56"
+            endingLineNumber = "56"
             landmarkName = "setup()"
             landmarkType = "7">
          </BreakpointContent>
@@ -864,48 +816,16 @@
       <BreakpointProxy
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
-            uuid = "522B788A-FC1F-4B72-954D-DE1514ECA6DF"
+            uuid = "2DECE267-0162-4E41-8614-AB99E8C70DD6"
             shouldBeEnabled = "Yes"
             ignoreCount = "0"
             continueAfterRunningActions = "No"
-            filePath = "PDF Office/Class/PDFTools/Batch/View/Choose/ConvertPDF/KMBatchConvertPDFView.swift"
+            filePath = "PDF Office/Class/PDFTools/ImageToPDF/View/KMBatchProcessingView/SelectedFiles/KMBatchSelectedFilesView.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "75"
-            endingLineNumber = "75"
-            landmarkName = "setup()"
-            landmarkType = "7">
-         </BreakpointContent>
-      </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
-            uuid = "BE4B8ADD-7888-4D03-8C54-40C87FFB5DC5"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "PDF Office/Class/PDFTools/Batch/View/Choose/ConvertPDF/Presenter/KMBatchConvertPDFViewPresenter.swift"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "34"
-            endingLineNumber = "34"
-            landmarkName = "retainPageLayoutAction(button:)"
-            landmarkType = "7">
-         </BreakpointContent>
-      </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
-            uuid = "69A3D29A-3DB5-4B22-A66F-96DB16BB1628"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "PDF Office/Class/PDFTools/Batch/View/Choose/ConvertPDF/KMBatchConvertPDFView.swift"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "92"
-            endingLineNumber = "92"
-            landmarkName = "reloadData()"
+            startingLineNumber = "126"
+            endingLineNumber = "126"
+            landmarkName = "allowAccept(_:)"
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>

+ 20 - 20
PDF Office/PDF Office/Class/PDFTools/Batch/View/Choose/ConvertPDF/KMBatchConvertPDFView.xib

@@ -47,16 +47,6 @@
                                 <customView translatesAutoresizingMaskIntoConstraints="NO" id="9eH-fh-he9">
                                     <rect key="frame" x="16" y="0.0" width="218" height="32"/>
                                     <subviews>
-                                        <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="64o-IE-4ut">
-                                            <rect key="frame" x="0.0" y="0.0" width="218" height="32"/>
-                                            <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" alignment="center" imageScaling="proportionallyDown" inset="2" id="64s-or-Zae">
-                                                <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
-                                                <font key="font" metaFont="system"/>
-                                            </buttonCell>
-                                            <connections>
-                                                <action selector="convertPDFTypeAction:" target="-2" id="BGL-1i-8ku"/>
-                                            </connections>
-                                        </button>
                                         <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="I6b-oY-jAA">
                                             <rect key="frame" x="6" y="8" width="34" height="16"/>
                                             <textFieldCell key="cell" lineBreakMode="clipping" title="word" id="NcY-rO-cuF">
@@ -75,6 +65,16 @@
                                             </constraints>
                                             <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="btn_arrow_gray_down_s_norm_on" id="fEa-Ag-EN4"/>
                                         </imageView>
+                                        <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="64o-IE-4ut">
+                                            <rect key="frame" x="0.0" y="0.0" width="218" height="32"/>
+                                            <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" alignment="center" imageScaling="proportionallyDown" inset="2" id="64s-or-Zae">
+                                                <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                                <font key="font" metaFont="system"/>
+                                            </buttonCell>
+                                            <connections>
+                                                <action selector="convertPDFTypeAction:" target="-2" id="BGL-1i-8ku"/>
+                                            </connections>
+                                        </button>
                                     </subviews>
                                     <constraints>
                                         <constraint firstItem="I6b-oY-jAA" firstAttribute="centerY" secondItem="9eH-fh-he9" secondAttribute="centerY" id="2A0-wi-cMy"/>
@@ -154,16 +154,6 @@
                                 <customView translatesAutoresizingMaskIntoConstraints="NO" id="I5f-ZY-bd3">
                                     <rect key="frame" x="16" y="0.0" width="218" height="32"/>
                                     <subviews>
-                                        <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1yE-a0-dHH">
-                                            <rect key="frame" x="0.0" y="0.0" width="218" height="32"/>
-                                            <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" alignment="center" imageScaling="proportionallyDown" inset="2" id="y2L-qx-kti">
-                                                <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
-                                                <font key="font" metaFont="system"/>
-                                            </buttonCell>
-                                            <connections>
-                                                <action selector="languageAction:" target="-2" id="wih-RQ-BQI"/>
-                                            </connections>
-                                        </button>
                                         <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1sJ-ss-p0d">
                                             <rect key="frame" x="6" y="8" width="48" height="16"/>
                                             <textFieldCell key="cell" lineBreakMode="clipping" title="English" id="HmK-16-UIZ">
@@ -182,6 +172,16 @@
                                             </constraints>
                                             <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="btn_arrow_gray_down_s_norm_on" id="8wE-vH-hWg"/>
                                         </imageView>
+                                        <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1yE-a0-dHH">
+                                            <rect key="frame" x="0.0" y="0.0" width="218" height="32"/>
+                                            <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" alignment="center" imageScaling="proportionallyDown" inset="2" id="y2L-qx-kti">
+                                                <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                                <font key="font" metaFont="system"/>
+                                            </buttonCell>
+                                            <connections>
+                                                <action selector="languageAction:" target="-2" id="wih-RQ-BQI"/>
+                                            </connections>
+                                        </button>
                                     </subviews>
                                     <constraints>
                                         <constraint firstAttribute="bottom" secondItem="1yE-a0-dHH" secondAttribute="bottom" id="3Ra-eT-6M1"/>

+ 6 - 0
PDF Office/PDF Office/Class/PDFTools/ImageToPDF/Source/ImageToPDF.xcassets/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 21 - 0
PDF Office/PDF Office/Class/PDFTools/ImageToPDF/Source/ImageToPDF.xcassets/icon_empty_add_hov.imageset/Contents.json

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

+ 595 - 0
PDF Office/PDF Office/Class/PDFTools/ImageToPDF/Source/ImageToPDF.xcassets/icon_empty_add_hov.imageset/State=hov.pdf

@@ -0,0 +1,595 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+q
+1.000000 0.000000 -0.000000 1.000000 18.428711 6.427734 cm
+0.929412 0.933333 0.941176 scn
+0.000000 110.342857 m
+0.000000 112.362648 1.637359 114.000000 3.657143 114.000000 c
+88.342857 114.000000 l
+90.362640 114.000000 92.000000 112.362640 92.000000 110.342857 c
+92.000000 3.657143 l
+92.000000 1.637352 90.362640 0.000000 88.342857 0.000000 c
+3.657141 0.000000 l
+1.637357 0.000000 0.000000 1.637360 0.000000 3.657143 c
+0.000000 110.342857 l
+h
+f
+n
+Q
+18.428711 116.770592 m
+18.428711 118.790375 20.066071 120.427734 22.085854 120.427734 c
+106.771568 120.427734 l
+108.791351 120.427734 110.428711 118.790375 110.428711 116.770592 c
+110.428711 10.084877 l
+110.428711 8.065086 108.791351 6.427734 106.771568 6.427734 c
+22.085852 6.427734 l
+20.066067 6.427734 18.428711 8.065094 18.428711 10.084877 c
+18.428711 116.770592 l
+h
+W*
+n
+q
+1.000000 0.000000 -0.000000 1.000000 18.428711 6.427734 cm
+0.580392 0.596078 0.611765 scn
+3.657141 1.000000 m
+2.189642 1.000000 1.000000 2.189644 1.000000 3.657143 c
+-1.000000 3.657143 l
+-1.000000 1.085075 1.085071 -1.000000 3.657141 -1.000000 c
+3.657141 1.000000 l
+h
+1.000000 3.657143 m
+1.000000 6.620636 l
+-1.000000 6.620636 l
+-1.000000 3.657143 l
+1.000000 3.657143 l
+h
+1.000000 12.547623 m
+1.000000 18.474602 l
+-1.000000 18.474602 l
+-1.000000 12.547623 l
+1.000000 12.547623 l
+h
+1.000000 24.401588 m
+1.000000 30.328575 l
+-1.000000 30.328575 l
+-1.000000 24.401588 l
+1.000000 24.401588 l
+h
+1.000000 36.255562 m
+1.000000 42.182541 l
+-1.000000 42.182541 l
+-1.000000 36.255562 l
+1.000000 36.255562 l
+h
+1.000000 48.109528 m
+1.000000 54.036507 l
+-1.000000 54.036507 l
+-1.000000 48.109528 l
+1.000000 48.109528 l
+h
+1.000000 59.963490 m
+1.000000 65.890472 l
+-1.000000 65.890472 l
+-1.000000 59.963490 l
+1.000000 59.963490 l
+h
+1.000000 71.817459 m
+1.000000 77.744446 l
+-1.000000 77.744446 l
+-1.000000 71.817459 l
+1.000000 71.817459 l
+h
+1.000000 83.671432 m
+1.000000 89.598427 l
+-1.000000 89.598427 l
+-1.000000 83.671432 l
+1.000000 83.671432 l
+h
+1.000000 95.525414 m
+1.000000 101.452393 l
+-1.000000 101.452393 l
+-1.000000 95.525414 l
+1.000000 95.525414 l
+h
+1.000000 107.379379 m
+1.000000 110.342857 l
+-1.000000 110.342857 l
+-1.000000 107.379379 l
+1.000000 107.379379 l
+h
+1.000000 110.342857 m
+1.000000 111.810356 2.189642 113.000000 3.657143 113.000000 c
+3.657143 115.000000 l
+1.085075 115.000000 -1.000000 112.914932 -1.000000 110.342857 c
+1.000000 110.342857 l
+h
+3.657143 113.000000 m
+6.681633 113.000000 l
+6.681633 115.000000 l
+3.657143 115.000000 l
+3.657143 113.000000 l
+h
+12.730612 113.000000 m
+18.779593 113.000000 l
+18.779593 115.000000 l
+12.730612 115.000000 l
+12.730612 113.000000 l
+h
+24.828571 113.000000 m
+30.877554 113.000000 l
+30.877554 115.000000 l
+24.828571 115.000000 l
+24.828571 113.000000 l
+h
+36.926533 113.000000 m
+42.975513 113.000000 l
+42.975513 115.000000 l
+36.926533 115.000000 l
+36.926533 113.000000 l
+h
+49.024494 113.000000 m
+55.073475 113.000000 l
+55.073475 115.000000 l
+49.024494 115.000000 l
+49.024494 113.000000 l
+h
+61.122459 113.000000 m
+67.171440 113.000000 l
+67.171440 115.000000 l
+61.122459 115.000000 l
+61.122459 113.000000 l
+h
+73.220421 113.000000 m
+79.269394 113.000000 l
+79.269394 115.000000 l
+73.220421 115.000000 l
+73.220421 113.000000 l
+h
+85.318375 113.000000 m
+88.342857 113.000000 l
+88.342857 115.000000 l
+85.318375 115.000000 l
+85.318375 113.000000 l
+h
+88.342857 113.000000 m
+89.810356 113.000000 91.000000 111.810356 91.000000 110.342857 c
+93.000000 110.342857 l
+93.000000 112.914925 90.914932 115.000000 88.342857 115.000000 c
+88.342857 113.000000 l
+h
+91.000000 110.342857 m
+91.000000 107.379364 l
+93.000000 107.379364 l
+93.000000 110.342857 l
+91.000000 110.342857 l
+h
+91.000000 101.452377 m
+91.000000 95.525398 l
+93.000000 95.525398 l
+93.000000 101.452377 l
+91.000000 101.452377 l
+h
+91.000000 89.598412 m
+91.000000 83.671425 l
+93.000000 83.671425 l
+93.000000 89.598412 l
+91.000000 89.598412 l
+h
+91.000000 77.744446 m
+91.000000 71.817459 l
+93.000000 71.817459 l
+93.000000 77.744446 l
+91.000000 77.744446 l
+h
+91.000000 65.890472 m
+91.000000 59.963493 l
+93.000000 59.963493 l
+93.000000 65.890472 l
+91.000000 65.890472 l
+h
+91.000000 54.036510 m
+91.000000 48.109528 l
+93.000000 48.109528 l
+93.000000 54.036510 l
+91.000000 54.036510 l
+h
+91.000000 42.182533 m
+91.000000 36.255547 l
+93.000000 36.255547 l
+93.000000 42.182533 l
+91.000000 42.182533 l
+h
+91.000000 30.328560 m
+91.000000 24.401573 l
+93.000000 24.401573 l
+93.000000 30.328560 l
+91.000000 30.328560 l
+h
+91.000000 18.474586 m
+91.000000 12.547607 l
+93.000000 12.547607 l
+93.000000 18.474586 l
+91.000000 18.474586 l
+h
+91.000000 6.620621 m
+91.000000 3.657143 l
+93.000000 3.657143 l
+93.000000 6.620621 l
+91.000000 6.620621 l
+h
+91.000000 3.657143 m
+91.000000 2.189644 89.810356 1.000000 88.342857 1.000000 c
+88.342857 -1.000000 l
+90.914925 -1.000000 93.000000 1.085068 93.000000 3.657143 c
+91.000000 3.657143 l
+h
+88.342857 1.000000 m
+85.318367 1.000000 l
+85.318367 -1.000000 l
+88.342857 -1.000000 l
+88.342857 1.000000 l
+h
+79.269386 1.000000 m
+73.220406 1.000000 l
+73.220406 -1.000000 l
+79.269386 -1.000000 l
+79.269386 1.000000 l
+h
+67.171425 1.000000 m
+61.122448 1.000000 l
+61.122448 -1.000000 l
+67.171425 -1.000000 l
+67.171425 1.000000 l
+h
+55.073467 1.000000 m
+49.024487 1.000000 l
+49.024487 -1.000000 l
+55.073467 -1.000000 l
+55.073467 1.000000 l
+h
+42.975506 1.000000 m
+36.926525 1.000000 l
+36.926525 -1.000000 l
+42.975506 -1.000000 l
+42.975506 1.000000 l
+h
+30.877542 1.000000 m
+24.828560 1.000000 l
+24.828560 -1.000000 l
+30.877542 -1.000000 l
+30.877542 1.000000 l
+h
+18.779583 1.000000 m
+12.730606 1.000000 l
+12.730606 -1.000000 l
+18.779583 -1.000000 l
+18.779583 1.000000 l
+h
+6.681624 1.000000 m
+3.657141 1.000000 l
+3.657141 -1.000000 l
+6.681624 -1.000000 l
+6.681624 1.000000 l
+h
+3.657141 2.000000 m
+2.741927 2.000000 2.000000 2.741928 2.000000 3.657143 c
+-2.000000 3.657143 l
+-2.000000 0.532791 0.532786 -2.000000 3.657141 -2.000000 c
+3.657141 2.000000 l
+h
+2.000000 3.657143 m
+2.000000 6.620636 l
+-2.000000 6.620636 l
+-2.000000 3.657143 l
+2.000000 3.657143 l
+h
+2.000000 12.547623 m
+2.000000 18.474602 l
+-2.000000 18.474602 l
+-2.000000 12.547623 l
+2.000000 12.547623 l
+h
+2.000000 24.401588 m
+2.000000 30.328575 l
+-2.000000 30.328575 l
+-2.000000 24.401588 l
+2.000000 24.401588 l
+h
+2.000000 36.255562 m
+2.000000 42.182541 l
+-2.000000 42.182541 l
+-2.000000 36.255562 l
+2.000000 36.255562 l
+h
+2.000000 48.109528 m
+2.000000 54.036507 l
+-2.000000 54.036507 l
+-2.000000 48.109528 l
+2.000000 48.109528 l
+h
+2.000000 59.963490 m
+2.000000 65.890472 l
+-2.000000 65.890472 l
+-2.000000 59.963490 l
+2.000000 59.963490 l
+h
+2.000000 71.817459 m
+2.000000 77.744446 l
+-2.000000 77.744446 l
+-2.000000 71.817459 l
+2.000000 71.817459 l
+h
+2.000000 83.671432 m
+2.000000 89.598427 l
+-2.000000 89.598427 l
+-2.000000 83.671432 l
+2.000000 83.671432 l
+h
+2.000000 95.525414 m
+2.000000 101.452393 l
+-2.000000 101.452393 l
+-2.000000 95.525414 l
+2.000000 95.525414 l
+h
+2.000000 107.379379 m
+2.000000 110.342857 l
+-2.000000 110.342857 l
+-2.000000 107.379379 l
+2.000000 107.379379 l
+h
+2.000000 110.342857 m
+2.000000 111.258072 2.741926 112.000000 3.657143 112.000000 c
+3.657143 116.000000 l
+0.532791 116.000000 -2.000000 113.467216 -2.000000 110.342857 c
+2.000000 110.342857 l
+h
+3.657143 112.000000 m
+6.681633 112.000000 l
+6.681633 116.000000 l
+3.657143 116.000000 l
+3.657143 112.000000 l
+h
+12.730612 112.000000 m
+18.779593 112.000000 l
+18.779593 116.000000 l
+12.730612 116.000000 l
+12.730612 112.000000 l
+h
+24.828571 112.000000 m
+30.877554 112.000000 l
+30.877554 116.000000 l
+24.828571 116.000000 l
+24.828571 112.000000 l
+h
+36.926533 112.000000 m
+42.975513 112.000000 l
+42.975513 116.000000 l
+36.926533 116.000000 l
+36.926533 112.000000 l
+h
+49.024494 112.000000 m
+55.073475 112.000000 l
+55.073475 116.000000 l
+49.024494 116.000000 l
+49.024494 112.000000 l
+h
+61.122459 112.000000 m
+67.171440 112.000000 l
+67.171440 116.000000 l
+61.122459 116.000000 l
+61.122459 112.000000 l
+h
+73.220421 112.000000 m
+79.269394 112.000000 l
+79.269394 116.000000 l
+73.220421 116.000000 l
+73.220421 112.000000 l
+h
+85.318375 112.000000 m
+88.342857 112.000000 l
+88.342857 116.000000 l
+85.318375 116.000000 l
+85.318375 112.000000 l
+h
+88.342857 112.000000 m
+89.258072 112.000000 90.000000 111.258072 90.000000 110.342857 c
+94.000000 110.342857 l
+94.000000 113.467209 91.467216 116.000000 88.342857 116.000000 c
+88.342857 112.000000 l
+h
+90.000000 110.342857 m
+90.000000 107.379364 l
+94.000000 107.379364 l
+94.000000 110.342857 l
+90.000000 110.342857 l
+h
+90.000000 101.452377 m
+90.000000 95.525398 l
+94.000000 95.525398 l
+94.000000 101.452377 l
+90.000000 101.452377 l
+h
+90.000000 89.598412 m
+90.000000 83.671425 l
+94.000000 83.671425 l
+94.000000 89.598412 l
+90.000000 89.598412 l
+h
+90.000000 77.744446 m
+90.000000 71.817459 l
+94.000000 71.817459 l
+94.000000 77.744446 l
+90.000000 77.744446 l
+h
+90.000000 65.890472 m
+90.000000 59.963493 l
+94.000000 59.963493 l
+94.000000 65.890472 l
+90.000000 65.890472 l
+h
+90.000000 54.036510 m
+90.000000 48.109528 l
+94.000000 48.109528 l
+94.000000 54.036510 l
+90.000000 54.036510 l
+h
+90.000000 42.182533 m
+90.000000 36.255547 l
+94.000000 36.255547 l
+94.000000 42.182533 l
+90.000000 42.182533 l
+h
+90.000000 30.328560 m
+90.000000 24.401573 l
+94.000000 24.401573 l
+94.000000 30.328560 l
+90.000000 30.328560 l
+h
+90.000000 18.474586 m
+90.000000 12.547607 l
+94.000000 12.547607 l
+94.000000 18.474586 l
+90.000000 18.474586 l
+h
+90.000000 6.620621 m
+90.000000 3.657143 l
+94.000000 3.657143 l
+94.000000 6.620621 l
+90.000000 6.620621 l
+h
+90.000000 3.657143 m
+90.000000 2.741928 89.258072 2.000000 88.342857 2.000000 c
+88.342857 -2.000000 l
+91.467209 -2.000000 94.000000 0.532784 94.000000 3.657143 c
+90.000000 3.657143 l
+h
+88.342857 2.000000 m
+85.318367 2.000000 l
+85.318367 -2.000000 l
+88.342857 -2.000000 l
+88.342857 2.000000 l
+h
+79.269386 2.000000 m
+73.220406 2.000000 l
+73.220406 -2.000000 l
+79.269386 -2.000000 l
+79.269386 2.000000 l
+h
+67.171425 2.000000 m
+61.122448 2.000000 l
+61.122448 -2.000000 l
+67.171425 -2.000000 l
+67.171425 2.000000 l
+h
+55.073467 2.000000 m
+49.024487 2.000000 l
+49.024487 -2.000000 l
+55.073467 -2.000000 l
+55.073467 2.000000 l
+h
+42.975506 2.000000 m
+36.926525 2.000000 l
+36.926525 -2.000000 l
+42.975506 -2.000000 l
+42.975506 2.000000 l
+h
+30.877542 2.000000 m
+24.828560 2.000000 l
+24.828560 -2.000000 l
+30.877542 -2.000000 l
+30.877542 2.000000 l
+h
+18.779583 2.000000 m
+12.730606 2.000000 l
+12.730606 -2.000000 l
+18.779583 -2.000000 l
+18.779583 2.000000 l
+h
+6.681624 2.000000 m
+3.657141 2.000000 l
+3.657141 -2.000000 l
+6.681624 -2.000000 l
+6.681624 2.000000 l
+h
+f
+n
+Q
+Q
+q
+1.000000 0.000000 -0.000000 1.000000 49.000000 49.000000 cm
+0.580392 0.596078 0.611765 scn
+13.333332 13.333334 m
+13.333332 0.000000 l
+16.666666 0.000000 l
+16.666666 13.333334 l
+30.000000 13.333334 l
+30.000000 16.666668 l
+16.666666 16.666668 l
+16.666666 30.000000 l
+13.333333 30.000000 l
+13.333333 16.666668 l
+0.000000 16.666668 l
+0.000000 13.333334 l
+13.333332 13.333334 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  10882
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 128.000000 128.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000010972 00000 n
+0000010996 00000 n
+0000011171 00000 n
+0000011245 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+11304
+%%EOF

+ 21 - 0
PDF Office/PDF Office/Class/PDFTools/ImageToPDF/Source/ImageToPDF.xcassets/icon_empty_add_norm.imageset/Contents.json

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

+ 579 - 0
PDF Office/PDF Office/Class/PDFTools/ImageToPDF/Source/ImageToPDF.xcassets/icon_empty_add_norm.imageset/State=norm.pdf

@@ -0,0 +1,579 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+18.428711 116.770592 m
+18.428711 118.790375 20.066071 120.427734 22.085854 120.427734 c
+106.771568 120.427734 l
+108.791351 120.427734 110.428711 118.790375 110.428711 116.770592 c
+110.428711 10.084877 l
+110.428711 8.065086 108.791351 6.427734 106.771568 6.427734 c
+22.085852 6.427734 l
+20.066067 6.427734 18.428711 8.065094 18.428711 10.084877 c
+18.428711 116.770592 l
+h
+W*
+n
+q
+1.000000 0.000000 -0.000000 1.000000 18.428711 6.427734 cm
+0.580392 0.596078 0.611765 scn
+3.657141 1.000000 m
+2.189642 1.000000 1.000000 2.189644 1.000000 3.657143 c
+-1.000000 3.657143 l
+-1.000000 1.085075 1.085071 -1.000000 3.657141 -1.000000 c
+3.657141 1.000000 l
+h
+1.000000 3.657143 m
+1.000000 6.620636 l
+-1.000000 6.620636 l
+-1.000000 3.657143 l
+1.000000 3.657143 l
+h
+1.000000 12.547623 m
+1.000000 18.474602 l
+-1.000000 18.474602 l
+-1.000000 12.547623 l
+1.000000 12.547623 l
+h
+1.000000 24.401588 m
+1.000000 30.328575 l
+-1.000000 30.328575 l
+-1.000000 24.401588 l
+1.000000 24.401588 l
+h
+1.000000 36.255562 m
+1.000000 42.182541 l
+-1.000000 42.182541 l
+-1.000000 36.255562 l
+1.000000 36.255562 l
+h
+1.000000 48.109528 m
+1.000000 54.036507 l
+-1.000000 54.036507 l
+-1.000000 48.109528 l
+1.000000 48.109528 l
+h
+1.000000 59.963490 m
+1.000000 65.890472 l
+-1.000000 65.890472 l
+-1.000000 59.963490 l
+1.000000 59.963490 l
+h
+1.000000 71.817459 m
+1.000000 77.744446 l
+-1.000000 77.744446 l
+-1.000000 71.817459 l
+1.000000 71.817459 l
+h
+1.000000 83.671432 m
+1.000000 89.598427 l
+-1.000000 89.598427 l
+-1.000000 83.671432 l
+1.000000 83.671432 l
+h
+1.000000 95.525414 m
+1.000000 101.452393 l
+-1.000000 101.452393 l
+-1.000000 95.525414 l
+1.000000 95.525414 l
+h
+1.000000 107.379379 m
+1.000000 110.342857 l
+-1.000000 110.342857 l
+-1.000000 107.379379 l
+1.000000 107.379379 l
+h
+1.000000 110.342857 m
+1.000000 111.810356 2.189642 113.000000 3.657143 113.000000 c
+3.657143 115.000000 l
+1.085075 115.000000 -1.000000 112.914932 -1.000000 110.342857 c
+1.000000 110.342857 l
+h
+3.657143 113.000000 m
+6.681633 113.000000 l
+6.681633 115.000000 l
+3.657143 115.000000 l
+3.657143 113.000000 l
+h
+12.730612 113.000000 m
+18.779593 113.000000 l
+18.779593 115.000000 l
+12.730612 115.000000 l
+12.730612 113.000000 l
+h
+24.828571 113.000000 m
+30.877554 113.000000 l
+30.877554 115.000000 l
+24.828571 115.000000 l
+24.828571 113.000000 l
+h
+36.926533 113.000000 m
+42.975513 113.000000 l
+42.975513 115.000000 l
+36.926533 115.000000 l
+36.926533 113.000000 l
+h
+49.024494 113.000000 m
+55.073475 113.000000 l
+55.073475 115.000000 l
+49.024494 115.000000 l
+49.024494 113.000000 l
+h
+61.122459 113.000000 m
+67.171440 113.000000 l
+67.171440 115.000000 l
+61.122459 115.000000 l
+61.122459 113.000000 l
+h
+73.220421 113.000000 m
+79.269394 113.000000 l
+79.269394 115.000000 l
+73.220421 115.000000 l
+73.220421 113.000000 l
+h
+85.318375 113.000000 m
+88.342857 113.000000 l
+88.342857 115.000000 l
+85.318375 115.000000 l
+85.318375 113.000000 l
+h
+88.342857 113.000000 m
+89.810356 113.000000 91.000000 111.810356 91.000000 110.342857 c
+93.000000 110.342857 l
+93.000000 112.914925 90.914932 115.000000 88.342857 115.000000 c
+88.342857 113.000000 l
+h
+91.000000 110.342857 m
+91.000000 107.379364 l
+93.000000 107.379364 l
+93.000000 110.342857 l
+91.000000 110.342857 l
+h
+91.000000 101.452377 m
+91.000000 95.525398 l
+93.000000 95.525398 l
+93.000000 101.452377 l
+91.000000 101.452377 l
+h
+91.000000 89.598412 m
+91.000000 83.671425 l
+93.000000 83.671425 l
+93.000000 89.598412 l
+91.000000 89.598412 l
+h
+91.000000 77.744446 m
+91.000000 71.817459 l
+93.000000 71.817459 l
+93.000000 77.744446 l
+91.000000 77.744446 l
+h
+91.000000 65.890472 m
+91.000000 59.963493 l
+93.000000 59.963493 l
+93.000000 65.890472 l
+91.000000 65.890472 l
+h
+91.000000 54.036510 m
+91.000000 48.109528 l
+93.000000 48.109528 l
+93.000000 54.036510 l
+91.000000 54.036510 l
+h
+91.000000 42.182533 m
+91.000000 36.255547 l
+93.000000 36.255547 l
+93.000000 42.182533 l
+91.000000 42.182533 l
+h
+91.000000 30.328560 m
+91.000000 24.401573 l
+93.000000 24.401573 l
+93.000000 30.328560 l
+91.000000 30.328560 l
+h
+91.000000 18.474586 m
+91.000000 12.547607 l
+93.000000 12.547607 l
+93.000000 18.474586 l
+91.000000 18.474586 l
+h
+91.000000 6.620621 m
+91.000000 3.657143 l
+93.000000 3.657143 l
+93.000000 6.620621 l
+91.000000 6.620621 l
+h
+91.000000 3.657143 m
+91.000000 2.189644 89.810356 1.000000 88.342857 1.000000 c
+88.342857 -1.000000 l
+90.914925 -1.000000 93.000000 1.085068 93.000000 3.657143 c
+91.000000 3.657143 l
+h
+88.342857 1.000000 m
+85.318367 1.000000 l
+85.318367 -1.000000 l
+88.342857 -1.000000 l
+88.342857 1.000000 l
+h
+79.269386 1.000000 m
+73.220406 1.000000 l
+73.220406 -1.000000 l
+79.269386 -1.000000 l
+79.269386 1.000000 l
+h
+67.171425 1.000000 m
+61.122448 1.000000 l
+61.122448 -1.000000 l
+67.171425 -1.000000 l
+67.171425 1.000000 l
+h
+55.073467 1.000000 m
+49.024487 1.000000 l
+49.024487 -1.000000 l
+55.073467 -1.000000 l
+55.073467 1.000000 l
+h
+42.975506 1.000000 m
+36.926525 1.000000 l
+36.926525 -1.000000 l
+42.975506 -1.000000 l
+42.975506 1.000000 l
+h
+30.877542 1.000000 m
+24.828560 1.000000 l
+24.828560 -1.000000 l
+30.877542 -1.000000 l
+30.877542 1.000000 l
+h
+18.779583 1.000000 m
+12.730606 1.000000 l
+12.730606 -1.000000 l
+18.779583 -1.000000 l
+18.779583 1.000000 l
+h
+6.681624 1.000000 m
+3.657141 1.000000 l
+3.657141 -1.000000 l
+6.681624 -1.000000 l
+6.681624 1.000000 l
+h
+3.657141 2.000000 m
+2.741927 2.000000 2.000000 2.741928 2.000000 3.657143 c
+-2.000000 3.657143 l
+-2.000000 0.532791 0.532786 -2.000000 3.657141 -2.000000 c
+3.657141 2.000000 l
+h
+2.000000 3.657143 m
+2.000000 6.620636 l
+-2.000000 6.620636 l
+-2.000000 3.657143 l
+2.000000 3.657143 l
+h
+2.000000 12.547623 m
+2.000000 18.474602 l
+-2.000000 18.474602 l
+-2.000000 12.547623 l
+2.000000 12.547623 l
+h
+2.000000 24.401588 m
+2.000000 30.328575 l
+-2.000000 30.328575 l
+-2.000000 24.401588 l
+2.000000 24.401588 l
+h
+2.000000 36.255562 m
+2.000000 42.182541 l
+-2.000000 42.182541 l
+-2.000000 36.255562 l
+2.000000 36.255562 l
+h
+2.000000 48.109528 m
+2.000000 54.036507 l
+-2.000000 54.036507 l
+-2.000000 48.109528 l
+2.000000 48.109528 l
+h
+2.000000 59.963490 m
+2.000000 65.890472 l
+-2.000000 65.890472 l
+-2.000000 59.963490 l
+2.000000 59.963490 l
+h
+2.000000 71.817459 m
+2.000000 77.744446 l
+-2.000000 77.744446 l
+-2.000000 71.817459 l
+2.000000 71.817459 l
+h
+2.000000 83.671432 m
+2.000000 89.598427 l
+-2.000000 89.598427 l
+-2.000000 83.671432 l
+2.000000 83.671432 l
+h
+2.000000 95.525414 m
+2.000000 101.452393 l
+-2.000000 101.452393 l
+-2.000000 95.525414 l
+2.000000 95.525414 l
+h
+2.000000 107.379379 m
+2.000000 110.342857 l
+-2.000000 110.342857 l
+-2.000000 107.379379 l
+2.000000 107.379379 l
+h
+2.000000 110.342857 m
+2.000000 111.258072 2.741926 112.000000 3.657143 112.000000 c
+3.657143 116.000000 l
+0.532791 116.000000 -2.000000 113.467216 -2.000000 110.342857 c
+2.000000 110.342857 l
+h
+3.657143 112.000000 m
+6.681633 112.000000 l
+6.681633 116.000000 l
+3.657143 116.000000 l
+3.657143 112.000000 l
+h
+12.730612 112.000000 m
+18.779593 112.000000 l
+18.779593 116.000000 l
+12.730612 116.000000 l
+12.730612 112.000000 l
+h
+24.828571 112.000000 m
+30.877554 112.000000 l
+30.877554 116.000000 l
+24.828571 116.000000 l
+24.828571 112.000000 l
+h
+36.926533 112.000000 m
+42.975513 112.000000 l
+42.975513 116.000000 l
+36.926533 116.000000 l
+36.926533 112.000000 l
+h
+49.024494 112.000000 m
+55.073475 112.000000 l
+55.073475 116.000000 l
+49.024494 116.000000 l
+49.024494 112.000000 l
+h
+61.122459 112.000000 m
+67.171440 112.000000 l
+67.171440 116.000000 l
+61.122459 116.000000 l
+61.122459 112.000000 l
+h
+73.220421 112.000000 m
+79.269394 112.000000 l
+79.269394 116.000000 l
+73.220421 116.000000 l
+73.220421 112.000000 l
+h
+85.318375 112.000000 m
+88.342857 112.000000 l
+88.342857 116.000000 l
+85.318375 116.000000 l
+85.318375 112.000000 l
+h
+88.342857 112.000000 m
+89.258072 112.000000 90.000000 111.258072 90.000000 110.342857 c
+94.000000 110.342857 l
+94.000000 113.467209 91.467216 116.000000 88.342857 116.000000 c
+88.342857 112.000000 l
+h
+90.000000 110.342857 m
+90.000000 107.379364 l
+94.000000 107.379364 l
+94.000000 110.342857 l
+90.000000 110.342857 l
+h
+90.000000 101.452377 m
+90.000000 95.525398 l
+94.000000 95.525398 l
+94.000000 101.452377 l
+90.000000 101.452377 l
+h
+90.000000 89.598412 m
+90.000000 83.671425 l
+94.000000 83.671425 l
+94.000000 89.598412 l
+90.000000 89.598412 l
+h
+90.000000 77.744446 m
+90.000000 71.817459 l
+94.000000 71.817459 l
+94.000000 77.744446 l
+90.000000 77.744446 l
+h
+90.000000 65.890472 m
+90.000000 59.963493 l
+94.000000 59.963493 l
+94.000000 65.890472 l
+90.000000 65.890472 l
+h
+90.000000 54.036510 m
+90.000000 48.109528 l
+94.000000 48.109528 l
+94.000000 54.036510 l
+90.000000 54.036510 l
+h
+90.000000 42.182533 m
+90.000000 36.255547 l
+94.000000 36.255547 l
+94.000000 42.182533 l
+90.000000 42.182533 l
+h
+90.000000 30.328560 m
+90.000000 24.401573 l
+94.000000 24.401573 l
+94.000000 30.328560 l
+90.000000 30.328560 l
+h
+90.000000 18.474586 m
+90.000000 12.547607 l
+94.000000 12.547607 l
+94.000000 18.474586 l
+90.000000 18.474586 l
+h
+90.000000 6.620621 m
+90.000000 3.657143 l
+94.000000 3.657143 l
+94.000000 6.620621 l
+90.000000 6.620621 l
+h
+90.000000 3.657143 m
+90.000000 2.741928 89.258072 2.000000 88.342857 2.000000 c
+88.342857 -2.000000 l
+91.467209 -2.000000 94.000000 0.532784 94.000000 3.657143 c
+90.000000 3.657143 l
+h
+88.342857 2.000000 m
+85.318367 2.000000 l
+85.318367 -2.000000 l
+88.342857 -2.000000 l
+88.342857 2.000000 l
+h
+79.269386 2.000000 m
+73.220406 2.000000 l
+73.220406 -2.000000 l
+79.269386 -2.000000 l
+79.269386 2.000000 l
+h
+67.171425 2.000000 m
+61.122448 2.000000 l
+61.122448 -2.000000 l
+67.171425 -2.000000 l
+67.171425 2.000000 l
+h
+55.073467 2.000000 m
+49.024487 2.000000 l
+49.024487 -2.000000 l
+55.073467 -2.000000 l
+55.073467 2.000000 l
+h
+42.975506 2.000000 m
+36.926525 2.000000 l
+36.926525 -2.000000 l
+42.975506 -2.000000 l
+42.975506 2.000000 l
+h
+30.877542 2.000000 m
+24.828560 2.000000 l
+24.828560 -2.000000 l
+30.877542 -2.000000 l
+30.877542 2.000000 l
+h
+18.779583 2.000000 m
+12.730606 2.000000 l
+12.730606 -2.000000 l
+18.779583 -2.000000 l
+18.779583 2.000000 l
+h
+6.681624 2.000000 m
+3.657141 2.000000 l
+3.657141 -2.000000 l
+6.681624 -2.000000 l
+6.681624 2.000000 l
+h
+f
+n
+Q
+Q
+q
+1.000000 0.000000 -0.000000 1.000000 49.000000 49.000000 cm
+0.580392 0.596078 0.611765 scn
+13.333332 13.333334 m
+13.333332 0.000000 l
+16.666666 0.000000 l
+16.666666 13.333334 l
+30.000000 13.333334 l
+30.000000 16.666668 l
+16.666666 16.666668 l
+16.666666 30.000000 l
+13.333333 30.000000 l
+13.333333 16.666668 l
+0.000000 16.666668 l
+0.000000 13.333334 l
+13.333332 13.333334 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  10432
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 128.000000 128.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000010522 00000 n
+0000010546 00000 n
+0000010721 00000 n
+0000010795 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+10854
+%%EOF

+ 19 - 0
PDF Office/PDF Office/Class/PDFTools/ImageToPDF/View/KMBatchProcessingView/KMBatchProcessingView.swift

@@ -12,6 +12,7 @@ class KMBatchProcessingView: NSView {
     
     @IBOutlet weak var addButton: NSButton!
     @IBOutlet weak var tableView: KMBatchProcessingTableView!
+    @IBOutlet weak var selectedFilesView: KMBatchSelectedFilesView!
     
     weak var delegate: KMBatchProcessingViewDelegate?
     var inputType: DataNavigationViewButtonActionType?
@@ -23,6 +24,7 @@ class KMBatchProcessingView: NSView {
     var inputData: [URL]! {
         didSet {
             self.tableView.inputData = inputData
+            self.reloadData()
         }
     }
     
@@ -62,6 +64,21 @@ class KMBatchProcessingView: NSView {
     
     func setup() {
         self.tableView.delegate = self
+        self.selectedFilesView.dragEnd = {[unowned self] (data) in
+            self.inputData = data
+        }
+        self.reloadData()
+    }
+    
+    func reloadData() {
+        if (self.tableView.data != nil) && self.tableView.data!.count != 0 {
+            self.selectedFilesView.isHidden = true
+            self.tableView.isHidden = false
+        } else {
+            self.selectedFilesView.isHidden = false
+            self.tableView.isHidden = true
+        }
+
     }
 }
 
@@ -71,6 +88,7 @@ extension KMBatchProcessingView: KMBatchProcessingViewAction {
     
     @IBAction func cleanAll(_ sender: Any) {
         self.tableView.presenter.cleanAll()
+        self.reloadData()
     }
     
     @IBAction func addFiles(_ sender: Any) {
@@ -107,6 +125,7 @@ extension KMBatchProcessingView: KMBatchProcessingViewAction {
         } completion: { [unowned self] data in
             if data.count != 0 {
                 self.tableView.presenter.addData(data: data)
+                self.reloadData()
             }
         }
 

+ 31 - 25
PDF Office/PDF Office/Class/PDFTools/ImageToPDF/View/KMBatchProcessingView/KMBatchProcessingView.xib

@@ -10,6 +10,7 @@
             <connections>
                 <outlet property="addButton" destination="sDN-qN-YMZ" id="tM1-dB-oja"/>
                 <outlet property="contentView" destination="c22-O7-iKe" id="9zF-lG-sD8"/>
+                <outlet property="selectedFilesView" destination="Btb-75-0Y1" id="UsJ-q1-h2h"/>
                 <outlet property="tableView" destination="OMY-wn-4ox" id="fPx-xC-NN0"/>
             </connections>
         </customObject>
@@ -19,6 +20,27 @@
             <rect key="frame" x="0.0" y="0.0" width="632" height="628"/>
             <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
             <subviews>
+                <customView translatesAutoresizingMaskIntoConstraints="NO" id="GnF-d1-s3v">
+                    <rect key="frame" x="0.0" y="52" width="632" height="576"/>
+                    <subviews>
+                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="OMY-wn-4ox" customClass="KMBatchProcessingTableView" customModule="PDF_Office" customModuleProvider="target">
+                            <rect key="frame" x="0.0" y="0.0" width="632" height="576"/>
+                        </customView>
+                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="Btb-75-0Y1" customClass="KMBatchSelectedFilesView" customModule="PDF_Office" customModuleProvider="target">
+                            <rect key="frame" x="0.0" y="0.0" width="632" height="576"/>
+                        </customView>
+                    </subviews>
+                    <constraints>
+                        <constraint firstItem="OMY-wn-4ox" firstAttribute="leading" secondItem="GnF-d1-s3v" secondAttribute="leading" id="2w7-zD-V8e"/>
+                        <constraint firstItem="Btb-75-0Y1" firstAttribute="top" secondItem="GnF-d1-s3v" secondAttribute="top" id="4Uw-zn-3wj"/>
+                        <constraint firstItem="Btb-75-0Y1" firstAttribute="leading" secondItem="GnF-d1-s3v" secondAttribute="leading" id="DEO-9k-xQu"/>
+                        <constraint firstAttribute="trailing" secondItem="Btb-75-0Y1" secondAttribute="trailing" id="RcT-sB-RCq"/>
+                        <constraint firstAttribute="bottom" secondItem="OMY-wn-4ox" secondAttribute="bottom" id="TPS-w4-KNC"/>
+                        <constraint firstItem="OMY-wn-4ox" firstAttribute="top" secondItem="GnF-d1-s3v" secondAttribute="top" id="fye-I1-Rwh"/>
+                        <constraint firstAttribute="bottom" secondItem="Btb-75-0Y1" secondAttribute="bottom" id="gng-A1-fEu"/>
+                        <constraint firstAttribute="trailing" secondItem="OMY-wn-4ox" secondAttribute="trailing" id="kVO-fM-Hny"/>
+                    </constraints>
+                </customView>
                 <customView translatesAutoresizingMaskIntoConstraints="NO" id="Ucf-BJ-rtF">
                     <rect key="frame" x="0.0" y="0.0" width="632" height="52"/>
                     <subviews>
@@ -37,10 +59,10 @@
                             </connections>
                         </button>
                         <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ZW9-hb-VaF">
-                            <rect key="frame" x="592" y="20" width="20" height="20"/>
+                            <rect key="frame" x="584" y="10" width="32" height="32"/>
                             <constraints>
-                                <constraint firstAttribute="width" constant="20" id="csb-7H-Da8"/>
-                                <constraint firstAttribute="height" constant="20" id="njF-m1-vms"/>
+                                <constraint firstAttribute="width" constant="32" id="csb-7H-Da8"/>
+                                <constraint firstAttribute="height" constant="32" id="njF-m1-vms"/>
                             </constraints>
                             <buttonCell key="cell" type="square" title="clean" bezelStyle="shadowlessSquare" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="ym9-ds-X7L">
                                 <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
@@ -50,39 +72,23 @@
                                 <action selector="cleanAll:" target="-2" id="qHw-Qd-YQ6"/>
                             </connections>
                         </button>
-                        <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="gXl-Ez-OqM">
-                            <rect key="frame" x="552" y="20" width="20" height="20"/>
-                            <constraints>
-                                <constraint firstAttribute="width" constant="20" id="Tqz-UA-Pwo"/>
-                                <constraint firstAttribute="height" constant="20" id="bIb-Iu-tFk"/>
-                            </constraints>
-                            <buttonCell key="cell" type="square" title="Button" bezelStyle="shadowlessSquare" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="82a-fu-nCt">
-                                <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
-                                <font key="font" metaFont="system"/>
-                            </buttonCell>
-                        </button>
                     </subviews>
                     <constraints>
-                        <constraint firstItem="ZW9-hb-VaF" firstAttribute="leading" secondItem="gXl-Ez-OqM" secondAttribute="trailing" constant="20" id="6HS-Po-Nsn"/>
-                        <constraint firstAttribute="bottom" secondItem="gXl-Ez-OqM" secondAttribute="bottom" constant="20" id="AjX-TA-giT"/>
+                        <constraint firstItem="ZW9-hb-VaF" firstAttribute="centerY" secondItem="Ucf-BJ-rtF" secondAttribute="centerY" id="6c3-Mh-hxP"/>
                         <constraint firstAttribute="bottom" secondItem="sDN-qN-YMZ" secondAttribute="bottom" constant="20" id="NIy-eU-hGm"/>
-                        <constraint firstAttribute="trailing" secondItem="ZW9-hb-VaF" secondAttribute="trailing" constant="20" id="Zn7-Jr-0pu"/>
-                        <constraint firstAttribute="bottom" secondItem="ZW9-hb-VaF" secondAttribute="bottom" constant="20" id="l7A-V0-p3o"/>
+                        <constraint firstAttribute="trailing" secondItem="ZW9-hb-VaF" secondAttribute="trailing" constant="16" id="Zn7-Jr-0pu"/>
                         <constraint firstAttribute="height" constant="52" id="ml0-wK-1zH"/>
                         <constraint firstItem="sDN-qN-YMZ" firstAttribute="leading" secondItem="Ucf-BJ-rtF" secondAttribute="leading" constant="20" id="niY-N7-Hks"/>
                     </constraints>
                 </customView>
-                <customView translatesAutoresizingMaskIntoConstraints="NO" id="OMY-wn-4ox" customClass="KMBatchProcessingTableView" customModule="PDF_Office" customModuleProvider="target">
-                    <rect key="frame" x="0.0" y="52" width="632" height="576"/>
-                </customView>
             </subviews>
             <constraints>
                 <constraint firstAttribute="trailing" secondItem="Ucf-BJ-rtF" secondAttribute="trailing" id="2TU-gQ-aEZ"/>
-                <constraint firstItem="OMY-wn-4ox" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" id="Lb9-nN-W1t"/>
-                <constraint firstItem="Ucf-BJ-rtF" firstAttribute="top" secondItem="OMY-wn-4ox" secondAttribute="bottom" id="W25-3P-UAV"/>
-                <constraint firstAttribute="trailing" secondItem="OMY-wn-4ox" secondAttribute="trailing" id="W3e-0s-foJ"/>
+                <constraint firstAttribute="trailing" secondItem="GnF-d1-s3v" secondAttribute="trailing" id="7DB-b0-pWq"/>
+                <constraint firstItem="GnF-d1-s3v" firstAttribute="top" secondItem="c22-O7-iKe" secondAttribute="top" id="Tl8-bb-ncT"/>
                 <constraint firstItem="Ucf-BJ-rtF" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" id="ZYs-zC-oi3"/>
-                <constraint firstItem="OMY-wn-4ox" firstAttribute="top" secondItem="c22-O7-iKe" secondAttribute="top" id="bqE-gb-WDV"/>
+                <constraint firstItem="GnF-d1-s3v" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" id="bAc-gW-qCK"/>
+                <constraint firstItem="Ucf-BJ-rtF" firstAttribute="top" secondItem="GnF-d1-s3v" secondAttribute="bottom" id="jT0-hc-Rzy"/>
                 <constraint firstAttribute="bottom" secondItem="Ucf-BJ-rtF" secondAttribute="bottom" id="xpi-cf-aZu"/>
             </constraints>
             <point key="canvasLocation" x="-452" y="47"/>

+ 130 - 0
PDF Office/PDF Office/Class/PDFTools/ImageToPDF/View/KMBatchProcessingView/SelectedFiles/KMBatchSelectedFilesView.swift

@@ -0,0 +1,130 @@
+//
+//  KMBatchSelectedFilesView.swift
+//  PDF Office
+//
+//  Created by lizhe on 2023/1/29.
+//
+
+import Cocoa
+
+typealias KMBatchSelectedFilesViewCompletion = (_ data: [URL]) -> ()
+class KMBatchSelectedFilesView: NSView {
+    
+    @IBOutlet var contentView: NSView!
+    @IBOutlet weak var imageButton: NSButton!
+    @IBOutlet weak var titleLabel: NSTextField!
+    @IBOutlet weak var subtitleLabel: NSTextField!
+    
+    var data: [URL] = []
+    var dragEnd: KMBatchSelectedFilesViewCompletion?
+    
+    override func draw(_ dirtyRect: NSRect) {
+        super.draw(dirtyRect)
+
+        // Drawing code here.
+    }
+    
+    // MARK: 初始化
+    public required init?(coder decoder: NSCoder) {
+        super.init(coder: decoder)
+        initContentView()
+        setup()
+    }
+    
+    override init(frame frameRect: NSRect) {
+        super.init(frame: frameRect)
+        initContentView()
+        setup()
+    }
+    
+    private func initContentView() {
+        //绑定xib
+        let resource = NSNib(nibNamed: String(describing: KMBatchSelectedFilesView.self),
+                             bundle: Bundle(for: KMBatchSelectedFilesView.self))!
+        resource.instantiate(withOwner: self, topLevelObjects: nil)
+        addSubview(contentView)
+        contentView.translatesAutoresizingMaskIntoConstraints = false
+        NSLayoutConstraint.activate([
+            contentView.topAnchor.constraint(equalTo: topAnchor),
+            contentView.leftAnchor.constraint(equalTo: leftAnchor),
+            contentView.rightAnchor.constraint(equalTo: rightAnchor),
+            contentView.bottomAnchor.constraint(equalTo: bottomAnchor)])
+        contentView.updateConstraintsForSubtreeIfNeeded()
+    }
+    
+    func setup() {
+        self.registerForDraggedTypes([NSPasteboard.PasteboardType.string, NSPasteboard.PasteboardType.fileURL]) //支持拖拽
+    }
+    
+}
+
+protocol KMBatchSelectedFilesViewDrag {}
+extension KMBatchSelectedFilesView: KMBatchSelectedFilesViewDrag {
+    
+    override func draggingEntered(_ sender: NSDraggingInfo) -> NSDragOperation {
+        print("draggingEntered")
+        if self.allowAccept(sender) {
+            return .copy
+        } else {
+            return .move
+        }
+        
+    }
+    
+    override func draggingUpdated(_ sender: NSDraggingInfo) -> NSDragOperation {
+        if self.allowAccept(sender) {
+            return .copy
+        } else {
+            return .move
+        }
+    }
+    
+    override func prepareForDragOperation(_ sender: NSDraggingInfo) -> Bool {
+        return self.allowAccept(sender)
+    }
+    
+    override func performDragOperation(_ sender: NSDraggingInfo) -> Bool {
+        if self.allowAccept(sender) {
+            self.endDrag(sender: sender, info: [:])
+            return true
+        } else {
+            return false
+        }
+    }
+    
+    override func draggingExited(_ sender: NSDraggingInfo?) {
+        print("draggingExited")
+    }
+    
+    func endDrag(sender: NSDraggingInfo, info: NSDictionary) {
+//        CGPoint point = sender.draggedImageLocation;
+//        point.y = sender.draggingLocation.y;
+//
+//        point = [self convertPoint:point fromView:nil];
+    
+        print("endDrag")
+        if (self.dragEnd != nil) {
+            self.dragEnd!(self.data)
+        }
+    }
+    
+    
+    func allowAccept(_ sender: NSDraggingInfo) -> Bool {
+        var allow = false
+        let pasteboard = sender.draggingPasteboard
+        if (pasteboard.types?.contains(.fileURL) == true) {
+            var array: [URL] = []
+            for item in pasteboard.pasteboardItems! {
+                let string = item.string(forType: NSPasteboard.PasteboardType.fileURL)!
+                let url = NSURL(string: string)
+                ///  MARK: 暂时支持PDF格式
+//                if (url?.pathExtension?.lowercased() == "pdf") {
+                    array.append(url! as URL)
+//                }
+            }
+            self.data = array
+            allow = true
+        }
+        return allow
+    }
+}

+ 84 - 0
PDF Office/PDF Office/Class/PDFTools/ImageToPDF/View/KMBatchProcessingView/SelectedFiles/KMBatchSelectedFilesView.xib

@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21507" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21507"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMBatchSelectedFilesView" customModule="PDF_Office" customModuleProvider="target">
+            <connections>
+                <outlet property="contentView" destination="c22-O7-iKe" id="WNY-gE-B99"/>
+                <outlet property="imageButton" destination="STJ-AT-hZ8" id="zQz-NR-i0B"/>
+                <outlet property="subtitleLabel" destination="zH4-UK-9qG" id="B6o-JS-9vD"/>
+                <outlet property="titleLabel" destination="sAL-Vd-XZZ" id="tMW-xI-LeS"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <customView id="c22-O7-iKe">
+            <rect key="frame" x="0.0" y="0.0" width="542" height="472"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <subviews>
+                <customView translatesAutoresizingMaskIntoConstraints="NO" id="Ibq-pW-6fR">
+                    <rect key="frame" x="62" y="136" width="418" height="200"/>
+                    <subviews>
+                        <button translatesAutoresizingMaskIntoConstraints="NO" id="STJ-AT-hZ8">
+                            <rect key="frame" x="145" y="72" width="128" height="128"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="128" id="FPo-kq-4aa"/>
+                                <constraint firstAttribute="width" constant="128" id="SOe-q0-XB4"/>
+                            </constraints>
+                            <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="icon_empty_add_norm" imagePosition="only" alignment="center" imageScaling="proportionallyUpOrDown" inset="2" id="6la-3i-h0B">
+                                <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                <font key="font" metaFont="system"/>
+                            </buttonCell>
+                        </button>
+                        <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="sAL-Vd-XZZ">
+                            <rect key="frame" x="166" y="42" width="86" height="22"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="22" id="ZBC-vg-gHp"/>
+                            </constraints>
+                            <textFieldCell key="cell" lineBreakMode="clipping" title="Selected files" id="KEm-N5-nXy">
+                                <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="zH4-UK-9qG">
+                            <rect key="frame" x="14" y="0.0" width="390" height="40"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="40" id="aPR-g2-3cm"/>
+                            </constraints>
+                            <textFieldCell key="cell" lineBreakMode="clipping" alignment="center" id="iXp-xv-xKg">
+                                <font key="font" metaFont="system"/>
+                                <string key="title">Drop files here or Click Add Files at bottom left button. You can
+ drag files to reorder as you need.</string>
+                                <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                            </textFieldCell>
+                        </textField>
+                    </subviews>
+                    <constraints>
+                        <constraint firstItem="sAL-Vd-XZZ" firstAttribute="centerX" secondItem="Ibq-pW-6fR" secondAttribute="centerX" id="9Y7-jS-EwI"/>
+                        <constraint firstItem="zH4-UK-9qG" firstAttribute="centerX" secondItem="Ibq-pW-6fR" secondAttribute="centerX" id="G28-DZ-VIh"/>
+                        <constraint firstItem="STJ-AT-hZ8" firstAttribute="top" secondItem="Ibq-pW-6fR" secondAttribute="top" id="HWS-Fs-hwa"/>
+                        <constraint firstItem="STJ-AT-hZ8" firstAttribute="centerX" secondItem="Ibq-pW-6fR" secondAttribute="centerX" id="XRB-UH-BSM"/>
+                        <constraint firstAttribute="height" constant="200" id="dRa-O2-ZIE"/>
+                        <constraint firstAttribute="width" constant="418" id="jX2-q2-wWm"/>
+                        <constraint firstItem="sAL-Vd-XZZ" firstAttribute="top" secondItem="STJ-AT-hZ8" secondAttribute="bottom" constant="8" id="lzf-9u-xTI"/>
+                        <constraint firstItem="zH4-UK-9qG" firstAttribute="top" secondItem="sAL-Vd-XZZ" secondAttribute="bottom" constant="2" id="zHD-xY-uIQ"/>
+                    </constraints>
+                </customView>
+            </subviews>
+            <constraints>
+                <constraint firstItem="Ibq-pW-6fR" firstAttribute="centerY" secondItem="c22-O7-iKe" secondAttribute="centerY" id="JnW-cT-aQx"/>
+                <constraint firstItem="Ibq-pW-6fR" firstAttribute="centerX" secondItem="c22-O7-iKe" secondAttribute="centerX" id="gJ7-WH-3iF"/>
+            </constraints>
+            <point key="canvasLocation" x="76" y="12"/>
+        </customView>
+    </objects>
+    <resources>
+        <image name="icon_empty_add_norm" width="128" height="128"/>
+    </resources>
+</document>