Browse Source

【2025】【Edit】水印管理优化

niehaoyu 4 months ago
parent
commit
f39e5c7eb0
15 changed files with 297 additions and 81 deletions
  1. 3 1
      PDF Office/KMComponentLibrary/KMComponentLibrary/View/Card/ComponentCardWatermark/ComponentCardWatermark.swift
  2. 2 2
      PDF Office/KMComponentLibrary/KMComponentLibrary/View/InputNumber/ComponentInputNumber.swift
  3. 0 2
      PDF Office/KMComponentLibrary/KMComponentLibrary/View/InputNumber/ComponentInputNumberProperty.swift
  4. 17 0
      PDF Office/PDF Master/Class/Common/Category/NSString+KMExtension.swift
  5. 1 1
      PDF Office/PDF Master/KMClass/ComponentLibraryDemo/Demo/InputNumberVC.swift
  6. 1 1
      PDF Office/PDF Master/KMClass/KMNPDFPageEdit/KMNPDFInsert/KMNPDFInsertBlankWindowController.swift
  7. 1 1
      PDF Office/PDF Master/KMClass/KMNPDFPageEdit/KMNPDFInsert/KMNPDFInsertPDFWindowController.swift
  8. 2 2
      PDF Office/PDF Master/KMClass/KMNPDFPageEdit/KMNPDFSplit/KMNSplitPDFWindowController.swift
  9. 72 20
      PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideViews/Watermark/New/KMWatermarkController.swift
  10. 137 31
      PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideViews/Watermark/New/Views/KMNWatermarkPropertyController.swift
  11. 3 5
      PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideViews/Watermark/New/Views/KMWatermarkSaveWindow/KMWatermarkSaveWindow.swift
  12. 9 8
      PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideViews/Watermark/New/Views/Model/KMPDFWatermarkData.swift
  13. 0 1
      PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideViews/Watermark/New/Views/Model/KMWatermarkManager.swift
  14. 47 4
      PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideViews/Watermark/New/Views/Templates/KMNWatermarkTemplateController.swift
  15. 2 2
      PDF Office/PDF Master/KMClass/Settings/SettingsGeneralView.swift

+ 3 - 1
PDF Office/KMComponentLibrary/KMComponentLibrary/View/Card/ComponentCardWatermark/ComponentCardWatermark.swift

@@ -189,8 +189,10 @@ public class ComponentCardWatermark: ComponentBaseXibView {
     
     //MARK: - Public Method
     public func reloadData() {
-        refreshUI()
         
+        setupUI()
+        
+        refreshUI()
     }
     
     public func setTarget(_ target: AnyObject?, action: Selector?) {

+ 2 - 2
PDF Office/KMComponentLibrary/KMComponentLibrary/View/InputNumber/ComponentInputNumber.swift

@@ -34,7 +34,7 @@ public class ComponentInputNumber: ComponentBaseXibView {
     
     private let formatter = ComponentNumberFormatter()
     
-    weak open var inputNumberDelegate: ComponentInputNumberDelegate?
+    weak open var delegate: ComponentInputNumberDelegate?
     
     // MARK: 初始化
     deinit {
@@ -236,7 +236,7 @@ public class ComponentInputNumber: ComponentBaseXibView {
             inputField.stringValue = properties.text ?? ""
         }
         
-        self.inputNumberDelegate?.componentInputNumberDidValueChanged?(inputNumber: self)
+        self.delegate?.componentInputNumberDidValueChanged?(inputNumber: self)
     }
     
     //MARK: - TextNotification

+ 0 - 2
PDF Office/KMComponentLibrary/KMComponentLibrary/View/InputNumber/ComponentInputNumberProperty.swift

@@ -68,8 +68,6 @@ public class InputNumberPropertyInfo: ComponentPropertyInfo {
     
 }
 
-
-
 //MARK: - ComponentLibrary
 extension ComponentLibrary {
     func configInputNumberComponent(properties: ComponentInputNumberProperty) -> Void {

+ 17 - 0
PDF Office/PDF Master/Class/Common/Category/NSString+KMExtension.swift

@@ -233,6 +233,23 @@ extension NSString {
         }
         return string
     }
+    
+    func stringByDeleteCharString(_ deleteStr: String) -> String {
+        var result = ""
+        for character in (self as String) {
+            var canAdd = true
+            for deleteChar in (deleteStr as String) {
+                if deleteChar == character {
+                    canAdd = false
+                    break
+                }
+            }
+            if canAdd {
+                result.append(character)
+            }
+        }
+        return result
+    }
 }
 
 extension String {

+ 1 - 1
PDF Office/PDF Master/KMClass/ComponentLibraryDemo/Demo/InputNumberVC.swift

@@ -35,7 +35,7 @@ class InputNumberVC: NSViewController, NSTextFieldDelegate {
         self.minSizeField.intValue = 0
         self.maxSizeField.intValue = 10
           
-        inputNumberView.inputNumberDelegate = self
+        inputNumberView.delegate = self
         
         self.minSizeField.delegate = self
         self.maxSizeField.delegate = self

+ 1 - 1
PDF Office/PDF Master/KMClass/KMNPDFPageEdit/KMNPDFInsert/KMNPDFInsertBlankWindowController.swift

@@ -270,7 +270,7 @@ class KMNPDFInsertBlankWindowController: KMNBaseWindowController {
                                                                           minSize: 1,
                                                                           maxSize: Int(orgDocument?.pageCount ?? 1),
                                                                           text: SettingsManager.sharedInstance.autoSaveMinutes)
-        pageNumInput.inputNumberDelegate = self
+        pageNumInput.delegate = self
         
         let inputWidthProperty: ComponentInputProperty = ComponentInputProperty(size: .s,
                                                                            state:.pressed ,

+ 1 - 1
PDF Office/PDF Master/KMClass/KMNPDFPageEdit/KMNPDFInsert/KMNPDFInsertPDFWindowController.swift

@@ -205,7 +205,7 @@ class KMNPDFInsertPDFWindowController: KMNBaseWindowController {
                                                                           minSize: 1,
                                                                           maxSize: Int(orgDocument?.pageCount ?? 1),
                                                                           text: "")
-        pageNumInput.inputNumberDelegate = self
+        pageNumInput.delegate = self
         
         let inputWithAddonProperty = ComponentInputProperty(size: .s,
                                                             state: .normal,

+ 2 - 2
PDF Office/PDF Master/KMClass/KMNPDFPageEdit/KMNPDFSplit/KMNSplitPDFWindowController.swift

@@ -128,7 +128,7 @@ class KMNSplitPDFWindowController: KMNBaseWindowController {
                                                                           minSize: 1,
                                                                           maxSize: Int(orgDocument?.pageCount ?? 1),
                                                                           text:"1")
-        averagePernInputNumber.inputNumberDelegate = self
+        averagePernInputNumber.delegate = self
         
         averageSplitInputNumber.properties = ComponentInputNumberProperty(alignment: .left,
                                                                           size: .s,
@@ -141,7 +141,7 @@ class KMNSplitPDFWindowController: KMNBaseWindowController {
                                                                           minSize: 1,
                                                                           maxSize: Int(orgDocument?.pageCount ?? 1),
                                                                           text: "1")
-        averageSplitInputNumber.inputNumberDelegate = self
+        averageSplitInputNumber.delegate = self
         
         let inputTagProperty: ComponentInputProperty = ComponentInputProperty(size: .s,
                                                                            state:.pressed ,

+ 72 - 20
PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideViews/Watermark/New/KMWatermarkController.swift

@@ -18,11 +18,11 @@ import KMComponentLibrary
 @objc protocol KMWatermarkControllerDelegate: AnyObject {
     
     @objc optional func kmWatermarkControllerDidUpdateMode(_ view: KMWatermarkController)
-      
+    
 }
 
 class KMWatermarkController: NSViewController {
-
+    
     @IBOutlet var contendView: NSView!
     
     @IBOutlet var preInfoView: NSView!
@@ -36,8 +36,10 @@ class KMWatermarkController: NSViewController {
     
     var pdfDocument: CPDFDocument?
     
+    var currentWatermark: CPDFWatermark?
+    
     weak open var delegate: KMWatermarkControllerDelegate?
-
+    
     public var watermarkMode: KMWaterMarkModeType = .AddWatermark {
         didSet {
             resetUI()
@@ -64,7 +66,7 @@ class KMWatermarkController: NSViewController {
         templatesController.delegate = self
         templatesController.view.isHidden = true
         propertyInfoView.addSubview(templatesController.view)
-
+        
         setupProperty()
     }
     
@@ -90,7 +92,7 @@ class KMWatermarkController: NSViewController {
             propertyController.watermarkMode = watermarkMode
         }
     }
- 
+    
     
     func reloadData() {
         
@@ -99,31 +101,46 @@ class KMWatermarkController: NSViewController {
         
     }
     
-    
-}
-
-//MARK: - KMNWatermarkPropertyControllerDelegate
-extension KMWatermarkController: KMNWatermarkPropertyControllerDelegate {
-    
-    func watermarkPropertyControllerDidUpdate(_ controller: KMNWatermarkPropertyController) {
-        let model = controller.watermarkData
+    func removeWatermark(_ watermark: CPDFWatermark?) {
+        if let tempData = watermark {
+            let document = documentPreview.pdfDocument
+            document?.removeWatermark(tempData)
+            documentPreview.refreshUI()
+        }
         
+    }
+    
+    func waterMarkDataDidUpdated(_ model: KMPDFWatermarkData) {
         let document = documentPreview.pdfDocument
-        
         var watermark = CPDFWatermark()
-         
+        
         if (model.watermarkType == .text) {
             watermark = CPDFWatermark(document: document, type: .text)
             watermark.text = model.text
             watermark.textColor = model.textColor
             watermark.cFont = CPDFFont(familyName: model.fontName, fontStyle: model.fontStyle ?? "Regular")
-            watermark.fontSize = model.fontSize
-            
+            if model.isScale {
+                watermark.setAutoSizeWithPercentage(model.scale)
+            } else {
+                watermark.fontSize = model.fontSize
+            }
         } else if model.watermarkType == .image {
             watermark = CPDFWatermark(document: document, type: .image)
             watermark.image = model.image()
+            
+            if model.isScale {
+                watermark.scale = model.scale
+            } else {
+                watermark.scale = 1
+            }
         }
         
+        watermark.opacity = model.opacity
+        watermark.rotation = model.rotation
+        
+        watermark.tx = model.tx
+        watermark.ty = model.ty
+        
         watermark.isFront = model.isFront
         
         watermark.horizontalPosition = model.horizontalPosition
@@ -142,13 +159,29 @@ extension KMWatermarkController: KMNWatermarkPropertyControllerDelegate {
         
         model.watermark = watermark
         
+        currentWatermark = watermark
+        
+    }
+    
+}
+
+//MARK: - KMNWatermarkPropertyControllerDelegate
+extension KMWatermarkController: KMNWatermarkPropertyControllerDelegate {
+    
+    func watermarkPropertyControllerDidUpdate(_ controller: KMNWatermarkPropertyController) {
+        removeWatermark(currentWatermark)
+        
+        waterMarkDataDidUpdated(controller.watermarkData)
     }
     
     func watermarkPropertyControllerDidChangetoTemplate(_ controller: KMNWatermarkPropertyController) {
         watermarkMode = .Template
+        
+        removeWatermark(currentWatermark)
+        
     }
     
-    func watermarkPropertyControllerSaveTemplateSuccess(_ controller: KMNWatermarkPropertyController) {
+    func watermarkPropertyControllerSaveTemplateSuccess(_ controller: KMNWatermarkPropertyController, _ data: KMPDFWatermarkData) {
         saveTemplateMessage.frame = CGRectMake((CGRectGetWidth(self.view.frame) - saveTemplateMessage.properties.propertyInfo.viewWidth)/2,
                                                CGRectGetHeight(self.view.frame) - saveTemplateMessage.properties.propertyInfo.viewHeight - 8,
                                                saveTemplateMessage.properties.propertyInfo.viewWidth,
@@ -159,6 +192,7 @@ extension KMWatermarkController: KMNWatermarkPropertyControllerDelegate {
         watermarkMode = .Template
         delegate?.kmWatermarkControllerDidUpdateMode?(self)
         
+        templatesController.selectedWatermark = data
         templatesController.reloadData()
     }
     
@@ -166,7 +200,7 @@ extension KMWatermarkController: KMNWatermarkPropertyControllerDelegate {
         watermarkMode = .Template
         
         templatesController.reloadData()
-
+        
     }
     
 }
@@ -174,11 +208,29 @@ extension KMWatermarkController: KMNWatermarkPropertyControllerDelegate {
 extension KMWatermarkController: KMNWatermarkTemplateControllerDelegate {
     func templateControllerDidAddWatermarkData(_ controller: KMNWatermarkTemplateController) {
         watermarkMode = .AddWatermark
+
+        removeWatermark(currentWatermark)
+
+        waterMarkDataDidUpdated(propertyController.watermarkData)
     }
     
     func templateControllerDidEditWatermarkData(_ controller: KMNWatermarkTemplateController, _ watermark: KMPDFWatermarkData) {
         watermarkMode = .EditWatermark
         
+        propertyController.watermarkData = watermark
+        propertyController.reloadData()
+        waterMarkDataDidUpdated(watermark)
+        
+    }
+    
+    func templateControllerDidSelectedChanged(_ controller: KMNWatermarkTemplateController) {
+        removeWatermark(currentWatermark)
+        
+        if let data = controller.selectedWatermark {
+            waterMarkDataDidUpdated(data)
+        } else {
+            currentWatermark = nil
+        }
     }
 }
- 
+

+ 137 - 31
PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideViews/Watermark/New/Views/KMNWatermarkPropertyController.swift

@@ -17,7 +17,7 @@ import KMComponentLibrary
     @objc optional func watermarkPropertyControllerDidChangetoTemplate(_ controller: KMNWatermarkPropertyController)
  
     //成功保存到模板
-    @objc optional func watermarkPropertyControllerSaveTemplateSuccess(_ controller: KMNWatermarkPropertyController)
+    @objc optional func watermarkPropertyControllerSaveTemplateSuccess(_ controller: KMNWatermarkPropertyController, _ data: KMPDFWatermarkData)
 
     //取消修改模板信息
     @objc optional func watermarkPropertyControllerCancelTemplateEdit(_ controller: KMNWatermarkPropertyController)
@@ -142,13 +142,24 @@ class KMNWatermarkPropertyController: NSViewController {
                                                               creatable: true,
                                                               text: "12 pt",
                                                               regexString: "0123456789 pt")
+        var sizeItemArr: [ComponentMenuitemProperty] = []
+        for string in ["6","8","10","12","14",
+                       "16","18","20","22","24",
+                       "26","28","30","32","34",
+                       "36","40","48","64","80",
+                       "96","112"] {
+            let item = ComponentMenuitemProperty(type: .normal, text: string, identifier: string)
+            sizeItemArr.append(item)
+        }
+        fontSizeSelect.updateMenuItemsArr(sizeItemArr)
+        fontSizeSelect.selectItemAtIndex(0)
         fontSizeSelect.delegate = self
         
-        let colorAProperty = ComponentCColorProperty(colorType: .color, state: .normal, isCustom: false, color: NSColor(red: 205/255, green: 205/255, blue: 205/255, alpha: 1))
-        let colorBProperty = ComponentCColorProperty(colorType: .color, state: .normal, isCustom: false, color: NSColor(red: 255/255, green: 173/255, blue: 173/255, alpha: 1))
-        let colorCProperty = ComponentCColorProperty(colorType: .color, state: .normal, isCustom: false, color: NSColor(red: 146/255, green: 222/255, blue: 255/255, alpha: 1))
-        let colorDProperty = ComponentCColorProperty(colorType: .color, state: .normal, isCustom: false, color: NSColor(red: 171/255, green: 247/255, blue: 220/255, alpha: 1))
-        let colorEProperty = ComponentCColorProperty(colorType: .color, state: .normal, isCustom: true, color: NSColor(red: 255/255, green: 221/255, blue: 99/255, alpha: 1))
+        let colorAProperty = ComponentCColorProperty(colorType: .color, state: .normal, isCustom: false, color: KMPDFWatermarkData.watermarkDefaultColors()[0])
+        let colorBProperty = ComponentCColorProperty(colorType: .color, state: .normal, isCustom: false, color: KMPDFWatermarkData.watermarkDefaultColors()[1])
+        let colorCProperty = ComponentCColorProperty(colorType: .color, state: .normal, isCustom: false, color: KMPDFWatermarkData.watermarkDefaultColors()[2])
+        let colorDProperty = ComponentCColorProperty(colorType: .color, state: .normal, isCustom: false, color: KMPDFWatermarkData.watermarkDefaultColors()[3])
+        let colorEProperty = ComponentCColorProperty(colorType: .color, state: .normal, isCustom: true, color: KMPDFWatermarkData.watermarkDefaultColors()[4])
         
         fontColorGroup.setUpWithColorPropertys([colorAProperty, colorBProperty, colorCProperty, colorDProperty], customItemProperty: colorEProperty)
         fontColorGroup.delegate = self
@@ -189,6 +200,7 @@ class KMNWatermarkPropertyController: NSViewController {
             rotateItems.append(item)
         }
         appearance_RotateSelect.updateMenuItemsArr(rotateItems)
+        appearance_RotateSelect.delegate = self
         
         appearance_OpacitySelect.properties = ComponentSelectProperties(size: .s,
                                                                         state: .normal,
@@ -201,6 +213,7 @@ class KMNWatermarkPropertyController: NSViewController {
             opacityItems.append(item)
         }
         appearance_OpacitySelect.updateMenuItemsArr(opacityItems)
+        appearance_OpacitySelect.delegate = self
  
         appearanceScaleCheckbox.properties = ComponentCheckBoxProperty(size: .s, text: KMLocalizedString("Scale relative to target page"), checkboxType: .normal)
         appearanceScaleCheckbox.setTarget(self, action: #selector(checkBoxClicked(_:)))
@@ -216,15 +229,14 @@ class KMNWatermarkPropertyController: NSViewController {
             appearanceScaleItems.append(item)
         }
         appearanceScaleSelect.updateMenuItemsArr(appearanceScaleItems)
+        appearanceScaleSelect.delegate = self
         
         appearanceTopPageRadio.properties = ComponentCheckBoxProperty(size: .s, text: KMLocalizedString("At the top of the page"), checkboxType: .normal)
         appearanceTopPageRadio.setTarget(self, action: #selector(radioClicked(_:)))
         
         appearanceBottomPageRadio.properties = ComponentCheckBoxProperty(size: .s, text: KMLocalizedString("At the bottom of the page"), checkboxType: .normal)
         appearanceBottomPageRadio.setTarget(self, action: #selector(radioClicked(_:)))
-        
-        
-        
+         
         
         //Position
         positionLabel.stringValue = KMLocalizedString("Position (mm)")
@@ -239,12 +251,14 @@ class KMNWatermarkPropertyController: NSViewController {
                                                                  minSize: -1000,
                                                                  maxSize: 1000,
                                                                  text: "0")
+        positionXInput.delegate = self
         
         positionYInput.properties = ComponentInputNumberProperty(alignment: .left,
                                                                  size: .s,
                                                                  minSize: -1000,
                                                                  maxSize: 1000,
                                                                  text: "0")
+        positionYInput.delegate = self
         
         positionTileCheckbox.properties = ComponentCheckBoxProperty(size: .s, text: KMLocalizedString("Tile"), checkboxType: .normal)
         positionTileCheckbox.setTarget(self, action: #selector(checkBoxClicked(_:)))
@@ -254,11 +268,14 @@ class KMNWatermarkPropertyController: NSViewController {
                                                                         minSize: 0,
                                                                         maxSize: 1000,
                                                                         text: "0")
+        positionTileHoriInput.delegate = self
+        
         positionTileVertInput.properties = ComponentInputNumberProperty(alignment: .left,
                                                                         size: .s,
                                                                         minSize: 0,
                                                                         maxSize: 1000,
                                                                         text: "0")
+        positionTileVertInput.delegate = self
         
         
         //Save
@@ -336,13 +353,17 @@ class KMNWatermarkPropertyController: NSViewController {
         appearance_RotateSelect.properties.text = String(format: "%.0f", watermarkData.rotation) + "°"
         appearance_RotateSelect.reloadData()
         
-        appearance_OpacitySelect.properties.text = String(format: "%.0f", watermarkData.opacity) + "%"
+        if watermarkData.opacity > 1 {
+            watermarkData.opacity = 1
+        }
+        appearance_OpacitySelect.properties.text = String(format: "%.0f", watermarkData.opacity*100) + "%"
         appearance_OpacitySelect.reloadData()
         
         appearanceScaleCheckbox.properties.checkboxType = watermarkData.isScale ? .selected : .normal
         appearanceScaleCheckbox.reloadData()
 
         appearanceScaleSelect.properties.isDisabled = watermarkData.isScale ? false : true
+        appearanceScaleSelect.properties.text = String(format: "%.0f", watermarkData.scale*100) + "%"
         appearanceScaleSelect.reloadData()
         
         appearanceTopPageRadio.properties.checkboxType = watermarkData.isFront ? .selected : .normal
@@ -353,6 +374,18 @@ class KMNWatermarkPropertyController: NSViewController {
  
         
         //Position
+        positionXInput.properties.text = String(format: "%.0f", watermarkData.tx)
+        positionXInput.reloadData()
+        
+        positionYInput.properties.text = String(format: "%.0f", watermarkData.ty)
+        positionYInput.reloadData()
+        
+        positionTileHoriInput.properties.text = String(format: "%.0f", watermarkData.horizontalSpacing)
+        positionTileHoriInput.reloadData()
+        
+        positionTileVertInput.properties.text = String(format: "%.0f", watermarkData.verticalSpacing)
+        positionTileVertInput.reloadData()
+        
         if watermarkData.isTilePage {
             positionTileHorImage.image = NSImage(named: "tile_spacing_horiz")
             positionTileVertImage.image = NSImage(named: "tile_spacing_vert")
@@ -372,6 +405,11 @@ class KMNWatermarkPropertyController: NSViewController {
         
     }
     
+    func clearData() {
+        watermarkData = KMPDFWatermarkData.defaultData()
+        
+        reloadData()
+    }
     
     //MARK: - Action
     @objc func leftTopButtonClicked(_ sender: ComponentButton) {
@@ -407,20 +445,27 @@ class KMNWatermarkPropertyController: NSViewController {
     
     @objc func saveButtonClicked(_ sender: ComponentButton) {
         let saveWindow: KMWatermarkSaveWindow = KMWatermarkSaveWindow(windowNibName: "KMWatermarkSaveWindow")
+        if watermarkData.watermarkType == .image {
+            saveWindow.nameValue = watermarkData.imagePath?.lastPathComponent ?? ""
+        } else if watermarkData.watermarkType == .text {
+            saveWindow.nameValue = watermarkData.text ?? ""
+        }
         saveWindow.saveHandler = {[weak self] string in
             guard let weakSelf = self else { return }
             
-            weakSelf.watermarkData.watermarkName = string ?? ""
-            
-            if KMWatermarkManager.defaultManager.addWatermark(watermark: weakSelf.watermarkData) == true {
-                 weakSelf.delegate?.watermarkPropertyControllerSaveTemplateSuccess?(weakSelf)
+            DispatchQueue.main.async {
+                weakSelf.watermarkData.watermarkName = string ?? ""
+                let image = KMWatermarkManager.defaultManager.drawImageAtpageRect(rect: CGRectMake(0, 0, 136, 181), data: weakSelf.watermarkData)
+                weakSelf.watermarkData.resultImage = image
+                
+                if KMWatermarkManager.defaultManager.addWatermark(watermark: weakSelf.watermarkData) == true {
+                    weakSelf.delegate?.watermarkPropertyControllerSaveTemplateSuccess?(weakSelf, weakSelf.watermarkData)
+                }
             }
         }
         saveWindow.own_beginSheetModal(for: view.window) { string in
-        
+            
         }
-        
-
     }
     
     @objc func chooseURLAction(_ sender: NSView) {
@@ -440,18 +485,20 @@ class KMNWatermarkPropertyController: NSViewController {
                     guard !pdf!.isEncrypted else { return }
                     
                     if let image = self.generateThumbnail(for: url) {
-                        let outFolder = KMWatermarkManager.defaultManager.watermarkFolderPath
-                        if let outFolderPath = outFolder?.stringByAppendingPathComponent(self.watermarkData.tag + ".png") {
-                            do {
-                                try?image.pngData()?.write(to: URL(fileURLWithPath: outFolderPath))
-                            } catch {
-                            }
+                        let outFolder = KMWatermarkManager.defaultManager.watermarkFolderPath?.stringByAppendingPathComponent(("temp/" + self.watermarkData.tag))
+                        if (FileManager.default.fileExists(atPath: outFolder!) == false) {
+                            try?FileManager.default.createDirectory(atPath: outFolder!, withIntermediateDirectories: true)
+                        }
+                        let fileName = filePath.getLastComponentDeleteExtension
+                        if let outFolderPath = outFolder?.stringByAppendingPathComponent(fileName + ".png") {
+                            try?image.pngData()?.write(to: URL(fileURLWithPath: outFolderPath))
                             
                             if FileManager.default.fileExists(atPath: outFolderPath) {
                                 self.watermarkData.imagePath = outFolderPath
                                 self.delegate?.watermarkPropertyControllerDidUpdate?(self)
+                                
+                                self.reloadData()
                             }
-                            
                         }
                     }
                 } else {
@@ -472,6 +519,8 @@ class KMNWatermarkPropertyController: NSViewController {
                     self.watermarkData.imagePath = url.path
 
                     self.delegate?.watermarkPropertyControllerDidUpdate?(self)
+                    
+                    self.reloadData()
 
                 }
             }
@@ -527,7 +576,7 @@ extension KMNWatermarkPropertyController: ComponentTabsDelegate {
     }
 }
 
-//MARK: - ComponentCColorDelegate
+//MARK: - ComponentTextareaDelegate
 extension KMNWatermarkPropertyController: ComponentTextareaDelegate {
     func componentTextareaTextDidChange(_ view: ComponentTextarea) {
         watermarkData.text = view.properties.text
@@ -566,7 +615,23 @@ extension KMNWatermarkPropertyController: ComponentSelectDelegate {
             watermarkData.fontStyle = menuItemProperty?.text
         } else if view == fontSizeSelect {
             if let text = menuItemProperty?.text {
-                watermarkData.fontSize = text.stringToCGFloat()
+                let result = text.stringByDeleteCharString(" pt")
+                watermarkData.fontSize = result.stringToCGFloat()
+            }
+        } else if view == appearance_OpacitySelect {
+            if let text = menuItemProperty?.text {
+                let result = text.stringByDeleteCharString("%")
+                watermarkData.opacity = result.stringToCGFloat()/100
+            }
+        } else if view == appearance_RotateSelect {
+            if let text = menuItemProperty?.text {
+                let result = text.stringByDeleteCharString("°")
+                watermarkData.rotation = result.stringToCGFloat()
+            }
+        } else if view == appearanceScaleSelect {
+            if let text = menuItemProperty?.text {
+                let result = text.stringByDeleteCharString("%")
+                watermarkData.scale = result.stringToCGFloat()/100
             }
         }
         
@@ -589,17 +654,32 @@ extension KMNWatermarkPropertyController: ComponentSelectDelegate {
     func componentSelectTextDidEndEditing(_ view: ComponentSelect) {
         if view == fontSizeSelect {
             if let string = view.properties.text {
-                var result = string.replacingOccurrences(of: " ", with: "")
-                result = result.replacingOccurrences(of: "p", with: "")
-                result = result.replacingOccurrences(of: "t", with: "")
+                let result = string.stringByDeleteCharString(" pt")
                 
                 let size = result.stringToCGFloat()
                 watermarkData.fontSize = size
-                reloadData()
                 
-                delegate?.watermarkPropertyControllerDidUpdate?(self)
+            }
+        } else if view == appearance_OpacitySelect {
+            if let text = appearance_OpacitySelect.properties.text {
+                let result = text.stringByDeleteCharString("%")
+                watermarkData.opacity = result.stringToCGFloat()/100
+            }
+        } else if view == appearance_RotateSelect {
+            if let text = appearance_RotateSelect.properties.text {
+                let result = text.stringByDeleteCharString("°")
+                watermarkData.rotation = result.stringToCGFloat()
+            }
+        } else if view == appearanceScaleSelect {
+            if let text = appearanceScaleSelect.properties.text {
+                let result = text.stringByDeleteCharString("%")
+                watermarkData.scale = result.stringToCGFloat()/100
             }
         }
+        reloadData()
+        
+        delegate?.watermarkPropertyControllerDidUpdate?(self)
+        
     }
     
     
@@ -631,3 +711,29 @@ extension KMNWatermarkPropertyController: ComponentCPositionDelegate {
         delegate?.watermarkPropertyControllerDidUpdate?(self)
     }
 }
+
+//MARK: - ComponentInputNumberDelegate
+extension KMNWatermarkPropertyController: ComponentInputNumberDelegate {
+    func componentInputNumberDidValueChanged(inputNumber: ComponentInputNumber?) {
+        if inputNumber == positionXInput {
+            if let text = inputNumber?.properties.text {
+                watermarkData.tx = text.stringToCGFloat()
+            }
+        } else if inputNumber == positionYInput {
+            if let text = inputNumber?.properties.text {
+                watermarkData.ty = text.stringToCGFloat()
+            }
+        } else if inputNumber == positionTileHoriInput {
+            if let text = inputNumber?.properties.text {
+                watermarkData.horizontalSpacing = text.stringToCGFloat()
+            }
+        } else if inputNumber == positionTileVertInput {
+            if let text = inputNumber?.properties.text {
+                watermarkData.verticalSpacing = text.stringToCGFloat()
+            }
+        }
+        reloadData()
+        
+        delegate?.watermarkPropertyControllerDidUpdate?(self)
+    }
+}

+ 3 - 5
PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideViews/Watermark/New/Views/KMWatermarkSaveWindow/KMWatermarkSaveWindow.swift

@@ -20,11 +20,7 @@ class KMWatermarkSaveWindow: KMNBaseWindowController {
     
     public var saveHandler: ((String?) -> Void)!
     
-    public var nameValue: String = "" {
-        didSet {
-            reloadData()
-        }
-    }
+    public var nameValue: String = ""
     
     override func windowDidLoad() {
         super.windowDidLoad()
@@ -37,6 +33,8 @@ class KMWatermarkSaveWindow: KMNBaseWindowController {
     
     override func beginSheetFinish() {
         super.beginSheetFinish()
+     
+        reloadData()
         
         window?.makeFirstResponder(nil)
         

+ 9 - 8
PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideViews/Watermark/New/Views/Model/KMPDFWatermarkData.swift

@@ -20,10 +20,10 @@ import Cocoa
     var imagePath:String? = nil
     
     var isScale: Bool = false
-    var scale: CGFloat = 1
+    var scale: CGFloat = 0.5
     
     var rotation: CGFloat = 0
-    var opacity: CGFloat = 100
+    var opacity: CGFloat = 1
  
     var pageRangeType: KMPageRange = .all
     var pageRangeString: String? = nil
@@ -56,14 +56,14 @@ import Cocoa
         data.fontName = "Helvetica"
         data.fontStyle = "Regular"
         data.fontSize = 12
-        if let color = data.watermarkDefaultColors().first {
+        if let color = KMPDFWatermarkData.watermarkDefaultColors().first {
             data.textColor = color
         }
         
         data.imagePath = nil
         
         data.isScale = false
-        data.scale = 1
+        data.scale = 0.5
     
         data.rotation = 0
         data.opacity = 100
@@ -80,17 +80,18 @@ import Cocoa
         data.isFront = true
         data.isTilePage = false
         
-        data.verticalSpacing = 0
-        data.horizontalSpacing = 0
+        data.verticalSpacing = 60
+        data.horizontalSpacing = 60
         
         data.tag = NSString.tagString()
         
         return data
     }
     
-    func watermarkDefaultColors() -> [NSColor] {
+    class func watermarkDefaultColors() -> [NSColor] {
         
-        let colorA = NSColor(red: 205/255, green: 205/255, blue: 205/255, alpha: 1)
+//        let colorA = NSColor(red: 205/255, green: 205/255, blue: 205/255, alpha: 1)
+        let colorA = NSColor.red
         let colorB = NSColor(red: 255/255, green: 173/255, blue: 173/255, alpha: 1)
         let colorC = NSColor(red: 146/255, green: 222/255, blue: 255/255, alpha: 1)
         let colorD = NSColor(red: 171/255, green: 247/255, blue: 220/255, alpha: 1)

+ 0 - 1
PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideViews/Watermark/New/Views/Model/KMWatermarkManager.swift

@@ -123,7 +123,6 @@ class KMWatermarkManager: NSObject {
                 self.watermarks.insert(watermark, at: 0)
             }
         }
-        
         return result
     }
     

+ 47 - 4
PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideViews/Watermark/New/Views/Templates/KMNWatermarkTemplateController.swift

@@ -14,6 +14,9 @@ import KMComponentLibrary
     
     @objc optional func templateControllerDidEditWatermarkData(_ controller: KMNWatermarkTemplateController, _ watermark: KMPDFWatermarkData)
  
+    //选中内容切换
+    @objc optional func templateControllerDidSelectedChanged(_ controller: KMNWatermarkTemplateController)
+    
 }
 
 class KMNWatermarkTemplateController: NSViewController {
@@ -29,6 +32,8 @@ class KMNWatermarkTemplateController: NSViewController {
     
     weak open var delegate: KMNWatermarkTemplateControllerDelegate?
 
+    var selectedWatermark: KMPDFWatermarkData?
+    
     override func viewDidLoad() {
         super.viewDidLoad()
         // Do view setup here.
@@ -59,6 +64,7 @@ class KMNWatermarkTemplateController: NSViewController {
         collectionView.delegate = self
         collectionView.dataSource = self
         collectionView.allowsEmptySelection = true
+        collectionView.allowsMultipleSelection = false
         
         collectionView.register(KMNWatermarkTemplateItem.self, forItemWithIdentifier: NSUserInterfaceItemIdentifier(rawValue: "KMNWatermarkTemplateItem"))
      }
@@ -75,18 +81,51 @@ class KMNWatermarkTemplateController: NSViewController {
             
             collectionView.isHidden = false
             collectionView.reloadData()
+            
         }
+    }
+    
+    public func updateSelectedState() {
+        if let selData = selectedWatermark {
+            if let index = KMWatermarkManager.defaultManager.watermarks.firstIndex(of: selData) {
+                
+                let indexpath = IndexPath(item: index, section: 0)
+                var set = Set<IndexPath>()
+                set.insert(indexpath)
+                
+                collectionView.selectItems(at: set, scrollPosition: .top)
+            }
+        }
+    }
+     
+    private func collectionViewSelectedChanged() {
+        let indexs = collectionView.selectionIndexPaths
         
+        if indexs.count > 0 {
+            for index in indexs {
+                let data = KMWatermarkManager.defaultManager.watermarks[index.item]
+                selectedWatermark = data
+            }
+        } else {
+            selectedWatermark = nil
+        }
+        
+        delegate?.templateControllerDidSelectedChanged?(self)
     }
     
+    //MARK: - action
     @objc func buttonClicked(_ sender: ComponentButton) {
         if sender == addButton {
+            
+            selectedWatermark = nil
+            reloadData()
+            delegate?.templateControllerDidSelectedChanged?(self)
+            
             delegate?.templateControllerDidAddWatermarkData?(self)
         }
     }
 }
 
-
 //MARK: - NSCollectionViewDelegate, NSCollectionViewDataSource
 extension KMNWatermarkTemplateController: NSCollectionViewDelegate, NSCollectionViewDataSource, NSCollectionViewDelegateFlowLayout {
     
@@ -102,7 +141,11 @@ extension KMNWatermarkTemplateController: NSCollectionViewDelegate, NSCollection
         let item: KMNWatermarkTemplateItem = collectionView.makeItem(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "KMNWatermarkTemplateItem"), for: indexPath) as! KMNWatermarkTemplateItem
         item.delegate = self
         item.watermark = KMWatermarkManager.defaultManager.watermarks[indexPath.item]
-        
+        if let selData = selectedWatermark {
+            if item.watermark == selData {
+                item.isSelected = true
+            }
+        }
         return item
     }
     
@@ -124,11 +167,11 @@ extension KMNWatermarkTemplateController: NSCollectionViewDelegate, NSCollection
     }
     
     public func collectionView(_ collectionView: NSCollectionView, didSelectItemsAt indexPaths: Set<IndexPath>) {
-
+        collectionViewSelectedChanged()
     }
     
     public func collectionView(_ collectionView: NSCollectionView, didDeselectItemsAt indexPaths: Set<IndexPath>) {
-        
+        collectionViewSelectedChanged()
     }
     
 }

+ 2 - 2
PDF Office/PDF Master/KMClass/Settings/SettingsGeneralView.swift

@@ -145,7 +145,7 @@ class SettingsGeneralView: BaseXibView {
                                                                           minSize: 5,
                                                                           maxSize: 99,
                                                                           text: SettingsManager.sharedInstance.autoSaveMinutes)
-        autosaveInputNumberView.inputNumberDelegate = self
+        autosaveInputNumberView.delegate = self
         autosaveLabel.stringValue = KMLocalizedString("minutes(5-99)", comment: "")
         defaultViewerBoxWidthConst.constant = defaultPDFViewerCheckbox.properties.propertyInfo.viewWidth
         reopenBoxWidthConst.constant = reopenFileCheckBox.properties.propertyInfo.viewWidth
@@ -163,7 +163,7 @@ class SettingsGeneralView: BaseXibView {
                                                                           minSize: 10,
                                                                           maxSize: 50,
                                                                           text: String(SettingsManager.sharedInstance.fileListCount))
-        filelistInputNumberView.inputNumberDelegate = self
+        filelistInputNumberView.delegate = self
         filelistSubLabel.stringValue = "(10-50)"
         
         defaultPDFViewerCheckbox.setTarget(self, action: #selector(defaultSettingAction(_:)))