Browse Source

【2025】Home界面搭建,URL创建页面处理

niehaoyu 5 months ago
parent
commit
c3872fa43d
16 changed files with 598 additions and 300 deletions
  1. 1 1
      PDF Office/KMComponentLibrary/KMComponentLibrary.xcodeproj/project.pbxproj
  2. 4 4
      PDF Office/KMComponentLibrary/KMComponentLibrary/Model/ComponentPropertyInfo.swift
  3. 3 0
      PDF Office/KMComponentLibrary/KMComponentLibrary/View/ComponentBaseXibView.swift
  4. 91 42
      PDF Office/KMComponentLibrary/KMComponentLibrary/View/Input/ComponentInput/ComponentInput.swift
  5. 17 8
      PDF Office/KMComponentLibrary/KMComponentLibrary/View/Input/ComponentInput/ComponentInputProperty.swift
  6. 1 1
      PDF Office/KMComponentLibrary/KMComponentLibrary/View/Input/ComponentInputAddon/ComponentInputAddon.swift
  7. 1 2
      PDF Office/KMComponentLibrary/KMComponentLibrary/View/InputNumber/ComponentInputNumber.xib
  8. 0 1
      PDF Office/PDF Master/Class/Home/WindowController/KMURLToPDFWindowController/KMURLToPDFWindowController.swift
  9. 0 169
      PDF Office/PDF Master/KMClass/KMHomeViewController/KMCreatePDFWindowController/KMCreatePDFWindowController.swift
  10. 354 0
      PDF Office/PDF Master/KMClass/KMHomeViewController/KMURLCreatePDFWindowController/KMURLCreatePDFWindowController.swift
  11. 34 2
      PDF Office/PDF Master/KMClass/KMHomeViewController/KMCreatePDFWindowController/KMCreatePDFWindowController.xib
  12. 1 1
      PDF Office/PDF Master/KMClass/KMHomeViewController/Views/KMHomeOpenView/KMHomeOpenView.swift
  13. 12 0
      PDF Office/PDF Master/KMClass/KMHomeViewController/home.xcassets/file_icon.imageset/Contents.json
  14. 60 0
      PDF Office/PDF Master/KMClass/KMHomeViewController/home.xcassets/file_icon.imageset/file_icon.pdf
  15. 19 19
      PDF Office/PDF Reader Pro.xcodeproj/project.pbxproj
  16. 0 50
      PDF Office/PDF Reader Pro.xcodeproj/xcuserdata/kdanmobile.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

+ 1 - 1
PDF Office/KMComponentLibrary/KMComponentLibrary.xcodeproj/project.pbxproj

@@ -676,8 +676,8 @@
 			isa = PBXGroup;
 			children = (
 				BB5A9BF42CB64D4700F64C1F /* ComponentInputWithAddonProperty.swift */,
-				BB5A9BF52CB64D4700F64C1F /* ComponentInputWithAddon.xib */,
 				BB5A9BF62CB64D4700F64C1F /* ComponentInputWithAddon.swift */,
+				BB5A9BF52CB64D4700F64C1F /* ComponentInputWithAddon.xib */,
 			);
 			path = ComponentInputWithAddon;
 			sourceTree = "<group>";

+ 4 - 4
PDF Office/KMComponentLibrary/KMComponentLibrary/Model/ComponentPropertyInfo.swift

@@ -21,10 +21,10 @@ public class ComponentPropertyInfo: NSObject {
     
     //边框角度
     var cornerRadius: CGFloat = 0
-    var cornerRadius_topLeft: CGFloat = 0
-    var cornerRadius_topRight: CGFloat = 0
-    var cornerRadius_bottomLeft: CGFloat = 0
-    var cornerRadius_bottomRight: CGFloat = 0
+    public var cornerRadius_topLeft: CGFloat = 0
+    public var cornerRadius_topRight: CGFloat = 0
+    public var cornerRadius_bottomLeft: CGFloat = 0
+    public var cornerRadius_bottomRight: CGFloat = 0
     
     var borderWidth: CGFloat = 1
  

+ 3 - 0
PDF Office/KMComponentLibrary/KMComponentLibrary/View/ComponentBaseXibView.swift

@@ -87,14 +87,17 @@ public class ComponentBaseXibView: NSView {
     }
     
     public override func mouseEntered(with event: NSEvent) {
+        super.mouseEntered(with: event)
         
     }
     
     public override func mouseMoved(with event: NSEvent) {
+        super.mouseMoved(with: event)
         
     }
     
     public override func mouseExited(with event: NSEvent) {
+        super.mouseExited(with: event)
         
     }
     

+ 91 - 42
PDF Office/KMComponentLibrary/KMComponentLibrary/View/Input/ComponentInput/ComponentInput.swift

@@ -38,6 +38,85 @@ public class ComponentInput: ComponentBaseXibView {
         NotificationCenter.default.removeObserver(self)
         
     }
+    
+    public override func draw(_ dirtyRect: NSRect) {
+        super.draw(dirtyRect)
+        
+        var fillColor: NSColor = self.properties.propertyInfo.color_nor
+        var borderColor: NSColor = self.properties.propertyInfo.borderColor_nor
+        
+        if properties.creatable {
+            if self.properties.state == .normal {
+                fillColor = self.properties.propertyInfo.color_nor
+                borderColor = self.properties.propertyInfo.borderColor_nor
+                
+            } else if self.properties.state == .hover {
+                fillColor = self.properties.propertyInfo.color_hov
+                if self.properties.isError == true {
+                    fillColor = self.properties.propertyInfo.color_error_hov
+                }
+                borderColor = self.properties.propertyInfo.borderColor_hov
+                
+            } else if self.properties.state == .pressed {
+                fillColor = self.properties.propertyInfo.color_active
+                borderColor = self.properties.propertyInfo.borderColor_active
+            }
+        }
+        
+        if self.properties.isDisabled == true {
+            fillColor = self.properties.propertyInfo.color_dis
+            borderColor = self.properties.propertyInfo.borderColor_dis
+        }
+        
+        if self.properties.isError == true {
+            borderColor = self.properties.propertyInfo.borderColor_error
+        }
+        
+        let cornerRadius_topLeft: CGFloat = self.properties.propertyInfo.cornerRadius_topLeft
+        let cornerRadius_topRight: CGFloat = self.properties.propertyInfo.cornerRadius_topRight
+        let cornerRadius_bottomLeft: CGFloat = self.properties.propertyInfo.cornerRadius_bottomLeft
+        let cornerRadius_bottomRight: CGFloat = self.properties.propertyInfo.cornerRadius_bottomRight
+
+        let path = NSBezierPath()
+        path.lineWidth = properties.propertyInfo.borderWidth + 1
+        
+        path.move(to: NSPoint(x: bounds.minX + cornerRadius_bottomLeft, y: bounds.minY))
+        if cornerRadius_bottomLeft > 0 {
+            path.appendArc(from: NSPoint(x: bounds.minX + cornerRadius_bottomLeft, y: bounds.minY), to: NSPoint(x: bounds.minX + cornerRadius_bottomLeft, y: bounds.minY), radius: cornerRadius_bottomLeft) //左下角
+        }
+        
+        if cornerRadius_bottomRight > 0 {
+            path.appendArc(from: NSPoint(x: bounds.maxX, y: bounds.minY), to: NSPoint(x: bounds.maxX, y: bounds.minY + cornerRadius_bottomRight), radius: cornerRadius_bottomRight) //右下角
+        } else {
+            path.line(to: NSPoint(x: bounds.maxX, y: bounds.minY))
+        }
+        
+        if cornerRadius_topRight > 0 {
+            path.appendArc(from: NSPoint(x: bounds.maxX, y: bounds.maxY), to: NSPoint(x: bounds.maxX - cornerRadius_topRight, y: bounds.maxY), radius: cornerRadius_topRight) // 右上角
+        } else {
+            path.line(to: NSPoint(x: bounds.maxX, y: bounds.maxY))
+        }
+        
+        if cornerRadius_topLeft > 0 {
+            path.appendArc(from: NSPoint(x: bounds.minX, y: bounds.maxY), to: NSPoint(x: bounds.minX, y: bounds.maxY - cornerRadius_topLeft), radius: cornerRadius_topLeft) //左上角
+        } else {
+            path.line(to: NSPoint(x: bounds.minX, y: bounds.maxY))
+        }
+        
+        if cornerRadius_bottomLeft > 0 {
+            path.appendArc(from: NSPoint(x: bounds.minX, y: bounds.minY), to: NSPoint(x: bounds.minX + cornerRadius_bottomLeft, y: bounds.minY), radius: cornerRadius_bottomLeft) //左下角
+        } else {
+            path.line(to: NSPoint(x: bounds.minX, y: bounds.minY))
+        }
+        
+        borderColor.setStroke()
+        path.stroke()
+        path.close()
+        fillColor.setFill()
+        path.fill()
+        
+    }
+     
     public required init?(coder decoder: NSCoder) {
         super.init(coder: decoder)
         
@@ -121,6 +200,12 @@ public class ComponentInput: ComponentBaseXibView {
         self.inputField.alignment = self.properties.alignment
         self.inputField.stringValue = self.properties.text
         self.inputField.placeholderString = self.properties.placeholder
+         
+        if self.properties.isDisabled == false && properties.creatable == true {
+            self.inputField.isEditable = true
+        } else {
+            self.inputField.isEditable = false
+        }
         
         self.updateClearButtonState()
         
@@ -128,54 +213,15 @@ public class ComponentInput: ComponentBaseXibView {
     
     func refreshUI() {
         
-        self.contendBox.cornerRadius = self.properties.propertyInfo.cornerRadius
-        self.contendBox.borderWidth = self.properties.propertyInfo.borderWidth
+        self.contendBox.cornerRadius = 0
+        self.contendBox.borderWidth = 0
         
-        var fillColor: NSColor?
-        var borderColor: NSColor?
         var textColor: NSColor? = self.properties.propertyInfo.textColor
-        
-        if self.properties.state == .normal {
-            fillColor = self.properties.propertyInfo.color_nor
-            borderColor = self.properties.propertyInfo.borderColor_nor
-            
-        } else if self.properties.state == .hover {
-            fillColor = self.properties.propertyInfo.color_hov
-            if self.properties.isError == true {
-                fillColor = self.properties.propertyInfo.color_error_hov
-            }
-            borderColor = self.properties.propertyInfo.borderColor_hov
-            
-        } else if self.properties.state == .pressed {
-            fillColor = self.properties.propertyInfo.color_active
-            borderColor = self.properties.propertyInfo.borderColor_active
-            
-        } 
-        
+ 
         if self.properties.isDisabled == true {
-            fillColor = self.properties.propertyInfo.color_dis
-            borderColor = self.properties.propertyInfo.borderColor_dis
             textColor = self.properties.propertyInfo.textColor_dis
         }
         
-        if self.properties.isError == true {
-            borderColor = self.properties.propertyInfo.borderColor_error
-        }
-        
-        if let color = fillColor {
-            self.contendBox.fillColor = color
-        }
-        
-        if let color = borderColor {
-            self.contendBox.borderColor = color
-        }
-    
-        if self.properties.isDisabled == false {
-            self.inputField.isEditable = true
-        } else {
-            self.inputField.isEditable = false
-        }
-        
         self.inputField.font = self.properties.propertyInfo.textFont
         
         if let color = textColor {
@@ -187,9 +233,12 @@ public class ComponentInput: ComponentBaseXibView {
         
         self.updateClearButtonState()
         
+        self.display()
+        
     }
     
     public func reloadData() {
+        
         self.setupUI()
         
         self.refreshUI()

+ 17 - 8
PDF Office/KMComponentLibrary/KMComponentLibrary/View/Input/ComponentInput/ComponentInputProperty.swift

@@ -12,14 +12,15 @@ public class ComponentInputProperty: NSObject {
     
     public var size: ComponentSize = .m
     public var state: ComponentState = .normal
-    public var isError: Bool = false
-    public var showPrefix: Bool = false
-    public var showSuffix: Bool = false
-    public var showClear: Bool = false
-    public var isDisabled: Bool = false
-    public var placeholder: String?
-    public var text: String = ""
+    public var isError: Bool = false //错误提示
+    public var showPrefix: Bool = false //右侧icon
+    public var showSuffix: Bool = false //左侧icon
+    public var showClear: Bool = false //clear icon
+    public var isDisabled: Bool = false //禁用状态
+    public var placeholder: String? //提示文字
+    public var text: String = "" //默认文字
     public var alignment: NSTextAlignment = .left
+    public var creatable: Bool = true            //输入框是否允许编辑
   
     public var propertyInfo = InputPropertyInfo()
     
@@ -32,7 +33,8 @@ public class ComponentInputProperty: NSObject {
                 isDisabled: Bool = false,
                 placeholder: String? = nil,
                 text: String = "",
-                alignment: NSTextAlignment = .left) {
+                alignment: NSTextAlignment = .left,
+                creatable: Bool = true) {
         
         self.size = size
         self.state = state
@@ -44,6 +46,8 @@ public class ComponentInputProperty: NSObject {
         self.placeholder = placeholder
         self.text = text
         self.alignment = alignment
+        self.creatable = creatable
+        
     }
 }
 
@@ -64,6 +68,11 @@ extension ComponentLibrary {
         if let value = ComponentLibrary.shared.getComponentValueFromKey("comp-field/radius") {
             let currentValue = value as! CGFloat
             properties.propertyInfo.cornerRadius = currentValue
+            
+            properties.propertyInfo.cornerRadius_topLeft = currentValue
+            properties.propertyInfo.cornerRadius_topRight = currentValue
+            properties.propertyInfo.cornerRadius_bottomLeft = currentValue
+            properties.propertyInfo.cornerRadius_bottomRight = currentValue
         }
         properties.propertyInfo.borderWidth = 1
         

+ 1 - 1
PDF Office/KMComponentLibrary/KMComponentLibrary/View/Input/ComponentInputAddon/ComponentInputAddon.swift

@@ -66,7 +66,7 @@ public class ComponentInputAddon: ComponentBaseXibView {
             let cornerRadius = max(cornerRadius_topLeft, cornerRadius_topRight)
             
             let path = NSBezierPath()
-            path.lineWidth = borderWidth
+            path.lineWidth = borderWidth + 1
             if self.properties.addOnBefore == false {
                 path.move(to: NSPoint(x: bounds.minX, y: bounds.minY))
                 path.appendArc(from: NSPoint(x: bounds.minX, y: bounds.minY), to: NSPoint(x: bounds.minX + cornerRadius_bottomLeft, y: bounds.minY), radius: cornerRadius_bottomLeft) //左下角

+ 1 - 2
PDF Office/KMComponentLibrary/KMComponentLibrary/View/InputNumber/ComponentInputNumber.xib

@@ -50,8 +50,7 @@
                             </imageView>
                             <textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="wab-bq-yga" customClass="ComponentTextField" customModule="KMComponentLibrary" customModuleProvider="target">
                                 <rect key="frame" x="6" y="11" width="142" height="16"/>
-                                <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" alignment="left" placeholderString="Please enter..." id="d5c-b9-YUt">
-                                    <numberFormatter key="formatter" formatterBehavior="default10_4" usesGroupingSeparator="NO" formatWidth="-1" groupingSize="0" minimumIntegerDigits="1" maximumIntegerDigits="42" id="e0s-DX-3v4"/>
+                                <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" alignment="left" title="0.1" placeholderString="Please enter..." id="d5c-b9-YUt">
                                     <font key="font" metaFont="system"/>
                                     <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
                                     <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>

+ 0 - 1
PDF Office/PDF Master/Class/Home/WindowController/KMURLToPDFWindowController/KMURLToPDFWindowController.swift

@@ -7,7 +7,6 @@
 
 import Cocoa
 
-let kUrlToPDFFolderPath = (try? FileManager.default.url(for: .applicationSupportDirectory, in: .userDomainMask, appropriateFor: nil, create: true).appendingPathComponent(Bundle.main.bundleIdentifier ?? "").appendingPathComponent("WebPage"))?.path ?? ""
 
 
 typealias KMURLToPDFWindowControllerComplete = (_ filePath: String) -> Void

+ 0 - 169
PDF Office/PDF Master/KMClass/KMHomeViewController/KMCreatePDFWindowController/KMCreatePDFWindowController.swift

@@ -1,169 +0,0 @@
-//
-//  KMCreatePDFWindowController.swift
-//  PDF Reader Pro
-//
-//  Created by Niehaoyu on 2024/10/9.
-//
-
-import Cocoa
-import KMComponentLibrary
-
-class KMCreatePDFWindowController: NSWindowController {
-
-    @IBOutlet var titleLabel: NSTextField!
-    
-    @IBOutlet var urlRadio: ComponentRadio!
-    @IBOutlet var fileRadio: ComponentRadio!
-    @IBOutlet var inputView: ComponentInput!
-    
-    @IBOutlet var pageConfigLabel: NSTextField!
-    @IBOutlet var pageSizeLabel: NSTextField!
-    @IBOutlet var pageSizeSelect: ComponentSelect!
-    @IBOutlet var spacingLabel: NSTextField!
-    @IBOutlet var spacingInputNumber: ComponentInputNumber!
-    @IBOutlet var mmLabel: NSTextField!
-    
-    @IBOutlet var cancelButton: ComponentButton!
-    @IBOutlet var openButton: ComponentButton!
-    
-    var _isFromURL: Bool = true
-    
-    private var parentWindow: NSWindow?
-    private var handler: ((String?) -> Void)!
-
-    override func windowDidLoad() {
-        super.windowDidLoad()
-
-        // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
-        
-        self.setUpProperty()
-        
-        self.reloadData()
-    }
-    
-    var isFromURL: Bool {
-        get {
-            return _isFromURL
-        }
-        set {
-            _isFromURL = newValue
-            
-            self.reloadData()
-        }
-    }
-    
-    func setUpProperty() {
-        urlRadio.properties = ComponentCheckBoxProperty(size: .s,
-                                                        state: .normal,
-                                                        text: KMLocalizedString("URL"),
-                                                        checkboxType: .normal)
-        urlRadio.setTarget(self, action: #selector(typeRadioChanged(_:)))
-        
-        fileRadio.properties = ComponentCheckBoxProperty(size: .s,
-                                                        state: .normal,
-                                                        text: KMLocalizedString("File"),
-                                                        checkboxType: .normal)
-        fileRadio.setTarget(self, action: #selector(typeRadioChanged(_:)))
-        
-        inputView.properties = ComponentInputProperty(size: .s,
-                                                      state: .normal,
-                                                      isError: false,
-                                                      placeholder: "")
-
-        pageSizeSelect.properties = ComponentSelectProperties(size: .s, 
-                                                              state: .normal,
-                                                              text: "Automatic resizing")
-        
-        var menuItemArr: [ComponentMenuitemProperty] = []
-        for string in ["Automatically Resize", "4A0 1682 × 2378 mm", "2A0 1189 × 1682 mm", "A0 841 × 1189 mm",
-                       "A1 594 × 841 mm", "A2 420 × 594 mm", "A4 210 × 297 mm", "A5 148 × 210 mm",
-                       "A6 105 × 148 mm", "A7 74 × 105 mm", "A8 52 × 74 mm", "A9 37 × 52 mm", "A10 26 × 37 mm"] {
-            var itemProperty: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false, itemSelected: false, isDisabled: false, leftIcon: false, rightIcon: false, keyEquivalent: nil, text: KMLocalizedString(string, comment: ""))
-            if string == " " {
-                itemProperty = ComponentMenuitemProperty.divider()
-            }
-            menuItemArr.append(itemProperty)
-        }
-        pageSizeSelect.updateMenuItemsArr(menuItemArr)
-        pageSizeSelect.selectItemAtIndex(0)
-        pageSizeSelect.delegate = self
-        
-        spacingInputNumber.properties = ComponentInputNumberProperty(size: .s,
-                                                                     minSize: 0,
-                                                                     maxSize: 1000,
-                                                                     text: "0",
-                                                                     valueType: .floatType)
-        
-        cancelButton.properties = ComponentButtonProperty(type: .default_tertiary,
-                                                          size: .s,
-                                                          state: .normal,
-                                                          buttonText: KMLocalizedString("Cancel"))
-        cancelButton.setTarget(self, action: #selector(cancelButtonClicked(_ :)))
-        
-        openButton.properties = ComponentButtonProperty(type: .primary,
-                                                          size: .s,
-                                                          state: .normal,
-                                                          buttonText: KMLocalizedString("Open"))
-        openButton.setTarget(self, action: #selector(openButtonClicked(_ :)))
-        
-    }
-    
-    func reloadData() {
-        urlRadio.properties.checkboxType = self.isFromURL ? .selected : .normal
-        fileRadio.properties.checkboxType = self.isFromURL ? .normal : .selected
-        
-        if pageSizeSelect.indexOfSelect() == 0 {
-            spacingInputNumber.properties.isDisabled = true
-        } else {
-            spacingInputNumber.properties.isDisabled = false
-        }
-        
-        urlRadio.reloadData()
-        fileRadio.reloadData()
-        
-        spacingInputNumber.reloadData()
-    }
-    
-    //MARK: - Action
-    @objc func typeRadioChanged(_ sender: NSView) {
-        if sender == self.fileRadio {
-            self.isFromURL = false
-        } else if sender == self.urlRadio {
-            self.isFromURL = true
-        }
-    }
-    
-    @objc func cancelButtonClicked(_ sender: NSView) {
-        
-        self.handler?(nil)
-        
-        parentWindow?.endSheet(self.window!)
-    }
-    
-    @objc func openButtonClicked(_ sender: NSView) {
-        
-        self.handler?("")
-        
-        parentWindow?.endSheet(self.window!)
-    }
-    
-    func own_beginSheetModal(for window: NSWindow?, completionHandler handler: ((String?) -> Void)?) {
-        if window != nil {
-            parentWindow = window
-            window!.beginSheet(self.window!) { ModalResponse in
-                self.handler?(nil)
-            }
-        }
-        self.handler = handler
-        self.reloadData()
-    }
-
-}
-
-extension KMCreatePDFWindowController: ComponentSelectDelegate {
-    func componentSelectDidSelect(view: ComponentSelect?, menuItemProperty: ComponentMenuitemProperty?) {
-        
-        self.reloadData()
-        
-    }
-}

+ 354 - 0
PDF Office/PDF Master/KMClass/KMHomeViewController/KMURLCreatePDFWindowController/KMURLCreatePDFWindowController.swift

@@ -0,0 +1,354 @@
+//
+//  KMURLCreatePDFWindowController.swift
+//  PDF Reader Pro
+//
+//  Created by Niehaoyu on 2024/10/9.
+//
+
+import Cocoa
+import KMComponentLibrary
+
+let kUrlToPDFFolderPath = (try? FileManager.default.url(for: .applicationSupportDirectory, in: .userDomainMask, appropriateFor: nil, create: true).appendingPathComponent(Bundle.main.bundleIdentifier ?? "").appendingPathComponent("WebPage"))?.path ?? ""
+
+class KMURLCreatePDFWindowController: NSWindowController {
+
+    @IBOutlet var titleLabel: NSTextField!
+    
+    @IBOutlet var urlRadio: ComponentRadio!
+    @IBOutlet var fileRadio: ComponentRadio!
+    @IBOutlet var inputView: ComponentInput!
+    
+    @IBOutlet var fileInputBGView: NSView!
+    @IBOutlet var fileInputView: ComponentInput!
+    @IBOutlet var fileInputAddon: ComponentInputAddon!
+    
+    @IBOutlet var pageConfigLabel: NSTextField!
+    @IBOutlet var pageSizeLabel: NSTextField!
+    @IBOutlet var pageSizeSelect: ComponentSelect!
+    @IBOutlet var spacingLabel: NSTextField!
+    @IBOutlet var spacingInputNumber: ComponentInputNumber!
+    @IBOutlet var mmLabel: NSTextField!
+    
+    @IBOutlet var cancelButton: ComponentButton!
+    @IBOutlet var openButton: ComponentButton!
+    
+    private var _isFromURL: Bool = true
+    
+    private var parentWindow: NSWindow?
+    private var handler: ((String?) -> Void)!
+    
+    private var posterMaskView: KMBookletMaskView?
+    
+    var filePath: String?
+    var gap: CGFloat = 0
+    var pageSize: CGSize = NSMakeSize(298, 420)
+    
+    override func windowDidLoad() {
+        super.windowDidLoad()
+
+        // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
+        
+        self.setUpProperty()
+        
+        self.reloadData()
+    }
+    
+    var isFromURL: Bool {
+        get {
+            return _isFromURL
+        }
+        set {
+            _isFromURL = newValue
+            
+            self.reloadData()
+        }
+    }
+    
+    func setUpProperty() {
+        urlRadio.properties = ComponentCheckBoxProperty(size: .s,
+                                                        state: .normal,
+                                                        text: KMLocalizedString("URL"),
+                                                        checkboxType: .normal)
+        urlRadio.setTarget(self, action: #selector(typeRadioChanged(_:)))
+        
+        fileRadio.properties = ComponentCheckBoxProperty(size: .s,
+                                                        state: .normal,
+                                                        text: KMLocalizedString("File"),
+                                                        checkboxType: .normal)
+        fileRadio.setTarget(self, action: #selector(typeRadioChanged(_:)))
+        
+        inputView.properties = ComponentInputProperty(size: .s,
+                                                      state: .normal,
+                                                      isError: false,
+                                                      isDisabled: false,
+                                                      placeholder: KMLocalizedString("https://pdfreaderpro.com"))
+        
+        fileInputView.properties = ComponentInputProperty(size: .s,
+                                                          state: .normal,
+                                                          isError: false,
+                                                          isDisabled: false,
+                                                          placeholder: KMLocalizedString("Select File..."),
+                                                          creatable: false)
+        fileInputView.properties.propertyInfo.cornerRadius_topRight = 0
+        fileInputView.properties.propertyInfo.cornerRadius_bottomRight = 0
+        
+        fileInputAddon.properties = ComponentInputAddonProperty(size: .s,
+                                                                state: .normal,
+                                                                addOnBefore: false,
+                                                                onlyRead: false,
+                                                                addonType: .imageWithColor,
+                                                                iconImage: NSImage(named: "file_icon"))
+        fileInputAddon.setTarget(self, action: #selector(chooseURLAction(_ :)))
+        
+        pageSizeSelect.properties = ComponentSelectProperties(size: .s,
+                                                              state: .normal,
+                                                              text: "Automatic resizing")
+        
+        var menuItemArr: [ComponentMenuitemProperty] = []
+        for string in ["Automatically Resize", "4A0 1682 × 2378 mm", "2A0 1189 × 1682 mm", "A0 841 × 1189 mm",
+                       "A1 594 × 841 mm", "A2 420 × 594 mm", "A4 210 × 297 mm", "A5 148 × 210 mm",
+                       "A6 105 × 148 mm", "A7 74 × 105 mm", "A8 52 × 74 mm", "A9 37 × 52 mm", "A10 26 × 37 mm"] {
+            var itemProperty: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false, itemSelected: false, isDisabled: false, leftIcon: false, rightIcon: false, keyEquivalent: nil, text: KMLocalizedString(string, comment: ""))
+            if string == " " {
+                itemProperty = ComponentMenuitemProperty.divider()
+            }
+            menuItemArr.append(itemProperty)
+        }
+        pageSizeSelect.updateMenuItemsArr(menuItemArr)
+        pageSizeSelect.selectItemAtIndex(0)
+        pageSizeSelect.delegate = self
+        
+        spacingInputNumber.properties = ComponentInputNumberProperty(size: .s,
+                                                                     minSize: 0,
+                                                                     maxSize: 1000,
+                                                                     text: "0",
+                                                                     valueType: .floatType)
+        
+        cancelButton.properties = ComponentButtonProperty(type: .default_tertiary,
+                                                          size: .s,
+                                                          state: .normal,
+                                                          buttonText: KMLocalizedString("Cancel"))
+        cancelButton.setTarget(self, action: #selector(cancelButtonClicked(_ :)))
+        
+        openButton.properties = ComponentButtonProperty(type: .primary,
+                                                          size: .s,
+                                                          state: .normal,
+                                                          buttonText: KMLocalizedString("Open"))
+        openButton.setTarget(self, action: #selector(openButtonClicked(_ :)))
+        
+    }
+    
+    func reloadData() {
+        urlRadio.properties.checkboxType = self.isFromURL ? .selected : .normal
+        fileRadio.properties.checkboxType = self.isFromURL ? .normal : .selected
+        
+        fileInputBGView.isHidden = self.isFromURL ? true : false
+        inputView.isHidden = self.isFromURL ? false : true
+        
+        if pageSizeSelect.indexOfSelect() == 0 {
+            spacingInputNumber.properties.isDisabled = true
+        } else {
+            spacingInputNumber.properties.isDisabled = false
+        }
+        
+        cancelButton.properties.state = .normal
+        openButton.properties.state = .normal
+        
+        inputView.reloadData()
+        
+        fileInputView.reloadData()
+        fileInputAddon.reloadData()
+        
+        urlRadio.reloadData()
+        fileRadio.reloadData()
+        
+        spacingInputNumber.reloadData()
+        
+        
+        cancelButton.reloadData()
+        openButton.reloadData()
+    }
+    
+    //MARK: - Action
+    @objc func typeRadioChanged(_ sender: NSView) {
+        if sender == self.fileRadio {
+            self.isFromURL = false
+        } else if sender == self.urlRadio {
+            self.isFromURL = true
+        }
+    }
+    
+    @objc func cancelButtonClicked(_ sender: NSView) {
+        
+        self.handler?(nil)
+        
+        parentWindow?.endSheet(self.window!)
+    }
+    
+    @objc func openButtonClicked(_ sender: NSView) {
+        
+        self.handler?("")
+        
+        parentWindow?.endSheet(self.window!)
+    }
+    
+    @objc func chooseURLAction(_ sender: NSView) {
+        let openPanel = NSOpenPanel()
+        openPanel.allowedFileTypes = ["html", "HTML"]
+        openPanel.allowsMultipleSelection = false
+        openPanel.beginSheetModal(for: self.window!) { [weak self] result in
+             if result == NSApplication.ModalResponse.OK {
+                 if let url = openPanel.url {
+                     self?.fileInputView.properties.text = url.path
+                     self?.fileInputView.reloadData()
+                 }
+            }
+        }
+    }
+    
+    func convertInfoToPDF() {
+        if !FileManager.default.fileExists(atPath: kUrlToPDFFolderPath) {
+            try? FileManager.default.createDirectory(atPath: kUrlToPDFFolderPath, withIntermediateDirectories: false, attributes: nil)
+        }
+
+        var url: URL?
+        var fileName: String?
+        if isFromURL {
+            let urlString = inputView.properties.text
+            var tUrl = URL(string: urlString)
+            if tUrl?.scheme?.count ?? 0 < 1 {
+                tUrl = URL(string: "http://\(urlString)")
+            }
+            url = tUrl
+        } else {
+            url = URL(fileURLWithPath: fileInputView.properties.text)
+            fileName = fileInputView.properties.text.deletingPathExtension.lastPathComponent
+        }
+
+        let string = spacingInputNumber.properties.text ?? ""
+        let unitScale: CGFloat = (595.0 / 21.0) * 2.54
+
+        if string.stringToCGFloat() <= 0 {
+            spacingInputNumber.properties.text = "0"
+        } else if string.stringToCGFloat() * unitScale > pageSize.width / 2 {
+            let maxF = pageSize.width / (string.stringToCGFloat() * 2)
+            spacingInputNumber.properties.text = "\(maxF)"
+        }
+        
+        gap = formatFloat(Float(string.stringToCGFloat() * unitScale)).stringToCGFloat()
+
+        if let url = url {
+            showWaitting()
+            let convert = KMConvertURLToPDF.shareInstance()
+            convert.fileName = fileName ?? ""
+            convert.convertUrl(toPDF: [url], toPath: kUrlToPDFFolderPath, pageSize: pageSize, gap: gap, progress: { value in
+                // Progress update
+            }, completionHandler: { successArray, failArray in
+                self.hideWaitting()
+                if failArray.isEmpty {
+                    if let filePath = successArray.first as? String, FileManager.default.fileExists(atPath: filePath) {
+                        self.filePath = filePath
+
+                    }
+                } else {
+                    let alert = NSAlert()
+                    alert.alertStyle = .critical
+                    alert.informativeText = NSLocalizedString("Conversion Failed", comment: "")
+                    alert.messageText = ""
+                    alert.addButton(withTitle: NSLocalizedString("OK", comment: ""))
+                    alert.runModal()
+                }
+            })
+        }
+    }
+    
+    func showWaitting() {
+        if posterMaskView == nil {
+            posterMaskView = KMBookletMaskView(frame: NSMakeRect(0, 0, window?.frame.size.width ?? 0, window?.frame.size.height ?? 0))
+        }
+        window?.contentView?.addSubview(posterMaskView!)
+    }
+
+    func hideWaitting() {
+        posterMaskView?.removeFromSuperview()
+    }
+    
+    //MARK: - public
+    func own_beginSheetModal(for window: NSWindow?, completionHandler handler: ((String?) -> Void)?) {
+        if window != nil {
+            parentWindow = window
+            window!.beginSheet(self.window!) { ModalResponse in
+                self.handler?(nil)
+            }
+        }
+        self.handler = handler
+        self.reloadData()
+    }
+    
+    override func becomeFirstResponder() -> Bool {
+        return true
+    }
+    
+    func formatFloat(_ f: Float) -> String {
+        if f.truncatingRemainder(dividingBy: 1) == 0 {
+            return String(format: "%.0f", f)
+        } else if (f * 10).truncatingRemainder(dividingBy: 1) == 0 {
+            return String(format: "%.1f", f)
+        } else {
+            return String(format: "%.2f", f)
+        }
+    }
+    
+    func isUrl(_ urlString: String?) -> Bool {
+        guard let urlString = urlString else { return false }
+        
+        // 实现方法有问题,暂不使用
+        var url: String
+        if urlString.count > 4, urlString.prefix(4) == "www." {
+            url = "http://\(urlString)"
+        } else {
+            url = urlString
+        }
+        let urlRegex = "\\bhttps?://[a-zA-Z0-9\\-.]+(?::(\\d+))?(?:(?:/[a-zA-Z0-9\\-._?,'+\\&%$=~*!():@\\\\]*)+)?"
+        let urlTest = NSPredicate(format: "SELF MATCHES %@", urlRegex)
+        return urlTest.evaluate(with: url)
+    }
+ 
+    func urlValueEncode(_ str: String) -> String? {
+        let allowedCharacterSet = CharacterSet(charactersIn: "!*'();:@&=+$,?%#[]{}").inverted
+        return str.addingPercentEncoding(withAllowedCharacters: allowedCharacterSet)
+    }
+}
+
+extension KMURLCreatePDFWindowController: ComponentSelectDelegate {
+    func componentSelectDidSelect(view: ComponentSelect?, menuItemProperty: ComponentMenuitemProperty?) {
+        
+        switch view?.indexOfSelect() {
+        case 0:
+            pageSize = NSMakeSize(298, 420)
+        case 1:
+            pageSize = CGSize(width: 4760, height: 6736)
+        case 2:
+            pageSize = CGSize(width: 3368, height: 4760)
+        case 3:
+            pageSize = CGSize(width: 2380, height: 3368)
+        case 4:
+            pageSize = CGSize(width: 1684, height: 2380)
+        case 5:
+            pageSize = CGSize(width: 1190, height: 1684)
+        case 6:
+            pageSize = CGSize(width: 842, height: 1190)
+        case 7:
+            pageSize = CGSize(width: 595, height: 842)
+        case 8:
+            pageSize = CGSize(width: 420, height: 595)
+        case 9:
+            pageSize = CGSize(width: 297, height: 420)
+        default:
+            pageSize = CGSize(width: 210, height: 297)
+        }
+        
+        self.reloadData()
+        
+    }
+}

+ 34 - 2
PDF Office/PDF Master/KMClass/KMHomeViewController/KMCreatePDFWindowController/KMCreatePDFWindowController.xib

@@ -9,6 +9,9 @@
         <customObject id="-2" userLabel="File's Owner" customClass="KMCreatePDFWindowController" customModule="PDF_Reader_Pro" customModuleProvider="target">
             <connections>
                 <outlet property="cancelButton" destination="IrH-ze-acR" id="ubH-hh-lDb"/>
+                <outlet property="fileInputAddon" destination="Y4C-Yb-N5q" id="ExM-ax-8Sm"/>
+                <outlet property="fileInputBGView" destination="xHI-qa-nPi" id="EX7-ca-Gcm"/>
+                <outlet property="fileInputView" destination="hRu-Zc-QHk" id="Uj9-fA-GZd"/>
                 <outlet property="fileRadio" destination="n3d-fJ-bff" id="vao-hg-ttb"/>
                 <outlet property="inputView" destination="GjE-yq-b12" id="Mns-No-lhr"/>
                 <outlet property="mmLabel" destination="G5B-GM-rTI" id="Z0z-RG-MEW"/>
@@ -25,8 +28,8 @@
         </customObject>
         <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
         <customObject id="-3" userLabel="Application" customClass="NSObject"/>
-        <window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="F0z-JX-Cv5">
-            <windowStyleMask key="styleMask" closable="YES" miniaturizable="YES" resizable="YES" fullSizeContentView="YES"/>
+        <window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" titlebarAppearsTransparent="YES" titleVisibility="hidden" id="F0z-JX-Cv5">
+            <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES" fullSizeContentView="YES"/>
             <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
             <rect key="contentRect" x="196" y="240" width="480" height="320"/>
             <rect key="screenRect" x="0.0" y="0.0" width="1920" height="1055"/>
@@ -81,16 +84,45 @@
                                                 <constraint firstAttribute="height" constant="32" id="TgG-1W-dOo"/>
                                             </constraints>
                                         </customView>
+                                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="xHI-qa-nPi">
+                                            <rect key="frame" x="0.0" y="0.0" width="432" height="32"/>
+                                            <subviews>
+                                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="hRu-Zc-QHk" customClass="ComponentInput" customModule="KMComponentLibrary">
+                                                    <rect key="frame" x="0.0" y="0.0" width="399" height="32"/>
+                                                    <constraints>
+                                                        <constraint firstAttribute="height" constant="32" id="Iaf-dE-FrO"/>
+                                                    </constraints>
+                                                </customView>
+                                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="Y4C-Yb-N5q" customClass="ComponentInputAddon" customModule="KMComponentLibrary">
+                                                    <rect key="frame" x="400" y="0.0" width="32" height="32"/>
+                                                    <constraints>
+                                                        <constraint firstAttribute="height" constant="32" id="13Q-Fo-3Qe"/>
+                                                        <constraint firstAttribute="width" constant="32" id="GmW-lT-nXs"/>
+                                                    </constraints>
+                                                </customView>
+                                            </subviews>
+                                            <constraints>
+                                                <constraint firstItem="Y4C-Yb-N5q" firstAttribute="leading" secondItem="hRu-Zc-QHk" secondAttribute="trailing" constant="1" id="9mA-JH-Ngb"/>
+                                                <constraint firstItem="hRu-Zc-QHk" firstAttribute="top" secondItem="xHI-qa-nPi" secondAttribute="top" id="Gd9-4g-O0L"/>
+                                                <constraint firstAttribute="height" constant="32" id="cBk-at-ndT"/>
+                                                <constraint firstItem="Y4C-Yb-N5q" firstAttribute="centerY" secondItem="xHI-qa-nPi" secondAttribute="centerY" id="drt-oT-Wxl"/>
+                                                <constraint firstAttribute="trailing" secondItem="Y4C-Yb-N5q" secondAttribute="trailing" id="g2B-DK-p3c"/>
+                                                <constraint firstItem="hRu-Zc-QHk" firstAttribute="leading" secondItem="xHI-qa-nPi" secondAttribute="leading" id="jUy-gC-5g0"/>
+                                            </constraints>
+                                        </customView>
                                     </subviews>
                                     <constraints>
                                         <constraint firstItem="n3d-fJ-bff" firstAttribute="top" secondItem="evd-y3-Z2b" secondAttribute="top" id="2or-6q-WIt"/>
+                                        <constraint firstItem="xHI-qa-nPi" firstAttribute="leading" secondItem="evd-y3-Z2b" secondAttribute="leading" id="8CI-Ux-zUb"/>
                                         <constraint firstItem="n3d-fJ-bff" firstAttribute="leading" secondItem="zMB-oT-6ND" secondAttribute="trailing" constant="16" id="DAv-hK-J40"/>
+                                        <constraint firstAttribute="trailing" secondItem="xHI-qa-nPi" secondAttribute="trailing" id="GLm-FD-kjU"/>
                                         <constraint firstAttribute="trailing" secondItem="GjE-yq-b12" secondAttribute="trailing" id="Glt-Dp-QgW"/>
                                         <constraint firstItem="zMB-oT-6ND" firstAttribute="leading" secondItem="evd-y3-Z2b" secondAttribute="leading" id="Gqx-LG-bae"/>
                                         <constraint firstAttribute="height" constant="72" id="HYw-3U-tdu"/>
                                         <constraint firstItem="GjE-yq-b12" firstAttribute="top" secondItem="zMB-oT-6ND" secondAttribute="bottom" constant="8" id="NTr-EC-fll"/>
                                         <constraint firstItem="GjE-yq-b12" firstAttribute="leading" secondItem="evd-y3-Z2b" secondAttribute="leading" id="O03-z9-PCq"/>
                                         <constraint firstItem="zMB-oT-6ND" firstAttribute="top" secondItem="evd-y3-Z2b" secondAttribute="top" id="PYN-Pl-HKE"/>
+                                        <constraint firstItem="xHI-qa-nPi" firstAttribute="top" secondItem="zMB-oT-6ND" secondAttribute="bottom" constant="8" id="vc0-yi-zXy"/>
                                     </constraints>
                                 </customView>
                                 <customView translatesAutoresizingMaskIntoConstraints="NO" id="3rV-Nu-2vp">

+ 1 - 1
PDF Office/PDF Master/KMClass/KMHomeViewController/Views/KMHomeOpenView/KMHomeOpenView.swift

@@ -21,7 +21,7 @@ class KMHomeOpenView: BaseXibView {
     @IBOutlet weak var createFileDropdown: ComponentDropdown!
     
     var groupView: ComponentGroup!
-    var createWC: KMCreatePDFWindowController = KMCreatePDFWindowController(windowNibName: "KMCreatePDFWindowController")
+    var createWC: KMURLCreatePDFWindowController = KMURLCreatePDFWindowController(windowNibName: "KMURLCreatePDFWindowController")
 
     weak open var delegate: KMHomeOpenViewDelegate?
 

+ 12 - 0
PDF Office/PDF Master/KMClass/KMHomeViewController/home.xcassets/file_icon.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "file_icon.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 60 - 0
PDF Office/PDF Master/KMClass/KMHomeViewController/home.xcassets/file_icon.imageset/file_icon.pdf

@@ -0,0 +1,60 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Filter /FlateDecode
+     /Length 3 0 R
+  >>
+stream
+xu“Án1E÷ùŠY#‘Ʊ'[@b
|BTÒ¼J¨ßßëIÇ“ª¯^ù�x®o켇o�ÿÿŽÇŸß¿l_…‡ë×xÿÅtÄ–Îä³gËY­U¥�0‚x·�b.©7;Í*…,á\¤§íy<…«ä®ºÅ–D¥o·P#‘p#ƒb‘m‡dˆ¡&*–ÅÊÔЇòaÙLàðB�I©(>p¸²4n+,±�ö’­E7«è�éþ„v|bm¦-8¼b(ˆÂv¾K9ªRæ²P¯LQX;¦z±~–�pAwE‡)¶^Dà̢͛îrãh„©‚Ë8Û±Ká…Í䨲#è;™¨øb¹—‰� ¬ýëŦcï|ÖM«r´®Î¡­NSN	ƒrXc¦¤¢œ+œ×XZцªU´…Þ�ÅíÇ>1„�§vÛ'2Ä÷ QSÅâ8µìEÞƒóboÙ|ºÚG‚Ãy?³ÜÚž+÷½9„Ç„7\„„OøÐÍ>` )ŒVÐsèïêÐC:áù»ZøÍ/Îl° ˆÚ`
+OáGx„ÚÝ#
+endstream
+endobj
+
+3 0 obj
+  426
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 16.000000 16.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
+0000000544 00000 n
+0000000566 00000 n
+0000000739 00000 n
+0000000813 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+872
+%%EOF

+ 19 - 19
PDF Office/PDF Reader Pro.xcodeproj/project.pbxproj

@@ -4555,12 +4555,12 @@
 		BBB29BCE2AEA190D005F1B6B /* KMToolbarCustomViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BBB29BCB2AEA190D005F1B6B /* KMToolbarCustomViewController.xib */; };
 		BBB29BCF2AEA190E005F1B6B /* KMToolbarCustomViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BBB29BCB2AEA190D005F1B6B /* KMToolbarCustomViewController.xib */; };
 		BBB29BD02AEA190E005F1B6B /* KMToolbarCustomViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BBB29BCB2AEA190D005F1B6B /* KMToolbarCustomViewController.xib */; };
-		BBB2A99D2CB65C8E0066560B /* KMCreatePDFWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB2A99B2CB65C8E0066560B /* KMCreatePDFWindowController.swift */; };
-		BBB2A99E2CB65C8E0066560B /* KMCreatePDFWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB2A99B2CB65C8E0066560B /* KMCreatePDFWindowController.swift */; };
-		BBB2A99F2CB65C8E0066560B /* KMCreatePDFWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB2A99B2CB65C8E0066560B /* KMCreatePDFWindowController.swift */; };
-		BBB2A9A02CB65C8E0066560B /* KMCreatePDFWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BBB2A99C2CB65C8E0066560B /* KMCreatePDFWindowController.xib */; };
-		BBB2A9A12CB65C8E0066560B /* KMCreatePDFWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BBB2A99C2CB65C8E0066560B /* KMCreatePDFWindowController.xib */; };
-		BBB2A9A22CB65C8E0066560B /* KMCreatePDFWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BBB2A99C2CB65C8E0066560B /* KMCreatePDFWindowController.xib */; };
+		BBB2A99D2CB65C8E0066560B /* KMURLCreatePDFWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB2A99B2CB65C8E0066560B /* KMURLCreatePDFWindowController.swift */; };
+		BBB2A99E2CB65C8E0066560B /* KMURLCreatePDFWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB2A99B2CB65C8E0066560B /* KMURLCreatePDFWindowController.swift */; };
+		BBB2A99F2CB65C8E0066560B /* KMURLCreatePDFWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB2A99B2CB65C8E0066560B /* KMURLCreatePDFWindowController.swift */; };
+		BBB2A9A02CB65C8E0066560B /* KMURLCreatePDFWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BBB2A99C2CB65C8E0066560B /* KMURLCreatePDFWindowController.xib */; };
+		BBB2A9A12CB65C8E0066560B /* KMURLCreatePDFWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BBB2A99C2CB65C8E0066560B /* KMURLCreatePDFWindowController.xib */; };
+		BBB2A9A22CB65C8E0066560B /* KMURLCreatePDFWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BBB2A99C2CB65C8E0066560B /* KMURLCreatePDFWindowController.xib */; };
 		BBB2ACE02B5943F800098854 /* Quick Start Guide.pdf in Resources */ = {isa = PBXBuildFile; fileRef = BBB2ACDF2B5943F600098854 /* Quick Start Guide.pdf */; };
 		BBB2ACE12B5943F800098854 /* Quick Start Guide.pdf in Resources */ = {isa = PBXBuildFile; fileRef = BBB2ACDF2B5943F600098854 /* Quick Start Guide.pdf */; };
 		BBB2ACE22B5943F800098854 /* Quick Start Guide.pdf in Resources */ = {isa = PBXBuildFile; fileRef = BBB2ACDF2B5943F600098854 /* Quick Start Guide.pdf */; };
@@ -7287,8 +7287,8 @@
 		BBB14A6229792D6900936EDB /* KMRedactPageRangeContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMRedactPageRangeContentView.swift; sourceTree = "<group>"; };
 		BBB1A3A529F6B66400E54E47 /* NSPanel+KMExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSPanel+KMExtension.swift"; sourceTree = "<group>"; };
 		BBB29BCB2AEA190D005F1B6B /* KMToolbarCustomViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = KMToolbarCustomViewController.xib; sourceTree = "<group>"; };
-		BBB2A99B2CB65C8E0066560B /* KMCreatePDFWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMCreatePDFWindowController.swift; sourceTree = "<group>"; };
-		BBB2A99C2CB65C8E0066560B /* KMCreatePDFWindowController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMCreatePDFWindowController.xib; sourceTree = "<group>"; };
+		BBB2A99B2CB65C8E0066560B /* KMURLCreatePDFWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMURLCreatePDFWindowController.swift; sourceTree = "<group>"; };
+		BBB2A99C2CB65C8E0066560B /* KMURLCreatePDFWindowController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMURLCreatePDFWindowController.xib; sourceTree = "<group>"; };
 		BBB2ACDF2B5943F600098854 /* Quick Start Guide.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = "Quick Start Guide.pdf"; sourceTree = "<group>"; };
 		BBB376952B10A7F9009539CC /* a_2a.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = a_2a.png; sourceTree = "<group>"; };
 		BBB376962B10A7FA009539CC /* a_4a.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = a_4a.png; sourceTree = "<group>"; };
@@ -12320,7 +12320,7 @@
 				BB5A9D292CB6520100F64C1F /* home.xcassets */,
 				BB5A9D2E2CB6520100F64C1F /* KMNHomeViewController.swift */,
 				BB5A9D282CB6520100F64C1F /* KMNHomeViewController.xib */,
-				BBB2A99A2CB65C580066560B /* KMCreatePDFWindowController */,
+				BBB2A99A2CB65C580066560B /* KMURLCreatePDFWindowController */,
 				BBB2A9992CB65C440066560B /* Views */,
 			);
 			path = KMHomeViewController;
@@ -13346,13 +13346,13 @@
 			path = Views;
 			sourceTree = "<group>";
 		};
-		BBB2A99A2CB65C580066560B /* KMCreatePDFWindowController */ = {
+		BBB2A99A2CB65C580066560B /* KMURLCreatePDFWindowController */ = {
 			isa = PBXGroup;
 			children = (
-				BBB2A99B2CB65C8E0066560B /* KMCreatePDFWindowController.swift */,
-				BBB2A99C2CB65C8E0066560B /* KMCreatePDFWindowController.xib */,
+				BBB2A99B2CB65C8E0066560B /* KMURLCreatePDFWindowController.swift */,
+				BBB2A99C2CB65C8E0066560B /* KMURLCreatePDFWindowController.xib */,
 			);
-			path = KMCreatePDFWindowController;
+			path = KMURLCreatePDFWindowController;
 			sourceTree = "<group>";
 		};
 		BBB376942B10A7EA009539CC /* images */ = {
@@ -15072,7 +15072,7 @@
 				BBFBE6C528DD7B98008B2335 /* Main.storyboard in Resources */,
 				9F0201752A1B488C00C9B673 /* KMAITranslationVC.xib in Resources */,
 				BB853CAE2AF8FA67009C20C1 /* KMHeaderFooterManagerWindowController.xib in Resources */,
-				BBB2A9A02CB65C8E0066560B /* KMCreatePDFWindowController.xib in Resources */,
+				BBB2A9A02CB65C8E0066560B /* KMURLCreatePDFWindowController.xib in Resources */,
 				9F0201812A1BAC1600C9B673 /* KMAIRewritingVC.xib in Resources */,
 				AD53AF932BF1BCA300DCFFFC /* KMLoadingView.xib in Resources */,
 				BB1B0AD42B4FC6E900889528 /* KMFunctionGuideSingleController.xib in Resources */,
@@ -15533,7 +15533,7 @@
 				AD85D1A82AF09864000F4D28 /* KMHomeQuickToolsWindowController.xib in Resources */,
 				BB69C95D299116FD0001A9B1 /* five_line_score.pdf in Resources */,
 				BB9EA1542B1ECD0F00EAFD9B /* KMBatchOperateImageToPDFViewController.xib in Resources */,
-				BBB2A9A12CB65C8E0066560B /* KMCreatePDFWindowController.xib in Resources */,
+				BBB2A9A12CB65C8E0066560B /* KMURLCreatePDFWindowController.xib in Resources */,
 				ADE86ABB2B0343F100414DFA /* KMWatermarkView.xib in Resources */,
 				8942F7FC2926089200389627 /* KMSignatureViewController.xib in Resources */,
 				BBA922392B4E97540061057A /* KMPurchaseFirstTrialWindowController.xib in Resources */,
@@ -16181,7 +16181,7 @@
 				BB65A0842AF8FEA1003A27A0 /* KMBatchOperateRemoveHeaderFooterViewController.xib in Resources */,
 				BB8810632B4F74DD00AFA63E /* KMRepeatTrialAlertController.xib in Resources */,
 				BB49ED13293F462E00C82CA2 /* KMConvertImageWindowController.xib in Resources */,
-				BBB2A9A22CB65C8E0066560B /* KMCreatePDFWindowController.xib in Resources */,
+				BBB2A9A22CB65C8E0066560B /* KMURLCreatePDFWindowController.xib in Resources */,
 				ADE86A7D2B0221E100414DFA /* KMSecurityWindowController.xib in Resources */,
 				AD53AF952BF1BCA300DCFFFC /* KMLoadingView.xib in Resources */,
 				9F00CCBB2A2F1E0F00AC462E /* dsa_priv.pem in Resources */,
@@ -17429,7 +17429,7 @@
 				AD0FA50229A8E36200EDEB50 /* KMLightMemberAlertView.swift in Sources */,
 				9F0CB53D2986571A00007028 /* KMDesignToken+Typography.swift in Sources */,
 				9F1FE4AB29406E4700E952CA /* CTBrowserWindow.m in Sources */,
-				BBB2A99D2CB65C8E0066560B /* KMCreatePDFWindowController.swift in Sources */,
+				BBB2A99D2CB65C8E0066560B /* KMURLCreatePDFWindowController.swift in Sources */,
 				BB3A66962B071B0300575343 /* KMSnapshotTableViewCell.swift in Sources */,
 				BBFE6E65293097A600142C01 /* KMPageRangePickerWindowController.swift in Sources */,
 				AD199DEF2B23121000D56FEE /* KMPrintPamphletView.swift in Sources */,
@@ -18357,7 +18357,7 @@
 				BB897266294C724D0045787C /* KMWatermarkAdjectiveOutsideView.swift in Sources */,
 				BBF38A5B294F2B760086D025 /* KMWatermarkPositionView.swift in Sources */,
 				BBFBE74628DD7DB7008B2335 /* AppDelegate.swift in Sources */,
-				BBB2A99E2CB65C8E0066560B /* KMCreatePDFWindowController.swift in Sources */,
+				BBB2A99E2CB65C8E0066560B /* KMURLCreatePDFWindowController.swift in Sources */,
 				BBC4F9EB2AEB58290098A1A8 /* KMAlertWindowController.swift in Sources */,
 				BB6719EA2AD2A57C003D44D5 /* CPDFLinkAnnotation+PDFListView.swift in Sources */,
 				BB67EE2A2B54FFEF00573BF0 /* ASIDownloadCache.m in Sources */,
@@ -19903,7 +19903,7 @@
 				9F0CB49129683DEE00007028 /* KMPropertiesPanelLineSubVC.swift in Sources */,
 				BB49ECEB293F32A400C82CA2 /* KMConvertWordSettingView.swift in Sources */,
 				9F8539C829430AC400DF644E /* KMToolbarRightView.swift in Sources */,
-				BBB2A99F2CB65C8E0066560B /* KMCreatePDFWindowController.swift in Sources */,
+				BBB2A99F2CB65C8E0066560B /* KMURLCreatePDFWindowController.swift in Sources */,
 				BBB9428D2BA2CB6A00542373 /* KMAdsInfo.swift in Sources */,
 				ADA910302A272CEA003352F0 /* KMImageOptimization.swift in Sources */,
 				BB49ECEF293F3B0D00C82CA2 /* KMConvertOCRSettingItemView.swift in Sources */,

+ 0 - 50
PDF Office/PDF Reader Pro.xcodeproj/xcuserdata/kdanmobile.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -3,54 +3,4 @@
    uuid = "0D48DA72-BDA3-43AF-A2EF-0972354CCC1F"
    type = "1"
    version = "2.0">
-   <Breakpoints>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
-            uuid = "BE758C60-0316-49F2-8884-F210BA1C38A3"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "KMComponentLibrary/KMComponentLibrary/View/InputNumber/ComponentInputNumber.swift"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "210"
-            endingLineNumber = "210"
-            landmarkName = "inputFieldStringDidChanged()"
-            landmarkType = "7">
-         </BreakpointContent>
-      </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
-            uuid = "A8F9D27A-F88A-4FCF-89AA-7084505C2B79"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "KMComponentLibrary/KMComponentLibrary/View/InputNumber/ComponentInputNumber.swift"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "338"
-            endingLineNumber = "338"
-            landmarkName = "componentStepperDidIncrease(stepper:)"
-            landmarkType = "7">
-         </BreakpointContent>
-      </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
-            uuid = "7AA57CBE-33C6-42C3-BC3F-852B55C4E190"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "KMComponentLibrary/KMComponentLibrary/View/InputNumber/ComponentInputNumber.swift"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "335"
-            endingLineNumber = "335"
-            landmarkName = "componentStepperDidIncrease(stepper:)"
-            landmarkType = "7">
-         </BreakpointContent>
-      </BreakpointProxy>
-   </Breakpoints>
 </Bucket>