Переглянути джерело

Merge branch 'develop_PDFReaderProNew' of git.kdan.cc:Mac_PDF/PDF_Office into develop_PDFReaderProNew

niehaoyu 1 рік тому
батько
коміт
f209f88c10
29 змінених файлів з 4189 додано та 641 видалено
  1. 14 0
      PDF Office/PDF Master Pro/PDF-Reader-Pro-Edition.entitlements
  2. 2 2
      PDF Office/PDF Master/AppDelegate.swift
  3. 239 112
      PDF Office/PDF Master/Class/Common/LineInspector/KMLineInspector.swift
  4. 11 0
      PDF Office/PDF Master/Class/KMLightMember/InAppPurchase/Appstore/KMInAppPurchaseManager.swift
  5. 663 0
      PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/AnnotationProperty/ViewController/FormProperties/KMAnnotationButtonWidgetAppearanceViewController.swift
  6. 274 0
      PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/AnnotationProperty/ViewController/FormProperties/KMAnnotationButtonWidgetAppearanceViewController.xib
  7. 32 2
      PDF Office/PDF Master/Class/Preference/Controller/KMNotesPreferences.swift
  8. 318 3
      PDF Office/PDF Master/Class/Preference/Tools/KMPreferenceManager.swift
  9. 86 32
      PDF Office/PDF Master/Class/Preference/View/KMLineWell.swift
  10. 0 0
      PDF Office/PDF Master/PDF_Reader_Pro DMG-Bridging-Header.h
  11. 26 15
      PDF Office/PDF Master/PDF_Master Pro-Bridging-Header.h
  12. 159 221
      PDF Office/PDF Reader Pro.xcodeproj/project.pbxproj
  13. 101 0
      PDF Office/PDF Reader Pro.xcodeproj/xcshareddata/xcschemes/PDF Reader Pro DMG.xcscheme
  14. 101 0
      PDF Office/PDF Reader Pro.xcodeproj/xcshareddata/xcschemes/PDF Reader Pro Edition.xcscheme
  15. 101 0
      PDF Office/PDF Reader Pro.xcodeproj/xcshareddata/xcschemes/PDF Reader Pro.xcscheme
  16. 10 10
      PDF Office/PDF Reader Pro.xcodeproj/xcuserdata/kdanmobile.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
  17. 0 5
      PDF Office/PDF Reader Pro.xcodeproj/xcuserdata/kdanmobile.xcuserdatad/xcschemes/xcschememanagement.plist
  18. 1597 202
      PDF Office/PDF Reader Pro.xcodeproj/xcuserdata/lizhe.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
  19. 11 0
      PDF Office/PDF Reaer Pro Edition/Assets.xcassets/AccentColor.colorset/Contents.json
  20. 58 0
      PDF Office/PDF Reaer Pro Edition/Assets.xcassets/AppIcon.appiconset/Contents.json
  21. 6 0
      PDF Office/PDF Reaer Pro Edition/Assets.xcassets/Contents.json
  22. 24 0
      PDF Office/PDF Reaer Pro Edition/ContentView.swift
  23. 4 4
      PDF Office/PDF Master Pro/PDF_ Master_Pro.entitlements
  24. 17 0
      PDF Office/PDF Reaer Pro Edition/PDF_Reaer_Pro_EditionApp.swift
  25. 6 0
      PDF Office/PDF Reaer Pro Edition/Preview Content/Preview Assets.xcassets/Contents.json
  26. 0 33
      PDF Office/PDF-Master-Pro-Info.plist
  27. 5 0
      PDF Office/PDF-Office-Pro-Info.plist
  28. 0 0
      PDF Office/PDF-Reader-Pro-DMG-Info.plist
  29. 324 0
      PDF Office/PDF-Reader-Pro-Edition-Info.plist

+ 14 - 0
PDF Office/PDF Master Pro/PDF-Reader-Pro-Edition.entitlements

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>com.apple.security.app-sandbox</key>
+	<true/>
+	<key>com.apple.security.files.user-selected.read-write</key>
+	<true/>
+	<key>com.apple.security.network.client</key>
+	<true/>
+	<key>com.apple.security.print</key>
+	<true/>
+</dict>
+</plist>

Різницю між файлами не показано, бо вона завелика
+ 2 - 2
PDF Office/PDF Master/AppDelegate.swift


+ 239 - 112
PDF Office/PDF Master/Class/Common/LineInspector/KMLineInspector.swift

@@ -17,20 +17,19 @@ enum KMLineChangeAction: Int {
 }
 
 class KMLineInspector: NSWindowController {
-    private let LINEWIDTH_KEY = "style"
-    private let STYLE_KEY = "lineWidth"
+    private let LINEWIDTH_KEY = "lineWidth"
+    private let STYLE_KEY = "style"
     private let DASHPATTERN_KEY = "dashPattern"
     private let STARTLINESTYLE_KEY = "startLineStyle"
     private let ENDLINESTYLE_KEY = "endLineStyle"
     private let ACTION_KEY = "action"
     
     private let SKLineInspectorFrameAutosaveName = "SKLineInspector"
-    let SKLineInspectorLineAttributeDidChangeNotification = "SKLineInspectorLineAttributeDidChangeNotification"
+    
+    public static let lineAttributeDidChangeNotification = NSNotification.Name("SKLineInspectorLineAttributeDidChangeNotification")
     
     /*
      + (BOOL)sharedLineInspectorExists;
-
-     - (void)setAnnotationStyle:(PDFAnnotation *)annotation;
      */
     
     private var _currentLineChangeAction: KMLineChangeAction = .lineWidth
@@ -67,6 +66,8 @@ class KMLineInspector: NSWindowController {
         set {
             if (abs(self.lineWidth - newValue) > 0.00001) {
                 self._lineWidth = newValue
+                self.lineWell?.lineWidth = newValue
+                
                 self._notifyChangeAction(.lineWidth)
             }
         }
@@ -80,6 +81,8 @@ class KMLineInspector: NSWindowController {
         set {
             if (newValue != self._style) {
                 self._style = newValue
+                self.lineWell?.style = CPDFBorderStyle(rawValue: newValue) ?? .solid
+                
                 self._notifyChangeAction(.style)
             }
         }
@@ -93,6 +96,8 @@ class KMLineInspector: NSWindowController {
         set {
             if (newValue != self.startLineStyle) {
                 self._startLineStyle = newValue
+                self.lineWell?.startLineStyle = CPDFLineStyle(rawValue: newValue) ?? .none
+                
                 self._notifyChangeAction(.startLineStyle)
             }
         }
@@ -106,6 +111,8 @@ class KMLineInspector: NSWindowController {
         set {
             if (newValue != self.endLineStyle) {
                 self._endLineStyle = newValue
+                self.lineWell?.endLineStyle = CPDFLineStyle(rawValue: newValue) ?? .none
+                
                 self._notifyChangeAction(.endLineStyle)
             }
         }
@@ -118,6 +125,8 @@ class KMLineInspector: NSWindowController {
         set {
             if newValue != self._dashPattern && (newValue.isEmpty == false || self._dashPattern.isEmpty == false) {
                 self._dashPattern = newValue
+                
+                self.lineWell?.dashPattern = newValue as NSArray
                 self._notifyChangeAction(.dashPattern)
             }
         }
@@ -125,41 +134,27 @@ class KMLineInspector: NSWindowController {
     
     static let shared = KMLineInspector(windowNibName: "LineInspector")
     
-    /*
-
-     - (void)setAnnotationStyle:(PDFAnnotation *)annotation {
-         NSString *type = [annotation type];
-         if ([type isEqualToString:SKNFreeTextString] || [type isEqualToString:SKNCircleString] || [type isEqualToString:SKNSquareString] || [type isEqualToString:SKNLineString] || [type isEqualToString:SKNInkString]) {
-             [self setLineWidth:[annotation border] ? [[annotation border] lineWidth] : 0.0];
-             [self setDashPattern:[[annotation border] dashPattern]];
-             [self setStyle:[annotation border] ? [[annotation border] style] : 0];
-         }
-         if ([type isEqualToString:SKNLineString]) {
-             [self setStartLineStyle:[(PDFAnnotationLine *)annotation startLineStyle]];
-             [self setEndLineStyle:[(PDFAnnotationLine *)annotation endLineStyle]];
-         }
-     }
-     */
-    
     override func windowDidLoad() {
         super.windowDidLoad()
         
-        self.labelFields = [self.labelField1, self.labelField2, self.labelField3, self.labelField4, self.labelField5]
+        self._initDefalutValue()
+        self._initLayoutUI()
+        self._initValues()
+        self._initActions()
         
-        self.style = CPDFBorderStyle.solid.rawValue
-        self.lineWidth = 1.0
-        self.dashPattern = []
-        self.startLineStyle = CPDFLineStyle.none.rawValue
-        self.endLineStyle = CPDFLineStyle.none.rawValue
-        self._currentLineChangeAction = .no
+        self._initStyleImages()
+        self._initStartImages()
+        self._initEndImages()
+    }
     
-        self.lineWell.canActivate = false
-//        self.lineWell.bind(NSBindingName(rawValue: KMLineWell.widthKey), to: self, withKeyPath: LINEWIDTH_KEY)
-//        self.lineWell.bind(NSBindingName(KMLineWell.styleKey), to: self, withKeyPath: STYLE_KEY)
-//        self.lineWell.bind(NSBindingName(KMLineWell.dashPatternKey), to: self, withKeyPath: DASHPATTERN_KEY)
-//        self.lineWell.bind(NSBindingName(KMLineWell.startLineStyleKey), to: self, withKeyPath: STARTLINESTYLE_KEY)
-//        self.lineWell.bind(NSBindingName(KMLineWell.endLineStyleKey), to: self, withKeyPath: ENDLINESTYLE_KEY)
-        
+    private func _initLayoutUI() {
+        let dw = KMAutoSizeLabelFields(labelFields, [lineWidthSlider, lineWidthField, styleButton, dashPatternField, startLineStyleButton, endLineStyleButton], false)
+        if (abs(dw) > 0.0) {
+            KMResizeWindow(self.window!, dw)
+        }
+    }
+    
+    private func _initDefalutValue() {
         self.styleButton.setHelp(KMLocalizedString("Solid line style", "Tool tip message"), for: CPDFBorderStyle.solid.rawValue)
         self.styleButton.setHelp(KMLocalizedString("Dashed line style", "Tool tip message"), for: CPDFBorderStyle.dashed.rawValue)
         self.styleButton.setHelp(KMLocalizedString("Beveled line style", "Tool tip message"), for: CPDFBorderStyle.beveled.rawValue)
@@ -180,13 +175,44 @@ class KMLineInspector: NSWindowController {
         self.endLineStyleButton.setHelp(KMLocalizedString("Open arrow end line style", "Tool tip message"), for: CPDFLineStyle.openArrow.rawValue)
         self.endLineStyleButton.setHelp(KMLocalizedString("Closed arrow end line style", "Tool tip message"), for: CPDFLineStyle.closedArrow.rawValue)
         
-        let dw = KMAutoSizeLabelFields(labelFields, [lineWidthSlider, lineWidthField, styleButton, dashPatternField, startLineStyleButton, endLineStyleButton], false)
-        if (fabs(dw) > 0.0) {
-            KMResizeWindow(self.window!, dw)
-        }
-        
         self.windowFrameAutosaveName = SKLineInspectorFrameAutosaveName
-
+        self._currentLineChangeAction = .no
+        
+        self.lineWidthField.formatter = NumberFormatter()
+        self.dashPatternField.formatter = NumberFormatter()
+    }
+    
+    private func _initValues() {
+        self.labelFields = [self.labelField1, self.labelField2, self.labelField3, self.labelField4, self.labelField5]
+        
+        self.lineWell.canActivate = false
+        self.lineWell.lineWidth = self.lineWidth
+        self.lineWell.style = CPDFBorderStyle(rawValue: self.style) ?? .solid
+        self.lineWell.dashPattern = self.dashPattern as NSArray
+        self.lineWell.startLineStyle = CPDFLineStyle(rawValue: self.startLineStyle) ?? .none
+        self.lineWell.endLineStyle = CPDFLineStyle(rawValue: self.endLineStyle) ?? .none
+        
+        self.lineWidthSlider.floatValue = Float(self.lineWidth)
+        self.lineWidthField.stringValue = "\(self.lineWidth)"
+        self.styleButton.selectedSegment = self.style
+        self.startLineStyleButton.selectedSegment = self.startLineStyle
+        self.endLineStyleButton.selectedSegment = self.endLineStyle
+    }
+    
+    private func _initActions() {
+        self.lineWidthSlider.target = self
+        self.lineWidthSlider.action = #selector(lineWidthSliderAction)
+        self.styleButton.target = self
+        self.styleButton.action = #selector(styleAction)
+        self.startLineStyleButton.target = self
+        self.startLineStyleButton.action = #selector(startLineStyleAction)
+        self.endLineStyleButton.target = self
+        self.endLineStyleButton.action = #selector(endLineStyleAction)
+        self.lineWidthField.delegate = self
+        self.dashPatternField.delegate = self
+    }
+    
+    private func _initStyleImages() {
         var image: NSImage?
         var size = NSMakeSize(29.0, 12.0)
         image = NSImage.image(with: size, drawingHandler: { rect in
@@ -285,8 +311,11 @@ class KMLineInspector: NSWindowController {
             return true
         })
         self.styleButton.setImage(image, forSegment: CPDFBorderStyle.underline.rawValue)
-
-        size = NSMakeSize(24.0, 12.0)
+    }
+    
+    private func _initStartImages() {
+        var image: NSImage?
+        var size = NSMakeSize(24.0, 12.0)
         image = NSImage.image(with: size, drawingHandler: { dstRect in
             let path = NSBezierPath()
             path.move(to: NSMakePoint(20.0, 6.0))
@@ -298,17 +327,6 @@ class KMLineInspector: NSWindowController {
         })
         self.startLineStyleButton.setImage(image, forSegment: CPDFLineStyle.none.rawValue)
         
-        image = NSImage.image(with: size, drawingHandler: { dstRect in
-            let path = NSBezierPath()
-            path.move(to: NSMakePoint(4.0, 6.0))
-            path.line(to: NSMakePoint(16.0, 6.0))
-            path.lineWidth = 2.0
-            NSColor.black.setStroke()
-            path.stroke()
-            return true
-        })
-        self.endLineStyleButton.setImage(image, forSegment: CPDFLineStyle.none.rawValue)
-        
         image = NSImage.image(with: size, drawingHandler: { rect in
             let path = NSBezierPath()
             path.move(to: NSMakePoint(20.0, 6.0))
@@ -319,116 +337,140 @@ class KMLineInspector: NSWindowController {
             path.stroke()
             return true
         })
-        self.startLineStyleButton.setImage(image, forSegment: CPDFLineStyle.square.rawValue)
-
+        // CPDFLineStyle.square.rawValue
+        self.startLineStyleButton.setImage(image, forSegment: 1)
+        
         image = NSImage.image(with: size, drawingHandler: { dstRect in
             let path = NSBezierPath()
-            path.move(to: NSMakePoint(4.0, 6.0))
-            path.line(to: NSMakePoint(16.0, 6.0))
-            path.appendRect(NSMakeRect(13.0, 3.0, 6.0, 6.0))
+            path.move(to: NSMakePoint(20.0, 6.0))
+            path.line(to: NSMakePoint(8.0, 6.0))
+            path.appendOval(in: NSMakeRect(5.0, 3.0, 6.0, 6.0))
             path.lineWidth = 2.0
             NSColor.black.setStroke()
             path.stroke()
             return true
         })
-        self.endLineStyleButton.setImage(image, forSegment: CPDFLineStyle.square.rawValue)
+        // CPDFLineStyle.circle.rawValue
+        self.startLineStyleButton.setImage(image, forSegment: 2)
         
         image = NSImage.image(with: size, drawingHandler: { dstRect in
             let path = NSBezierPath()
             path.move(to: NSMakePoint(20.0, 6.0))
             path.line(to: NSMakePoint(8.0, 6.0))
-            path.appendOval(in: NSMakeRect(5.0, 3.0, 6.0, 6.0))
+            path.move(to: NSMakePoint(12.0, 6.0))
+            path.line(to: NSMakePoint(8.0, 10.0))
+            path.line(to: NSMakePoint(4.0, 6.0))
+            path.line(to: NSMakePoint(8.0, 2.0))
+            path.close()
             path.lineWidth = 2.0
-            NSColor.black.setStroke()
             path.stroke()
             return true
         })
-        self.startLineStyleButton.setImage(image, forSegment: CPDFLineStyle.circle.rawValue)
+        // CPDFLineStyle.diamond.rawValue
+        self.startLineStyleButton.setImage(image, forSegment: 3)
         
         image = NSImage.image(with: size, drawingHandler: { dstRect in
             let path = NSBezierPath()
-            path.move(to: NSMakePoint(4.0, 6.0))
-            path.line(to: NSMakePoint(16.0, 6.0))
-            path.appendOval(in: NSMakeRect(13.0, 3.0, 6.0, 6.0))
+            path.move(to: NSMakePoint(20.0, 6.0))
+            path.line(to: NSMakePoint(8.0, 6.0))
+            path.move(to: NSMakePoint(14.0, 3.0))
+            path.line(to: NSMakePoint(8.0, 6.0))
+            path.line(to: NSMakePoint(14.0, 9.0))
             path.lineWidth = 2.0
             NSColor.black.setStroke()
             path.stroke()
             return true
         })
-        self.endLineStyleButton.setImage(image, forSegment: CPDFLineStyle.circle.rawValue)
+        // CPDFLineStyle.openArrow.rawValue
+        self.startLineStyleButton.setImage(image, forSegment: 4)
         
         image = NSImage.image(with: size, drawingHandler: { dstRect in
             let path = NSBezierPath()
             path.move(to: NSMakePoint(20.0, 6.0))
             path.line(to: NSMakePoint(8.0, 6.0))
-            path.move(to: NSMakePoint(12.0, 6.0))
-            path.line(to: NSMakePoint(8.0, 10.0))
-            path.line(to: NSMakePoint(4.0, 6.0))
-            path.line(to: NSMakePoint(8.0, 2.0))
+            path.move(to: NSMakePoint(14.0, 3.0))
+            path.line(to: NSMakePoint(8.0, 6.0))
+            path.line(to: NSMakePoint(14.0, 9.0))
             path.close()
-            path.lineWidth = 2.0
+            path.lineWidth = 2
+            NSColor.black.setStroke()
             path.stroke()
             return true
         })
-        self.startLineStyleButton.setImage(image, forSegment: CPDFLineStyle.diamond.rawValue)
-        
+        // CPDFLineStyle.closedArrow.rawValue
+        self.startLineStyleButton.setImage(image, forSegment: 5)
+    }
+    
+    private func _initEndImages() {
+        var image: NSImage?
+        var size = NSMakeSize(24.0, 12.0)
         image = NSImage.image(with: size, drawingHandler: { dstRect in
             let path = NSBezierPath()
             path.move(to: NSMakePoint(4.0, 6.0))
             path.line(to: NSMakePoint(16.0, 6.0))
-            path.move(to: NSMakePoint(12.0, 6.0))
-            path.line(to: NSMakePoint(16.0, 10.0))
-            path.line(to: NSMakePoint(20.0, 6.0))
-            path.line(to: NSMakePoint(16.0, 2.0))
-            path.close()
             path.lineWidth = 2.0
+            NSColor.black.setStroke()
             path.stroke()
             return true
         })
-        self.endLineStyleButton.setImage(image, forSegment: CPDFLineStyle.diamond.rawValue)
-        
+        self.endLineStyleButton.setImage(image, forSegment: CPDFLineStyle.none.rawValue)
+
         image = NSImage.image(with: size, drawingHandler: { dstRect in
             let path = NSBezierPath()
-            path.move(to: NSMakePoint(20.0, 6.0))
-            path.line(to: NSMakePoint(8.0, 6.0))
-            path.move(to: NSMakePoint(14.0, 3.0))
-            path.line(to: NSMakePoint(8.0, 6.0))
-            path.line(to: NSMakePoint(14.0, 9.0))
+            path.move(to: NSMakePoint(4.0, 6.0))
+            path.line(to: NSMakePoint(16.0, 6.0))
+            path.appendRect(NSMakeRect(13.0, 3.0, 6.0, 6.0))
             path.lineWidth = 2.0
             NSColor.black.setStroke()
             path.stroke()
             return true
         })
-        self.startLineStyleButton.setImage(image, forSegment: CPDFLineStyle.openArrow.rawValue)
+        // CPDFLineStyle.square.rawValue
+        self.endLineStyleButton.setImage(image, forSegment: 1)
         
         image = NSImage.image(with: size, drawingHandler: { dstRect in
             let path = NSBezierPath()
             path.move(to: NSMakePoint(4.0, 6.0))
             path.line(to: NSMakePoint(16.0, 6.0))
-            path.move(to: NSMakePoint(10.0, 3.0))
-            path.line(to: NSMakePoint(16.0, 6.0))
-            path.line(to: NSMakePoint(10.0, 9.0))
-            path.lineWidth = 2
+            path.appendOval(in: NSMakeRect(13.0, 3.0, 6.0, 6.0))
+            path.lineWidth = 2.0
             NSColor.black.setStroke()
             path.stroke()
             return true
         })
-        self.endLineStyleButton.setImage(image, forSegment: CPDFLineStyle.openArrow.rawValue)
+        // CPDFLineStyle.circle.rawValue
+        self.endLineStyleButton.setImage(image, forSegment: 2)
         
         image = NSImage.image(with: size, drawingHandler: { dstRect in
             let path = NSBezierPath()
-            path.move(to: NSMakePoint(20.0, 6.0))
-            path.line(to: NSMakePoint(8.0, 6.0))
-            path.move(to: NSMakePoint(14.0, 3.0))
-            path.line(to: NSMakePoint(8.0, 6.0))
-            path.line(to: NSMakePoint(14.0, 9.0))
+            path.move(to: NSMakePoint(4.0, 6.0))
+            path.line(to: NSMakePoint(16.0, 6.0))
+            path.move(to: NSMakePoint(12.0, 6.0))
+            path.line(to: NSMakePoint(16.0, 10.0))
+            path.line(to: NSMakePoint(20.0, 6.0))
+            path.line(to: NSMakePoint(16.0, 2.0))
             path.close()
+            path.lineWidth = 2.0
+            path.stroke()
+            return true
+        })
+        // CPDFLineStyle.diamond.rawValue
+        self.endLineStyleButton.setImage(image, forSegment: 3)
+        
+        image = NSImage.image(with: size, drawingHandler: { dstRect in
+            let path = NSBezierPath()
+            path.move(to: NSMakePoint(4.0, 6.0))
+            path.line(to: NSMakePoint(16.0, 6.0))
+            path.move(to: NSMakePoint(10.0, 3.0))
+            path.line(to: NSMakePoint(16.0, 6.0))
+            path.line(to: NSMakePoint(10.0, 9.0))
             path.lineWidth = 2
             NSColor.black.setStroke()
             path.stroke()
             return true
         })
-        self.startLineStyleButton.setImage(image, forSegment: CPDFLineStyle.closedArrow.rawValue)
+        // CPDFLineStyle.openArrow.rawValue
+        self.endLineStyleButton.setImage(image, forSegment: 4)
         
         image = NSImage.image(with: size, drawingHandler: { dstRect in
             let path = NSBezierPath()
@@ -443,27 +485,90 @@ class KMLineInspector: NSWindowController {
             path.stroke()
             return true
         })
-        self.endLineStyleButton.setImage(image, forSegment: CPDFLineStyle.closedArrow.rawValue)
+        // CPDFLineStyle.closedArrow.rawValue
+        self.endLineStyleButton.setImage(image, forSegment: 5)
     }
     
-    
-    /*
-     - (void)setNilValueForKey:(NSString *)key {
-         if ([key isEqualToString:LINEWIDTH_KEY]) {
-             [self setValue:[NSNumber numberWithDouble:0.0] forKey:key];
-         } else if ([key isEqualToString:STYLE_KEY] || [key isEqualToString:STARTLINESTYLE_KEY] || [key isEqualToString:ENDLINESTYLE_KEY]) {
-             [self setValue:[NSNumber numberWithInteger:0] forKey:key];
-         } else {
-             [super setNilValueForKey:key];
-         }
+    override func setNilValueForKey(_ key: String) {
+        if key == LINEWIDTH_KEY {
+            self.setValue(0.0, forKey: key)
+        } else if key == STYLE_KEY || key == STARTLINESTYLE_KEY || key == ENDLINESTYLE_KEY {
+            self.setValue(0, forKey: key)
+        } else {
+            super.setNilValueForKey(key)
+        }
      }
-
-     */
     
     override func value(forUndefinedKey key: String) -> Any? {
         KMPrint("forUndefinedKey: \(key)")
     }
 
+    func setAnnotationStyle(_ annotation: CPDFAnnotation) {
+        let type = annotation.type
+        // SKNLineString
+        if type == SKNFreeTextString || type == SKNCircleString || type == SKNSquareString || type == SKNLine_NoneString || type == SKNInkString {
+            if let border = annotation.border {
+                self.lineWidth = border.lineWidth
+                self.style = border.style.rawValue
+            } else {
+                self.lineWidth = 0.0
+                self.style = 0
+            }
+            self.dashPattern = (annotation.border.dashPattern as? [CGFloat]) ?? []
+        }
+        // SKNLineString
+        if type == SKNLine_NoneString {
+            if let anno = annotation as? CPDFLineAnnotation {
+                self.startLineStyle = anno.startLineStyle.rawValue
+                self.endLineStyle = anno.endLineStyle.rawValue
+            }
+        }
+    }
+    
+    // MARK: - Actions
+    
+    @objc func lineWidthSliderAction(_ sender: NSSlider) {
+        self.lineWidth = sender.floatValue.cgFloat
+        self.lineWidthField.stringValue = String(format: "%.0f", sender.floatValue)
+    }
+    
+    @objc func styleAction(_ sender: NSSegmentedControl) {
+        self.style = sender.selectedSegment
+    }
+    
+    @objc func startLineStyleAction(_ sender: NSSegmentedControl) {
+        let index = sender.selectedSegment
+        if index == 0 {
+            self.startLineStyle = CPDFLineStyle.none.rawValue
+        } else if index == 1 {
+            self.startLineStyle = CPDFLineStyle.square.rawValue
+        } else if index == 2 {
+            self.startLineStyle = CPDFLineStyle.circle.rawValue
+        } else if index == 3 {
+            self.startLineStyle = CPDFLineStyle.diamond.rawValue
+        } else if index == 4 {
+            self.startLineStyle = CPDFLineStyle.openArrow.rawValue
+        } else if index == 5 {
+            self.startLineStyle = CPDFLineStyle.closedArrow.rawValue
+        }
+    }
+    
+    @objc func endLineStyleAction(_ sender: NSSegmentedControl) {
+        let index = sender.selectedSegment
+        if index == 0 {
+            self.endLineStyle = CPDFLineStyle.none.rawValue
+        } else if index == 1 {
+            self.endLineStyle = CPDFLineStyle.square.rawValue
+        } else if index == 2 {
+            self.endLineStyle = CPDFLineStyle.circle.rawValue
+        } else if index == 3 {
+            self.endLineStyle = CPDFLineStyle.diamond.rawValue
+        } else if index == 4 {
+            self.endLineStyle = CPDFLineStyle.openArrow.rawValue
+        } else if index == 5 {
+            self.endLineStyle = CPDFLineStyle.closedArrow.rawValue
+        }
+    }
 }
 
 // MARK: - Private Methods
@@ -482,8 +587,30 @@ extension KMLineInspector {
         responder?.perform(selector, with: self)
         
         let userInfo = [ACTION_KEY : NSNumber(value: action.rawValue)]
-        NotificationCenter.default.post(name: NSNotification.Name(rawValue: SKLineInspectorLineAttributeDidChangeNotification), object: self, userInfo: userInfo)
+        NotificationCenter.default.post(name: Self.lineAttributeDidChangeNotification, object: self, userInfo: userInfo)
         
         self._currentLineChangeAction = .no
     }
 }
+
+extension KMLineInspector: NSTextFieldDelegate {
+    func controlTextDidChange(_ obj: Notification) {
+        if self.lineWidthField.isEqual(to: obj.object) {
+            let value = self.lineWidthField.doubleValue
+            if value < self.lineWidthSlider.minValue {
+                self.lineWidth = self.lineWidthSlider.minValue
+                self.lineWidthField.stringValue = String(format: "%.0f", self.lineWidth)
+            } else if value > self.lineWidthSlider.maxValue {
+                self.lineWidth = self.lineWidthSlider.maxValue
+                self.lineWidthField.stringValue = String(format: "%.0f", self.lineWidth)
+            } else {
+                self.lineWidth = value
+            }
+            self.lineWidthSlider.doubleValue = self.lineWidth
+        } else if self.dashPatternField.isEqual(to: obj.object) {
+            let cnt = self.dashPatternField.integerValue
+            let data = [CGFloat](repeating: 3.0, count: cnt)
+            self.dashPattern = data
+        }
+    }
+}

+ 11 - 0
PDF Office/PDF Master/Class/KMLightMember/InAppPurchase/Appstore/KMInAppPurchaseManager.swift

@@ -33,6 +33,17 @@ let kStoreLiteKitSecret = "905532d3f55449a9b7a96161e7a2d538";
 //let kStoreKitSecret = "20f0129197a34439a2130358172984bb";
 #endif
 
+#if VERSION_PRO
+let PRODUCT_1 = "com.pdftechnologies.pdfreader.mac.yearly.001"
+let kPRODUCTS: Set<String> = [PRODUCT_1]
+
+let kSandboxServer = "https://sandbox.itunes.apple.com/verifyReceipt";
+let kItunesServer = "https://buy.itunes.apple.com/verifyReceipt";
+
+let kStoreLiteKitSecret = "321ee8da056a45e7b963eb519c25c4fc";
+//let kStoreKitSecret = "20f0129197a34439a2130358172984bb";
+#endif
+
 let keychainAccessGroup = "your.keychain.access.group"
 let receiptDataLabel = "receiptData"
 

+ 663 - 0
PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/AnnotationProperty/ViewController/FormProperties/KMAnnotationButtonWidgetAppearanceViewController.swift

@@ -0,0 +1,663 @@
+//
+//  KMAnnotationButtonWidgetAppearanceViewController.swift
+//  PDF Master
+//
+//  Created by wanjun on 2024/1/15.
+//
+
+import Cocoa
+
+class KMAnnotationButtonWidgetAppearanceViewController: NSViewController {
+
+    private var _annotations: [CPDFButtonWidgetAnnotation] = []
+    private var _formMode: CAnnotationType = .radioButton
+    var pdfView: CPDFListView?
+    var annotationModel: CPDFAnnotationModel?
+    
+    @IBOutlet private var backgroundColorLabel: NSTextField!
+    @IBOutlet private var backgroundColorPickerView: KMColorPickerView!
+    @IBOutlet private var appearanceAddTextBtn: NSButton!
+    @IBOutlet private var appearanceFontLabel: NSTextField!
+    @IBOutlet private var fontPopUpButton: KMPopUpButton!
+    @IBOutlet private var fontStylePopUpButton: KMPopUpButton!
+    @IBOutlet private var fontSizeComboBox: KMComboBox!
+    @IBOutlet private var fontButton: NSButton!
+    @IBOutlet private var fontView: NSView!
+    @IBOutlet private var textColorPickerView: KMColorPickerView!
+    private var annotation: CPDFButtonWidgetAnnotation?
+    private var isFromMode: Bool = false
+    private var annotationFreeText: CPDFFreeTextAnnotation?
+    private var annotationFont: NSFont?
+
+    deinit {
+        NotificationCenter.default.removeObserver(self)
+        annotation = nil
+        annotationFreeText = nil
+        annotationFont = nil
+        backgroundColorPickerView.action = nil
+        backgroundColorPickerView.target = nil
+        textColorPickerView.action = nil
+        textColorPickerView.target = nil
+        NSFontManager.shared.target = nil
+    }
+    
+    override func loadView() {
+        super.loadView()
+        
+        backgroundColorLabel.stringValue = NSLocalizedString("Colors", comment: "")
+        backgroundColorLabel.textColor = KMAppearance.Layout.h0Color()
+        appearanceAddTextBtn.title = NSLocalizedString("Add Text", comment: "")
+        
+        appearanceFontLabel.stringValue = NSLocalizedString("Fonts", comment: "")
+        appearanceFontLabel.textColor = KMAppearance.Layout.h0Color()
+        
+        backgroundColorPickerView.noContentString = true
+        backgroundColorPickerView.annotationTypeString = NSLocalizedString("Background Color", comment: "")
+        backgroundColorPickerView.annotationType = .fromFillColors
+        backgroundColorPickerView.isCallColorPanelAction = true
+        
+        textColorPickerView.noContentString = true
+        textColorPickerView.annotationTypeString = NSLocalizedString("Text Color", comment: "")
+        textColorPickerView.annotationType = .fromColors
+        textColorPickerView.isCallColorPanelAction = true
+
+        fontStylePopUpButton.type = .arrowDown
+        fontSizeComboBox.type = .none
+        fontSizeComboBox.comboxRect = fontSizeComboBox.bounds
+        fontPopUpButton.type = .arrowUpDown
+        
+        [fontPopUpButton, fontStylePopUpButton, fontSizeComboBox].forEach { view in
+            view?.wantsLayer = true
+            view?.layer?.backgroundColor = KMAppearance.Layout.l1Color().cgColor
+            view?.layer?.borderWidth = 1.0
+            view?.layer?.borderColor = KMAppearance.Interactive.s0Color().cgColor
+            view?.layer?.cornerRadius = 1.0
+        }
+        
+        var fieldString = annotation?.fieldName
+        if annotation?.controlType() == .radioButtonControl, #available(macOS 10.13, *) {
+            fieldString = annotation!.buttonWidgetStateString
+        }
+        
+        if pdfView?.currentPage() != nil {
+            let currentPage: CPDFPage = (pdfView?.currentPage())!
+            if currentPage.annotations != nil {
+                for annotation in currentPage.annotations {
+                    let annotationField = "\(fieldString)_AddText"
+                    
+                    if let freeTextAnnotation = annotation as? CPDFFreeTextAnnotation,
+                       freeTextAnnotation.userName() == annotationField {
+                        self.annotationFreeText = freeTextAnnotation
+                        appearanceAddTextBtn.state = .on
+                        fontView.isHidden = false
+                    } else {
+                        appearanceAddTextBtn.state = .off
+                        fontView.isHidden = true
+                    }
+                }
+            }
+        }
+        
+        if annotationFreeText == nil {
+            annotationFreeText = CPDFFreeTextAnnotation(PDFListViewNoteWith: pdfView!.document!)
+            annotationFreeText?.setUserName("\(annotation!.fieldName)_AddText")
+            
+            let defaults = UserDefaults.standard
+            var formFont: NSFont? = nil
+            var formColor: NSColor = NSColor.black
+            
+            if formMode == .radioButton {
+                formFont = defaults.font(forNameKey: SKAnnotationRadioButtonWidgetFontNameKey,
+                                         sizeKey: SKAnnotationRadioButtonWidgetFontSizeKey)
+                formColor = defaults.color(forKey: SKAnnotationRadioButtonWidgetFontColorKey) ?? NSColor.black
+            } else if formMode == .checkBox {
+                formFont = defaults.font(forNameKey: SKAnnotationCheckBoxWidgetFontNameKey,
+                                         sizeKey: SKAnnotationCheckBoxWidgetFontSizeKey)
+                formColor = defaults.color(forKey: SKAnnotationCheckBoxWidgetFontColorKey) ?? NSColor.black
+            } else {
+                formFont = NSFont.systemFont(ofSize: 9.0)
+            }
+            
+            if formFont == nil {
+                formFont = NSFont.systemFont(ofSize: 12.0)
+            }
+            
+            annotationFreeText?.font = formFont!
+            annotationFreeText?.fontColor = formColor
+            annotationFreeText?.contents = NSLocalizedString("Text", comment: "")
+        }
+        
+        reloadData()
+    }
+    
+    override func viewDidAppear() {
+        super.viewDidAppear()
+
+        let showConvertDetails = KMPropertiesViewPopController.showChangeColorDetails()
+        if showConvertDetails, self.view.window?.windowController?.document?.fileURL != nil {
+            KMPropertiesViewPopController.defaultManager().showChangeColorDetailsView(self.textColorPickerView.firstButton)
+        }
+    }
+    
+    func reloadData() {
+        var opacity: CGFloat = 1
+        if let color = annotation!.backgroundColor {
+            color.usingColorSpaceName(.calibratedRGB)?.getRed(nil, green:nil, blue: nil, alpha: &opacity)
+        }
+
+        annotationFont = annotation?.font
+        if let buttonWidget = annotation {
+            backgroundColorPickerView.color = buttonWidget.backgroundColor
+        }
+        
+        let fontManager = NSFontManager.shared
+        fontManager.target = self
+        fontManager.action = #selector(changeFont(_:))
+
+        if annotations.count > 1 {
+            appearanceAddTextBtn.isEnabled = false
+        }
+
+        if let annotationFreeText = annotationFreeText {
+            if let fontColor = annotationFreeText.fontColor {
+                textColorPickerView.color = fontColor
+            }
+
+            fontSizeComboBox.stringValue = "\(annotationFreeText.font.pointSize) pt"
+            DispatchQueue.global(qos: .default).async {
+                let fonts = NSFontManager.shared.availableFontFamilies
+                var selectedIndex = 0
+                let family = annotationFreeText.font.fontDescriptor.object(forKey: NSFontDescriptor.AttributeName.family) as? String
+                let style = annotationFreeText.font.fontDescriptor.object(forKey: NSFontDescriptor.AttributeName.face) as? String
+
+                var menuItems: [NSMenuItem] = []
+
+                for (index, fontName) in fonts.enumerated() {
+                    if let font = NSFont(name: fontName, size: 12.0) {
+                        let attrited = [NSAttributedString.Key.font: font]
+                        let string = NSAttributedString(string: fontName, attributes: attrited)
+                        let item = NSMenuItem()
+                        item.attributedTitle = string
+                        menuItems.append(item)
+
+                        if annotationFreeText.font.fontName == font.fontName {
+                            selectedIndex = index
+                        }
+                    }
+                }
+
+                DispatchQueue.main.async { [self] in
+                    fontPopUpButton.menu?.items = menuItems
+                    fontPopUpButton.selectItem(at: selectedIndex)
+                    let selectedStyleIndex = setFontStyle(fontName: family!, currentStyle: style)
+                    fontStylePopUpButton.selectItem(at: Int(selectedStyleIndex))
+                }
+            }
+        }
+
+        let userDefaults = UserDefaults.standard
+        if appearanceAddTextBtn.state == .on {
+            switch self.formMode {
+            case .radioButton:
+                userDefaults.set(true, forKey: SKAnnotationRadioButtonWidgetAddTextKey)
+            case .checkBox:
+                userDefaults.set(true, forKey: SKAnnotationCheckBoxWidgetAddTextKey)
+            default:
+                break
+            }
+        } else {
+            switch self.formMode {
+            case .radioButton:
+                userDefaults.set(false, forKey: SKAnnotationRadioButtonWidgetAddTextKey)
+            case .checkBox:
+                userDefaults.set(false, forKey: SKAnnotationCheckBoxWidgetAddTextKey)
+            default:
+                break
+            }
+        }
+    }
+    
+    // MARK: Set & Get
+    var formMode: CAnnotationType {
+        get {
+            return _formMode
+        }
+        set {
+            _formMode = newValue
+            
+            isFromMode = true
+            
+            let defaults = UserDefaults.standard
+            var annotation: CPDFButtonWidgetAnnotation?
+            let bounds = NSMakeRect(0, 0, 60, 25)
+            var backgroundColor: NSColor?
+
+            if formMode == .checkBox {
+                annotation = CPDFButtonWidgetAnnotation(PDFListViewNoteWith: pdfView!.document!)
+                backgroundColor = defaults.color(forKey: SKAnnotationCheckBoxWidgetBackgroundColorKey)
+            } else if formMode == .radioButton {
+                annotation = CPDFButtonWidgetAnnotation(PDFListViewNoteWith: pdfView!.document!, controlType: .radioButtonControl)
+                backgroundColor = defaults.color(forKey: SKAnnotationRadioButtonWidgetBackgroundColorKey)
+            }
+
+            annotation?.backgroundColor = backgroundColor ?? NSColor.clear
+
+            if let annotation = annotation {
+                annotations = [annotation]
+            }
+            
+            self.annotation = annotation
+        }
+    }
+    
+    var annotations: [CPDFButtonWidgetAnnotation] {
+        get {
+            return _annotations
+        }
+        set {
+            _annotations = newValue
+            annotation = _annotations.first
+        }
+    }
+    
+    func updateAnnotationMode() {
+        let defaults = UserDefaults.standard
+        let annotation = self.annotation
+        let annotationMode = self.formMode
+        
+        if annotationMode == .radioButton {
+            defaults.setColor(annotation!.backgroundColor!, forKey: SKAnnotationRadioButtonWidgetBackgroundColorKey)
+        } else if annotationMode == .checkBox {
+            defaults.setColor(annotation!.backgroundColor!, forKey: SKAnnotationCheckBoxWidgetBackgroundColorKey)
+        }
+    }
+
+    // MARK: Private Method
+    
+    func setFontStyle(fontName: String, currentStyle style: String?) -> UInt {
+        var selectIndex: UInt = 0
+        let menu = NSMenu()
+        if let fontFamily = NSFontManager.shared.availableMembers(ofFontFamily: fontName) {
+            for (index, array) in fontFamily.enumerated() {
+                let styleName = array[1] as! String
+                if style == styleName {
+                    selectIndex = UInt(index)
+                }
+                
+                let attributeFontDescriptor = NSFontDescriptor(fontAttributes: [
+                    NSFontDescriptor.AttributeName.family: fontName,
+                    NSFontDescriptor.AttributeName.face: styleName
+                ])
+                if let font = NSFont(descriptor: attributeFontDescriptor, size: 12.0) {
+                    let attrited: [NSAttributedString.Key: Any] = [NSAttributedString.Key.font: font]
+                    let string = NSAttributedString(string: styleName, attributes: attrited)
+                    let item = NSMenuItem()
+                    item.attributedTitle = string
+                    menu.addItem(item)
+                }
+            }
+        }
+        
+        if style == nil {
+            selectIndex = 0
+        }
+        
+        fontStylePopUpButton.menu = menu
+        
+        return selectIndex
+    }
+
+    func colorWithCGColor(_ CGColor: CGColor?) -> NSColor? {
+        guard let cgColor = CGColor else { return nil }
+        return NSColor(cgColor: cgColor)
+    }
+    
+    private func updateAnnotation() {
+        if annotationModel?.annotation != nil {
+            for tAnnotation in annotations {
+                pdfView?.setNeedsDisplayAnnotationViewFor(tAnnotation.page)
+            }
+        }
+    }
+    
+    // MARK: UI Action
+    
+    @IBAction func backgroundColorViewAction(_ sender: Any) {
+        for tAnnotation in annotations {
+            tAnnotation.updateAppearanceStream()
+            tAnnotation.backgroundColor = backgroundColorPickerView.color
+        }
+        updateAnnotation()
+    }
+
+    @IBAction func textColorPickerViewAction(_ sender: Any) {
+        if self.annotationFreeText == nil {
+            var fieldString = annotation!.fieldName
+            if annotation?.controlType() == .radioButtonControl,
+               #available(macOS 10.13, *) {
+                fieldString = annotation!.buttonWidgetStateString
+            }
+            
+            if let page = annotation?.page {
+                for annotation in page.annotations {
+                    let annotationField = "\(fieldString)_AddText"
+                    if let freeTextAnnotation = annotation as? CPDFFreeTextAnnotation,
+                       freeTextAnnotation.userName() == annotationField {
+                        self.annotationFreeText = freeTextAnnotation
+                    }
+                }
+            }
+        }
+        
+        let userDefaults = UserDefaults.standard
+        if formMode == .radioButton {
+            userDefaults.setColor(textColorPickerView.color!, forKey: SKAnnotationRadioButtonWidgetFontColorKey)
+        } else if formMode == .checkBox {
+            userDefaults.setColor(textColorPickerView.color!, forKey: SKAnnotationCheckBoxWidgetFontColorKey)
+        }
+        self.annotationFreeText?.fontColor = self.textColorPickerView.color
+        updateAnnotation()
+    }
+    
+    @IBAction func addTextButtonAction(_ sender: NSButton) {
+        guard let PDFView = pdfView else { return }
+        
+        let sud = UserDefaults.standard
+        
+        if sender.state == .on {
+            self.fontView.isHidden = false
+            
+            if !annotation!.fieldName().hasPrefix("button") {
+                var fieldString = annotation!.fieldName
+                if annotation!.controlType() == .radioButtonControl, #available(macOS 10.13, *) {
+                    fieldString = annotation!.buttonWidgetStateString
+                }
+                
+                let annotationField = "\(fieldString)_AddText"
+//                if PDFView.addWidgetRelatedAnnotationFreeText(annotationField) {
+//                    reloadData()
+//                    
+//                    for annotation in PDFView.currentSelectionPage().annotations {
+//                        if let freeTextAnnotation = annotation as? CPDFFreeTextAnnotation,
+//                           annotationField == freeTextAnnotation.userName() {
+//                            self.annotationFreeText = freeTextAnnotation
+//                            break
+//                        }
+//                    }
+//                }
+            }
+            
+            let annotationMode = self.formMode
+            var formFontColor: NSColor = .black
+            var formFontSize: CGFloat = 9.0
+            var formFontName: String? = nil
+            
+            if annotationMode == .radioButton {
+                formFontColor = sud.color(forKey: SKAnnotationRadioButtonWidgetFontColorKey) ?? .black
+                formFontSize = CGFloat(sud.float(forKey: SKAnnotationRadioButtonWidgetFontSizeKey))
+                formFontName = sud.string(forKey: SKAnnotationRadioButtonWidgetFontNameKey)
+            } else if annotationMode == .checkBox {
+                formFontColor = sud.color(forKey: SKAnnotationCheckBoxWidgetFontColorKey) ?? .black
+                formFontSize = CGFloat(sud.float(forKey: SKAnnotationCheckBoxWidgetFontSizeKey))
+                formFontName = sud.string(forKey: SKAnnotationCheckBoxWidgetFontNameKey)
+            }
+            
+            if formFontColor == nil {
+                formFontColor = .black
+            }
+            
+            textColorPickerView.color = formFontColor
+            
+            if formFontSize == 0.0 {
+                formFontSize = 9.0
+            }
+            
+            DispatchQueue.global(qos: .default).async {
+                let fonts = NSFontManager.shared.availableFontFamilies
+                let menu = NSMenu()
+                var selectedIndex = 0
+                
+                if let family = self.annotationFreeText?.font.fontDescriptor.object(forKey: NSFontDescriptor.AttributeName.family) as? String,
+                   let style = self.annotationFreeText?.font.fontDescriptor.object(forKey: NSFontDescriptor.AttributeName.face) as? String {
+                    
+                    for (index, fontName) in fonts.enumerated() {
+                        if let font = NSFont(name: fontName, size: 12.0) {
+                            let attributes: [NSAttributedString.Key: Any] = [.font: font]
+                            let string = NSAttributedString(string: fontName, attributes: attributes)
+                            
+                            let item = NSMenuItem()
+                            item.attributedTitle = string
+                            menu.addItem(item)
+                            
+                            if formFontName == font.fontName {
+                                selectedIndex = index
+                            }
+                        }
+                    }
+                }
+                
+                DispatchQueue.main.async {
+                    self.fontPopUpButton.menu = menu
+                    self.fontPopUpButton.selectItem(at: selectedIndex)
+                    
+                    if let family = self.annotationFreeText?.font.fontDescriptor.object(forKey: NSFontDescriptor.AttributeName.family) as? String,
+                       let style = self.annotationFreeText?.font.fontDescriptor.object(forKey: NSFontDescriptor.AttributeName.face) as? String {
+                        let selectedStyleIndex = self.setFontStyle(fontName: family, currentStyle: style)
+                        self.fontStylePopUpButton.selectItem(at: Int(selectedStyleIndex))
+                    }
+                }
+            }
+            
+            if annotationMode == .radioButton {
+                sud.set(true, forKey: SKAnnotationRadioButtonWidgetAddTextKey)
+            } else if annotationMode == .checkBox {
+                sud.set(true, forKey: SKAnnotationCheckBoxWidgetAddTextKey)
+            }
+        } else {
+            fontView.isHidden = true
+            
+            var fieldString = annotation!.fieldName
+            if annotation?.controlType() == .radioButtonControl, #available(macOS 10.13, *) {
+                fieldString = annotation!.buttonWidgetStateString
+            }
+            
+            let annotationField = "\(fieldString)_AddText"
+//            PDFView.removeWidgetRelatedAnnotationFreeText(annotationField)
+            
+            let annotationMode = self.formMode
+            if annotationMode == .radioButton {
+                sud.set(false, forKey: SKAnnotationRadioButtonWidgetAddTextKey)
+            } else if annotationMode == .checkBox {
+                sud.set(false, forKey: SKAnnotationCheckBoxWidgetAddTextKey)
+            }
+        }
+    }
+    
+    @IBAction func fontPopUpButtonAction(_ sender: NSPopUpButton) {
+        guard let familyString = fontPopUpButton.selectedItem?.attributedTitle?.string else {
+            return
+        }
+        
+        let selectIndex = setFontStyle(fontName: familyString, currentStyle: nil)
+        if let styleString = fontStylePopUpButton.selectedItem?.title {
+            fontStylePopUpButton.selectItem(at: Int(selectIndex))
+            
+            if annotationFreeText == nil {
+                if let page = annotation?.page {
+                    var fieldString = annotation!.fieldName
+                    if annotation?.controlType() == .radioButtonControl,
+                        #available(macOS 10.13, *) {
+                        fieldString = annotation!.buttonWidgetStateString
+                    }
+                    for tAnnotation in page.annotations {
+                        let annotationField = "\(fieldString)_AddText"
+                        if let tAnnotation = tAnnotation as? CPDFFreeTextAnnotation,
+                           tAnnotation.userName() == annotationField {
+                            annotationFreeText = tAnnotation
+                            break
+                        }
+                    }
+                }
+            }
+            
+            let userDefaults = UserDefaults.standard
+            if formMode == .radioButton {
+                userDefaults.set(familyString, forKey: SKAnnotationRadioButtonWidgetFontNameKey)
+            } else if formMode == .checkBox {
+                userDefaults.set(familyString, forKey: SKAnnotationCheckBoxWidgetFontNameKey)
+            }
+            
+            if let fontSize = annotationFreeText!.font!.fontDescriptor.object(forKey: NSFontDescriptor.AttributeName.size) as? NSNumber {
+                let attributeFontDescriptor = NSFontDescriptor(fontAttributes: [
+                    NSFontDescriptor.AttributeName.family: familyString,
+                    NSFontDescriptor.AttributeName.face: styleString
+                ])
+                if let font = NSFont(descriptor: attributeFontDescriptor, size: CGFloat(fontSize.floatValue)) {
+                    annotationFreeText?.font = font
+                }
+            }
+            
+            updateAnnotation()
+        }
+    }
+    
+    @IBAction func fontSizeComboBox(_ sender: NSComboBox) {
+        if annotationFreeText == nil {
+            var fieldString = annotation!.fieldName
+            if annotation?.controlType() == .radioButtonControl,
+               #available(macOS 10.13, *) {
+                fieldString = annotation!.buttonWidgetStateString
+            }
+            
+            if let page = annotation?.page {
+                for tAnnotation in page.annotations {
+                    let annotationField = "\(fieldString)_AddText"
+                    if let tFreeTextAnnotation = tAnnotation as? CPDFFreeTextAnnotation,
+                       tFreeTextAnnotation.userName() == annotationField {
+                        annotationFreeText = tFreeTextAnnotation
+                    }
+                }
+            }
+        }
+        
+        let userDefaults = UserDefaults.standard
+        var fontSizeKey: String = ""
+        if formMode == .radioButton {
+            fontSizeKey = SKAnnotationRadioButtonWidgetFontSizeKey
+        } else if formMode == .checkBox {
+            fontSizeKey = SKAnnotationCheckBoxWidgetFontSizeKey
+        }
+        
+        userDefaults.set(Float(sender.floatValue), forKey: fontSizeKey)
+        
+        if let font = annotationFreeText?.font {
+            let newFont = NSFont(name: font.fontName, size: CGFloat(sender.floatValue))
+            annotationFreeText?.font = newFont
+        }
+        
+        updateAnnotation()
+    }
+    
+    @IBAction func fontStylePopUpButtonAction(_ sender: NSPopUpButton) {
+        guard let styleString = self.fontStylePopUpButton.selectedItem?.title else {
+            return
+        }
+
+        if self.annotationFreeText == nil {
+            var fieldString = annotation!.fieldName
+            if self.annotation?.controlType() == .radioButtonControl, #available(macOS 10.13, *) {
+                fieldString = annotation!.buttonWidgetStateString
+            }
+
+            if let page = annotation!.page {
+                for annotation in page.annotations {
+                    let annotationField = "\(fieldString)_AddText"
+                    if let freeTextAnnotation = annotation as? CPDFFreeTextAnnotation, freeTextAnnotation.userName() == annotationField {
+                        self.annotationFreeText = freeTextAnnotation
+                        break
+                    }
+                }
+            }
+        }
+
+        if let font = self.annotationFreeText?.font,
+           let fontSize = font.fontDescriptor.object(forKey: NSFontDescriptor.AttributeName.size),
+           let familyString = font.fontDescriptor.object(forKey: NSFontDescriptor.AttributeName.family) {
+            let attributeFontDescriptor = NSFontDescriptor(fontAttributes: [NSFontDescriptor.AttributeName.family: familyString, NSFontDescriptor.AttributeName.face: styleString])
+            if let updatedFont = NSFont(descriptor: attributeFontDescriptor, size: CGFloat((fontSize as! NSString).floatValue)) {
+//                self.annotationFreeText?.removeAllAppearanceStreams()
+                self.annotationFreeText?.font = updatedFont
+            }
+        }
+        updateAnnotation()
+    }
+    
+    @IBAction func fontButtonAction(_ sender: NSButton) {
+        weak var weakSelf = self
+//        let fontWindowController = KMAnnotationFontWindowController.sharedAnnotationFont()
+//        let window = fontWindowController.window
+//        fontWindowController.annotations = [self.annotationFreeText] ?? []
+//        
+//        fontWindowController.annotationAlignCallback = { selectedCount in
+//            weakSelf?.annotationFreeText.removeAllAppearanceStreams()
+//            
+//            switch selectedCount {
+//            case 0:
+//                weakSelf?.annotationFreeText.setAlignment(.left)
+//            case 2:
+//                weakSelf?.annotationFreeText.setAlignment(.center)
+//            case 1:
+//                weakSelf?.annotationFreeText.setAlignment(.right)
+//            case 3:
+//                weakSelf?.annotationFreeText.setAlignment(.justified)
+//            default:
+//                break
+//            }
+//            
+//            weakSelf?.updateAnnotation()
+//        }
+        
+//        fontWindowController.annotationCallback = { annotation in
+//            weakSelf?.annotationFreeText.fontColor = annotation.fontColor
+//            weakSelf?.annotationFreeText.font = annotation.font
+//            weakSelf?.reloadData()
+//            weakSelf?.updateAnnotation()
+//        }
+        
+//        window?.orderFront(sender)
+    }
+    
+    @objc func changeFont(_ sender: Any) {
+        if annotationFreeText == nil {
+            var fieldString = annotation?.fieldName
+            if annotation?.controlType() == .radioButtonControl, #available(macOS 10.13, *) {
+                fieldString = annotation?.buttonWidgetStateString
+            }
+            
+            if let page = annotation?.page {
+                for pageAnnotation in page.annotations {
+                    if let freeTextAnnotation = pageAnnotation as? CPDFFreeTextAnnotation,
+                       freeTextAnnotation.userName() == "\(fieldString)_AddText" {
+                        annotationFreeText = freeTextAnnotation
+                        break
+                    }
+                }
+            }
+        }
+        
+        let userDefaults = UserDefaults.standard
+        
+        if formMode == .radioButton {
+            userDefaults.set(annotationFont?.fontName, forKey: SKAnnotationRadioButtonWidgetFontNameKey)
+            userDefaults.set(annotationFont?.pointSize, forKey: SKAnnotationRadioButtonWidgetFontSizeKey)
+        } else if formMode == .checkBox {
+            userDefaults.set(annotationFont?.fontName, forKey: SKAnnotationCheckBoxWidgetFontNameKey)
+            userDefaults.set(annotationFont?.pointSize, forKey: SKAnnotationCheckBoxWidgetFontSizeKey)
+        }
+        
+//        annotationFont = (sender as AnyObject).convert(annotationFont!)
+        annotationFreeText?.font = NSFont(name: annotationFont!.fontName, size: annotationFont!.pointSize)
+        
+        updateAnnotation()
+    }
+}

+ 274 - 0
PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/AnnotationProperty/ViewController/FormProperties/KMAnnotationButtonWidgetAppearanceViewController.xib

@@ -0,0 +1,274 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21507" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21507"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMAnnotationButtonWidgetAppearanceViewController">
+            <connections>
+                <outlet property="appearanceAddTextBtn" destination="bqR-Ix-HTJ" id="T16-AG-l3D"/>
+                <outlet property="appearanceFontLabel" destination="dPp-Rb-yWg" id="DaT-e2-r18"/>
+                <outlet property="backgroundColorLabel" destination="PBQ-Dj-b1j" id="spf-5c-kqx"/>
+                <outlet property="backgroundColorPickerView" destination="EFk-fn-6X1" id="UOD-2m-309"/>
+                <outlet property="fontButton" destination="072-BB-1SK" id="j3c-Nq-rFm"/>
+                <outlet property="fontPopUpButton" destination="EA9-AX-1Uq" id="Kh6-zr-I9K"/>
+                <outlet property="fontSizeComboBox" destination="fgb-vf-yF0" id="eI0-zH-J8u"/>
+                <outlet property="fontStylePopUpButton" destination="6Ud-Bd-kSK" id="E4t-93-vif"/>
+                <outlet property="fontView" destination="AVo-l0-xCc" id="NUh-0X-i0W"/>
+                <outlet property="textColorPickerView" destination="zu7-sx-j7d" id="doT-Mq-vms"/>
+                <outlet property="view" destination="ofS-bh-Ctt" id="35A-tj-aB5"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <scrollView borderType="none" autohidesScrollers="YES" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" id="ofS-bh-Ctt">
+            <rect key="frame" x="0.0" y="0.0" width="475" height="464"/>
+            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+            <clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="prV-gr-DaJ" customClass="KMClipView">
+                <rect key="frame" x="0.0" y="0.0" width="475" height="464"/>
+                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                <subviews>
+                    <view translatesAutoresizingMaskIntoConstraints="NO" id="q7n-Au-vJ3">
+                        <rect key="frame" x="0.0" y="166" width="475" height="298"/>
+                        <subviews>
+                            <customView translatesAutoresizingMaskIntoConstraints="NO" id="0cJ-2d-rI3">
+                                <rect key="frame" x="16" y="192" width="443" height="96"/>
+                                <subviews>
+                                    <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="PBQ-Dj-b1j">
+                                        <rect key="frame" x="-2" y="66" width="128" height="20"/>
+                                        <constraints>
+                                            <constraint firstAttribute="height" constant="20" id="sP3-ke-gmY"/>
+                                        </constraints>
+                                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Background Color" id="Cjn-IM-XMQ">
+                                            <font key="font" metaFont="systemBold" size="14"/>
+                                            <color key="textColor" red="0.40000000000000002" green="0.40000000000000002" blue="0.40000000000000002" alpha="1" colorSpace="calibratedRGB"/>
+                                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                        </textFieldCell>
+                                    </textField>
+                                    <customView placeholderIntrinsicWidth="240" placeholderIntrinsicHeight="26" translatesAutoresizingMaskIntoConstraints="NO" id="EFk-fn-6X1" customClass="KMColorPickerView">
+                                        <rect key="frame" x="0.0" y="24" width="443" height="32"/>
+                                        <constraints>
+                                            <constraint firstAttribute="height" constant="32" id="cBL-YN-Z03"/>
+                                        </constraints>
+                                        <connections>
+                                            <action selector="backgroundColorViewAction:" target="-2" id="Uqk-c3-JDs"/>
+                                        </connections>
+                                    </customView>
+                                    <box verticalHuggingPriority="750" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="hQ4-96-CKs">
+                                        <rect key="frame" x="0.0" y="5" width="443" height="5"/>
+                                    </box>
+                                </subviews>
+                                <constraints>
+                                    <constraint firstItem="PBQ-Dj-b1j" firstAttribute="top" secondItem="0cJ-2d-rI3" secondAttribute="top" constant="10" id="86E-ko-CUd"/>
+                                    <constraint firstItem="EFk-fn-6X1" firstAttribute="top" secondItem="PBQ-Dj-b1j" secondAttribute="bottom" constant="10" id="9le-8U-msE"/>
+                                    <constraint firstAttribute="bottom" secondItem="hQ4-96-CKs" secondAttribute="bottom" constant="7" id="EXy-zk-Hc2"/>
+                                    <constraint firstItem="PBQ-Dj-b1j" firstAttribute="leading" secondItem="0cJ-2d-rI3" secondAttribute="leading" id="FZd-7i-9Sa"/>
+                                    <constraint firstItem="hQ4-96-CKs" firstAttribute="top" secondItem="EFk-fn-6X1" secondAttribute="bottom" constant="16" id="QzG-CU-TLy"/>
+                                    <constraint firstItem="EFk-fn-6X1" firstAttribute="leading" secondItem="0cJ-2d-rI3" secondAttribute="leading" id="c5l-MB-VTz"/>
+                                    <constraint firstAttribute="trailing" secondItem="hQ4-96-CKs" secondAttribute="trailing" id="nPf-MG-WFP"/>
+                                    <constraint firstItem="hQ4-96-CKs" firstAttribute="leading" secondItem="0cJ-2d-rI3" secondAttribute="leading" id="oTT-0J-PBI"/>
+                                    <constraint firstAttribute="trailing" secondItem="EFk-fn-6X1" secondAttribute="trailing" id="xR7-4r-ClC"/>
+                                </constraints>
+                            </customView>
+                            <customView translatesAutoresizingMaskIntoConstraints="NO" id="RbL-jd-AfR">
+                                <rect key="frame" x="16" y="168" width="443" height="17"/>
+                                <subviews>
+                                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="bqR-Ix-HTJ">
+                                        <rect key="frame" x="-2" y="-1.5" width="74" height="20"/>
+                                        <constraints>
+                                            <constraint firstAttribute="height" constant="17" id="jzL-se-DbA"/>
+                                        </constraints>
+                                        <buttonCell key="cell" type="check" title="Add text" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="XP5-mX-vWS">
+                                            <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                            <font key="font" metaFont="cellTitle"/>
+                                        </buttonCell>
+                                        <connections>
+                                            <action selector="addTextButtonAction:" target="-2" id="cqE-JC-Aha"/>
+                                        </connections>
+                                    </button>
+                                </subviews>
+                                <constraints>
+                                    <constraint firstItem="bqR-Ix-HTJ" firstAttribute="top" secondItem="RbL-jd-AfR" secondAttribute="top" id="S1d-Il-13I"/>
+                                    <constraint firstAttribute="bottom" secondItem="bqR-Ix-HTJ" secondAttribute="bottom" id="eYT-v2-Nz7"/>
+                                    <constraint firstItem="bqR-Ix-HTJ" firstAttribute="leading" secondItem="RbL-jd-AfR" secondAttribute="leading" id="gfd-xt-FYc"/>
+                                    <constraint firstItem="bqR-Ix-HTJ" firstAttribute="leading" secondItem="RbL-jd-AfR" secondAttribute="leading" id="slQ-6f-DVs"/>
+                                </constraints>
+                            </customView>
+                            <customView translatesAutoresizingMaskIntoConstraints="NO" id="AVo-l0-xCc">
+                                <rect key="frame" x="16" y="10" width="443" height="148"/>
+                                <subviews>
+                                    <button translatesAutoresizingMaskIntoConstraints="NO" id="072-BB-1SK">
+                                        <rect key="frame" x="427" y="121" width="16" height="14"/>
+                                        <constraints>
+                                            <constraint firstAttribute="height" constant="14" id="aFq-Wx-BLx"/>
+                                            <constraint firstAttribute="width" constant="16" id="mBk-F0-I9p"/>
+                                        </constraints>
+                                        <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="KMImageNameUXIconBtnFontsetNor" imagePosition="only" alignment="center" imageScaling="proportionallyUpOrDown" inset="2" id="z0p-gn-AEq">
+                                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                            <font key="font" metaFont="system"/>
+                                        </buttonCell>
+                                        <connections>
+                                            <action selector="fontButtonAction:" target="-2" id="QHj-oZ-KfZ"/>
+                                        </connections>
+                                    </button>
+                                    <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="dPp-Rb-yWg">
+                                        <rect key="frame" x="-2" y="118" width="35" height="20"/>
+                                        <constraints>
+                                            <constraint firstAttribute="height" constant="20" id="6cH-af-Lyp"/>
+                                        </constraints>
+                                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Font" id="M7B-cy-Iqr">
+                                            <font key="font" metaFont="systemBold" size="14"/>
+                                            <color key="textColor" red="0.40000000000000002" green="0.40000000000000002" blue="0.40000000000000002" alpha="1" colorSpace="calibratedRGB"/>
+                                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                        </textFieldCell>
+                                    </textField>
+                                    <popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="6Ud-Bd-kSK" customClass="KMPopUpButton">
+                                        <rect key="frame" x="-2" y="3" width="349" height="36"/>
+                                        <constraints>
+                                            <constraint firstAttribute="height" constant="24" id="loq-LL-etH"/>
+                                        </constraints>
+                                        <popUpButtonCell key="cell" type="push" title="UltraLight" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="border" inset="2" arrowPosition="noArrow" selectedItem="sd4-ps-9hd" id="wAD-Kt-rYb" customClass="KMPopUpButtonCell">
+                                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                            <font key="font" metaFont="menu"/>
+                                            <menu key="menu" id="7Qp-t0-1ed">
+                                                <items>
+                                                    <menuItem title="UltraLight" state="on" id="sd4-ps-9hd"/>
+                                                    <menuItem title="Thin" id="sbZ-Tn-Oxd"/>
+                                                    <menuItem title="Light" id="exS-kT-WeQ"/>
+                                                    <menuItem title="Regular" id="EFw-dg-NxV"/>
+                                                    <menuItem title="Medium" id="9fT-MQ-F3Q"/>
+                                                    <menuItem title="Semibold" id="u9M-Gd-6Yi"/>
+                                                    <menuItem title="Bold" id="VUe-sn-map"/>
+                                                    <menuItem title="Heavy" id="61q-4t-4b9"/>
+                                                    <menuItem title="Black" id="7b1-jG-FF2"/>
+                                                </items>
+                                            </menu>
+                                        </popUpButtonCell>
+                                        <connections>
+                                            <action selector="fontStylePopUpButtonAction:" target="-2" id="Qua-ep-9Dn"/>
+                                        </connections>
+                                    </popUpButton>
+                                    <comboBox verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="fgb-vf-yF0" customClass="KMComboBox">
+                                        <rect key="frame" x="347" y="10" width="96" height="23"/>
+                                        <constraints>
+                                            <constraint firstAttribute="width" constant="92" id="lut-MM-qja"/>
+                                        </constraints>
+                                        <comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" alignment="center" completes="NO" numberOfVisibleItems="5" id="mHY-uf-DDf" customClass="KMComboBoxCell">
+                                            <font key="font" metaFont="system"/>
+                                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                            <objectValues>
+                                                <string>4 pt</string>
+                                                <string>6 pt</string>
+                                                <string>8 pt</string>
+                                                <string>9 pt</string>
+                                                <string>10 pt</string>
+                                                <string>11 pt</string>
+                                                <string>12 pt</string>
+                                                <string>13 pt</string>
+                                                <string>14 pt</string>
+                                                <string>15 pt</string>
+                                                <string>16 pt</string>
+                                                <string>17 pt</string>
+                                                <string>18 pt</string>
+                                                <string>24 pt</string>
+                                                <string>36 pt</string>
+                                                <string>48 pt</string>
+                                                <string>64 pt</string>
+                                                <string>72 pt</string>
+                                                <string>98 pt</string>
+                                                <string>144 pt</string>
+                                                <string>288 pt</string>
+                                            </objectValues>
+                                        </comboBoxCell>
+                                        <connections>
+                                            <action selector="fontSizeComboBox:" target="-2" id="4Jv-Y7-VMQ"/>
+                                        </connections>
+                                    </comboBox>
+                                    <popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="EA9-AX-1Uq" customClass="KMPopUpButton">
+                                        <rect key="frame" x="-2" y="35" width="452" height="36"/>
+                                        <constraints>
+                                            <constraint firstAttribute="height" constant="24" id="c0k-2D-edV"/>
+                                        </constraints>
+                                        <popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" arrowPosition="noArrow" selectedItem="Yns-VE-yf9" id="PDf-QI-VzP" customClass="KMPopUpButtonCell">
+                                            <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
+                                            <font key="font" metaFont="menu"/>
+                                            <menu key="menu" id="WRU-t9-bhR">
+                                                <items>
+                                                    <menuItem title="Item 1" state="on" id="Yns-VE-yf9"/>
+                                                    <menuItem title="Item 2" id="WGg-LK-Td5"/>
+                                                    <menuItem title="Item 3" id="5hM-7e-UM8"/>
+                                                </items>
+                                            </menu>
+                                        </popUpButtonCell>
+                                        <connections>
+                                            <action selector="fontPopUpButtonAction:" target="-2" id="f8t-1t-opd"/>
+                                        </connections>
+                                    </popUpButton>
+                                    <customView placeholderIntrinsicWidth="240" placeholderIntrinsicHeight="26" translatesAutoresizingMaskIntoConstraints="NO" id="zu7-sx-j7d" customClass="KMColorPickerView">
+                                        <rect key="frame" x="0.0" y="76" width="443" height="32"/>
+                                        <constraints>
+                                            <constraint firstAttribute="height" constant="32" id="7VU-fc-AUs"/>
+                                        </constraints>
+                                        <connections>
+                                            <action selector="textColorPickerViewAction:" target="-2" id="T9b-g0-tvj"/>
+                                        </connections>
+                                    </customView>
+                                </subviews>
+                                <constraints>
+                                    <constraint firstItem="6Ud-Bd-kSK" firstAttribute="leading" secondItem="AVo-l0-xCc" secondAttribute="leading" constant="5" id="8U2-m5-idS"/>
+                                    <constraint firstAttribute="trailing" secondItem="zu7-sx-j7d" secondAttribute="trailing" id="A2W-Qb-h4a"/>
+                                    <constraint firstAttribute="bottom" secondItem="6Ud-Bd-kSK" secondAttribute="bottom" constant="10" id="Ecw-Qv-xTB"/>
+                                    <constraint firstItem="EA9-AX-1Uq" firstAttribute="top" secondItem="zu7-sx-j7d" secondAttribute="bottom" constant="10" id="Fyp-WC-V4Z"/>
+                                    <constraint firstItem="fgb-vf-yF0" firstAttribute="leading" secondItem="6Ud-Bd-kSK" secondAttribute="trailing" constant="8" id="IM5-On-dqm"/>
+                                    <constraint firstAttribute="trailing" secondItem="fgb-vf-yF0" secondAttribute="trailing" constant="3" id="LaE-cv-DUq"/>
+                                    <constraint firstItem="EA9-AX-1Uq" firstAttribute="leading" secondItem="AVo-l0-xCc" secondAttribute="leading" constant="5" id="MYK-Db-oOS"/>
+                                    <constraint firstItem="zu7-sx-j7d" firstAttribute="leading" secondItem="AVo-l0-xCc" secondAttribute="leading" id="N6N-Iw-KSV"/>
+                                    <constraint firstItem="072-BB-1SK" firstAttribute="centerY" secondItem="dPp-Rb-yWg" secondAttribute="centerY" id="X2M-Of-jgX"/>
+                                    <constraint firstItem="fgb-vf-yF0" firstAttribute="centerY" secondItem="6Ud-Bd-kSK" secondAttribute="centerY" id="YFl-jM-DYA"/>
+                                    <constraint firstAttribute="trailing" secondItem="072-BB-1SK" secondAttribute="trailing" id="cOF-vh-vFH"/>
+                                    <constraint firstItem="dPp-Rb-yWg" firstAttribute="leading" secondItem="AVo-l0-xCc" secondAttribute="leading" id="kBD-gA-hg3"/>
+                                    <constraint firstItem="dPp-Rb-yWg" firstAttribute="top" secondItem="AVo-l0-xCc" secondAttribute="top" constant="10" id="nmR-1D-Nyc"/>
+                                    <constraint firstItem="zu7-sx-j7d" firstAttribute="top" secondItem="dPp-Rb-yWg" secondAttribute="bottom" constant="10" id="oxY-X6-kwY"/>
+                                    <constraint firstAttribute="trailing" secondItem="EA9-AX-1Uq" secondAttribute="trailing" id="r1u-Bz-DBG"/>
+                                    <constraint firstItem="6Ud-Bd-kSK" firstAttribute="top" secondItem="EA9-AX-1Uq" secondAttribute="bottom" constant="8" id="zWa-kX-BXc"/>
+                                </constraints>
+                            </customView>
+                        </subviews>
+                        <constraints>
+                            <constraint firstAttribute="bottom" secondItem="AVo-l0-xCc" secondAttribute="bottom" constant="10" id="6YL-QM-jdc"/>
+                            <constraint firstItem="AVo-l0-xCc" firstAttribute="trailing" secondItem="0cJ-2d-rI3" secondAttribute="trailing" id="72s-1l-oN3"/>
+                            <constraint firstItem="0cJ-2d-rI3" firstAttribute="leading" secondItem="q7n-Au-vJ3" secondAttribute="leading" constant="16" id="KRq-t4-MgA"/>
+                            <constraint firstItem="0cJ-2d-rI3" firstAttribute="top" secondItem="q7n-Au-vJ3" secondAttribute="top" constant="10" id="KZr-NN-bEJ"/>
+                            <constraint firstItem="RbL-jd-AfR" firstAttribute="leading" secondItem="0cJ-2d-rI3" secondAttribute="leading" id="N7f-nz-nya"/>
+                            <constraint firstItem="RbL-jd-AfR" firstAttribute="trailing" secondItem="0cJ-2d-rI3" secondAttribute="trailing" id="OAZ-zm-lOc"/>
+                            <constraint firstAttribute="trailing" secondItem="0cJ-2d-rI3" secondAttribute="trailing" constant="16" id="btV-8K-0w9"/>
+                            <constraint firstItem="AVo-l0-xCc" firstAttribute="leading" secondItem="0cJ-2d-rI3" secondAttribute="leading" id="mcr-D8-WuB"/>
+                            <constraint firstItem="AVo-l0-xCc" firstAttribute="top" secondItem="RbL-jd-AfR" secondAttribute="bottom" constant="10" id="qJK-Ee-coe"/>
+                            <constraint firstItem="RbL-jd-AfR" firstAttribute="top" secondItem="0cJ-2d-rI3" secondAttribute="bottom" constant="7" id="rri-PX-hRi"/>
+                        </constraints>
+                    </view>
+                </subviews>
+                <constraints>
+                    <constraint firstItem="q7n-Au-vJ3" firstAttribute="leading" secondItem="prV-gr-DaJ" secondAttribute="leading" id="WMj-pk-7uh"/>
+                    <constraint firstAttribute="trailing" secondItem="q7n-Au-vJ3" secondAttribute="trailing" id="o2f-bQ-HiB"/>
+                    <constraint firstItem="q7n-Au-vJ3" firstAttribute="top" secondItem="prV-gr-DaJ" secondAttribute="top" id="wgf-jP-9XO"/>
+                </constraints>
+            </clipView>
+            <scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="k3s-VR-o2G">
+                <rect key="frame" x="-100" y="-100" width="303" height="15"/>
+                <autoresizingMask key="autoresizingMask"/>
+            </scroller>
+            <scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="tvg-SG-BO4">
+                <rect key="frame" x="460" y="0.0" width="15" height="464"/>
+                <autoresizingMask key="autoresizingMask"/>
+            </scroller>
+            <point key="canvasLocation" x="-112.5" y="148"/>
+        </scrollView>
+    </objects>
+    <resources>
+        <image name="KMImageNameUXIconBtnFontsetNor" width="17" height="16"/>
+    </resources>
+</document>

+ 32 - 2
PDF Office/PDF Master/Class/Preference/Controller/KMNotesPreferences.swift

@@ -88,11 +88,9 @@ class KMNotesPreferences: NSViewController {
 //        [lineWell setDisplayStyle:SKLineWellDisplayStyleRectangle];
         self.textLineWell.lineWidth = 0
 //
-//        lineWell = [lineWells2 objectAtIndex:0];
 //        [lineWell bind:SKLineWellLineWidthKey toObject:sudc withKeyPath:VALUES_KEY_PATH(SKStringConstants.circleNoteLineWidthKey) options:nil];
 //        [lineWell bind:SKLineWellStyleKey toObject:sudc withKeyPath:VALUES_KEY_PATH(SKStringConstants.circleNoteLineStyleKey) options:nil];
 //        [lineWell bind:SKLineWellDashPatternKey toObject:sudc withKeyPath:VALUES_KEY_PATH(SKStringConstants.circleNoteDashPatternKey) options:nil];
-//        [lineWell setDisplayStyle:SKLineWellDisplayStyleOval];
         self.circleLineWell.displayStyle = .oval
         self.circleLineWell.lineWidth = 2
 //
@@ -281,6 +279,15 @@ class KMNotesPreferences: NSViewController {
         let noteFontSize = KMPreference.shared.markupNoteFontSize
         let noteFont = NSFont(name: noteFontName, size: noteFontSize.cgFloat)
         self.fontWell2.font = noteFont
+        let alignment = KMPreference.shared.markupFontTextAligment
+        if alignment == .left {
+            self.alignmentSegmentControl.selectedSegment = 0
+        } else if alignment == .center {
+            self.alignmentSegmentControl.selectedSegment = 1
+        } else if alignment == .right {
+            self.alignmentSegmentControl.selectedSegment = 2
+        }
+        
     }
     
     private func _initActions() {
@@ -315,6 +322,11 @@ class KMNotesPreferences: NSViewController {
         self.fontWell1.action = #selector(textFontWellAction)
         self.fontWell2.target = self
         self.fontWell2.action = #selector(anchoredFontWellAction)
+        self.alignmentSegmentControl.target = self
+        self.alignmentSegmentControl.action = #selector(alignmentSegmentAction)
+        
+        self.circleLineWell.target = self
+        self.circleLineWell.action = #selector(circleLineWellAction)
     }
     
     @objc func textColorWellAction(_ sender: NSColorWell) {
@@ -377,6 +389,24 @@ class KMNotesPreferences: NSViewController {
         KMPreference.shared.markupFontNoteString = sender.fontName ?? ""
         KMPreference.shared.markupNoteFontSize = Float(sender.fontSize)
     }
+    
+    @objc func alignmentSegmentAction(_ sender: NSSegmentedControl) {
+        if sender.selectedSegment == 0 {
+            KMPreference.shared.markupFontTextAligment = .left
+        } else if sender.selectedSegment == 1 {
+            KMPreference.shared.markupFontTextAligment = .center
+        } else if sender.selectedSegment == 2 {
+            KMPreference.shared.markupFontTextAligment = .right
+        }
+    }
+    
+    // MARK: - LineWell
+    
+    @objc func circleLineWellAction(_ sender: KMLineWell) {
+        KMPreference.shared.circleNoteLineWidth = Float(sender.lineWidth)
+        KMPreference.shared.circleNoteLineStyle = sender.style.rawValue
+        KMPreference.shared.circleNoteDashPattern = sender.dashPattern as? [CGFloat] ?? []
+    }
 }
 
 extension KMNotesPreferences: KMPreferencePane {

+ 318 - 3
PDF Office/PDF Master/Class/Preference/Tools/KMPreferenceManager.swift

@@ -88,6 +88,26 @@ private let KMMarkupFontNoteStringKey: KMPreferenceKey = "KMMarkupFontNoteString
 private let KMMarkupTextFontSizeKey: KMPreferenceKey = "KMMarkupTextFontSizeKey"
 private let KMMarkupNoteFontSizeKey: KMPreferenceKey = "KMMarkupNoteFontSizeKey"
 
+private let KMFreeTextNoteLineWidthKey: KMPreferenceKey = "KMFreeTextNoteLineWidthKey"
+private let KMFreeTextNoteLineStyleKey: KMPreferenceKey = "KMFreeTextNoteLineStyleKey"
+private let KMFreeTextNoteDashPatternKey: KMPreferenceKey = "KMFreeTextNoteDashPatternKey"
+private let KMCircleNoteLineWidthKey: KMPreferenceKey = "KMCircleNoteLineWidthKey"
+private let KMCircleNoteLineStyleKey: KMPreferenceKey = "KMCircleNoteLineStyleKey"
+private let KMCircleNoteDashPatternKey: KMPreferenceKey = "KMCircleNoteDashPatternKey"
+
+private let KMSquareNoteLineWidthKey: KMPreferenceKey = "KMSquareNoteLineWidthKey"
+private let KMSquareNoteLineStyleKey: KMPreferenceKey = "KMSquareNoteLineStyleKey"
+private let KMSquareNoteDashPatternKey: KMPreferenceKey = "KMSquareNoteDashPatternKey"
+private let KMLineNoteLineWidthKey: KMPreferenceKey = "KMLineNoteLineWidthKey"
+private let KMLineNoteLineStyleKey: KMPreferenceKey = "KMLineNoteLineStyleKey"
+private let KMLineNoteDashPatternKey: KMPreferenceKey = "KMLineNoteDashPatternKey"
+private let KMLineNoteStartLineStyleKey: KMPreferenceKey = "KMLineNoteStartLineStyleKey"
+private let KMLineNoteEndLineStyleKey: KMPreferenceKey = "KMLineNoteEndLineStyleKey"
+
+private let KMInkNoteLineWidthKey: KMPreferenceKey = "KMInkNoteLineWidthKey"
+private let KMInkNoteLineStyleKey: KMPreferenceKey = "KMInkNoteLineStyleKey"
+private let KMInkNoteDashPatternKey: KMPreferenceKey = "KMInkNoteDashPatternKey"
+
 /// 偏好设置已改变
 private let KMPreferenceDidChangeNotificationName = "KMPreferenceDidChangeNotificationName"
 
@@ -176,6 +196,25 @@ typealias KMPreference = KMPreferenceManager
     public static let markupTextFontSizeKey                     = KMMarkupTextFontSizeKey
     public static let markupNoteFontSizeKey                     = KMMarkupNoteFontSizeKey
     
+    public static let freeTextNoteLineWidthKey                  = KMFreeTextNoteLineWidthKey
+    public static let freeTextNoteLineStyleKey                  = KMFreeTextNoteLineStyleKey
+    public static let freeTextNoteDashPatternKey                = KMFreeTextNoteDashPatternKey
+    public static let circleNoteLineWidthKey                    = KMCircleNoteLineWidthKey
+    public static let circleNoteLineStyleKey                    = KMCircleNoteLineStyleKey
+    public static let circleNoteDashPatternKey                  = KMCircleNoteDashPatternKey
+    
+    public static let squareNoteLineWidthKey                    = KMSquareNoteLineWidthKey
+    public static let squareNoteLineStyleKey                    = KMSquareNoteLineStyleKey
+    public static let squareNoteDashPatternKey                  = KMSquareNoteDashPatternKey
+    public static let lineNoteLineWidthKey                      = KMLineNoteLineWidthKey
+    public static let lineNoteLineStyleKey                      = KMLineNoteLineStyleKey
+    public static let lineNoteDashPatternKey                    = KMLineNoteDashPatternKey
+    public static let lineNoteStartLineStyleKey                 = KMLineNoteStartLineStyleKey
+    public static let lineNoteEndLineStyleKey                   = KMLineNoteEndLineStyleKey
+    public static let inkNoteLineWidthKey                       = KMInkNoteLineWidthKey
+    public static let inkNoteLineStyleKey                       = KMInkNoteLineStyleKey
+    public static let inkNoteDashPatternKey                     = KMInkNoteDashPatternKey
+    
     override init() {
         super.init()
         
@@ -353,7 +392,12 @@ typealias KMPreference = KMPreferenceManager
                     KMMarkupFontTextAligmentKey,
                     KMMarkupFontNoteStringKey,
                     // 新补充
-                    KMMarkupTextFontSizeKey, KMMarkupNoteFontSizeKey]
+                    KMMarkupTextFontSizeKey, KMMarkupNoteFontSizeKey,
+                    KMFreeTextNoteLineWidthKey, KMFreeTextNoteLineStyleKey, KMFreeTextNoteDashPatternKey,
+                    KMCircleNoteLineWidthKey, KMCircleNoteLineStyleKey, KMCircleNoteDashPatternKey,
+                    KMSquareNoteLineWidthKey, KMSquareNoteLineStyleKey, KMSquareNoteDashPatternKey,
+                    KMLineNoteLineWidthKey, KMLineNoteLineStyleKey, KMLineNoteDashPatternKey, KMLineNoteStartLineStyleKey, KMLineNoteEndLineStyleKey,
+                    KMInkNoteLineWidthKey, KMInkNoteLineStyleKey, KMInkNoteDashPatternKey]
         }
         return []
     }
@@ -417,11 +461,27 @@ typealias KMPreference = KMPreferenceManager
                                                      KMMarkupFontNoteStringKey : KMDefaultFontName,
                                                      // 新补充
                                                        KMMarkupTextFontSizeKey : self.textFontSizeDefaultValue(),
-                                                       KMMarkupNoteFontSizeKey : self.noteFontSizeDefaultValue()],
+                                                       KMMarkupNoteFontSizeKey : self.noteFontSizeDefaultValue(),
+                                                    KMFreeTextNoteLineWidthKey : self.freeTextNoteLineWidthDefaultValue(),
+                                                    KMFreeTextNoteLineStyleKey : self.freeTextNoteLineStyleDefaultValue(),
+                                                  KMFreeTextNoteDashPatternKey : self.freeTextNoteDashPatternDefaultValue(),
+                                                      KMCircleNoteLineWidthKey : self.circleNoteLineWidthDefaultValue(),
+                                                      KMCircleNoteLineStyleKey : self.circleNoteLineStyleDefaultValue(),
+                                                    KMCircleNoteDashPatternKey : self.circleNoteDashPatternDefaultValue(),
+                                                      KMSquareNoteLineWidthKey : self.squareNoteLineWidthDefaultValue(),
+                                                      KMSquareNoteLineStyleKey : self.squareNoteLineStyleDefaultValue(),
+                                                    KMSquareNoteDashPatternKey : self.squareNoteDashPatternDefaultValue(),
+                                                        KMLineNoteLineWidthKey : self.lineNoteLineWidthDefaultValue(),
+                                                        KMLineNoteLineStyleKey : self.lineNoteLineStyleDefaultValue(),
+                                                      KMLineNoteDashPatternKey : self.lineNoteDashPatternDefaultValue(),
+                                                   KMLineNoteStartLineStyleKey : self.lineNoteStartLineStyleDefaultValue(),
+                                                     KMLineNoteEndLineStyleKey : self.lineNoteEndLineStyleDefaultValue(),
+                                                         KMInkNoteLineWidthKey : self.inkNoteLineWidthDefaultValue(),
+                                                         KMInkNoteLineStyleKey : self.inkNoteLineStyleDefaultValue(),
+                                                       KMInkNoteDashPatternKey : self.inkNoteDashPatternDefaultValue()],
                 KMPreferenceGroup.infomation.rawValue : [:],
                 KMPreferenceGroup.other.rawValue : [:]]
     }
-    
 }
 
 // MARK: - 默认值
@@ -511,6 +571,74 @@ extension KMPreferenceManager {
     @inline (__always) func noteFontSizeDefaultValue() -> Float {
         return 12.0
     }
+    
+    @inline (__always) func freeTextNoteLineWidthDefaultValue() -> Float {
+        return 0.0
+    }
+    
+    @inline (__always) func freeTextNoteLineStyleDefaultValue() -> Int {
+        return 0
+    }
+    
+    @inline (__always) func freeTextNoteDashPatternDefaultValue() -> [CGFloat] {
+        return []
+    }
+    
+    @inline (__always) func circleNoteLineWidthDefaultValue() -> Float {
+        return 2.0
+    }
+    
+    @inline (__always) func circleNoteLineStyleDefaultValue() -> Int {
+        return 0
+    }
+    
+    @inline (__always) func circleNoteDashPatternDefaultValue() -> [CGFloat] {
+        return []
+    }
+    
+    @inline (__always) func squareNoteLineWidthDefaultValue() -> Float {
+        return 2.0
+    }
+    
+    @inline (__always) func squareNoteLineStyleDefaultValue() -> Int {
+        return 0
+    }
+    
+    @inline (__always) func squareNoteDashPatternDefaultValue() -> [CGFloat] {
+        return []
+    }
+    
+    @inline (__always) func lineNoteLineWidthDefaultValue() -> Float {
+        return 2.0
+    }
+    
+    @inline (__always) func lineNoteLineStyleDefaultValue() -> Int {
+        return 0
+    }
+    
+    @inline (__always) func lineNoteDashPatternDefaultValue() -> [CGFloat] {
+        return []
+    }
+    
+    @inline (__always) func lineNoteStartLineStyleDefaultValue() -> Int {
+        return 0
+    }
+    
+    @inline (__always) func lineNoteEndLineStyleDefaultValue() -> Int {
+        return 0
+    }
+    
+    @inline (__always) func inkNoteLineWidthDefaultValue() -> Float {
+        return 2.0
+    }
+    
+    @inline (__always) func inkNoteLineStyleDefaultValue() -> Int {
+        return 0
+    }
+    
+    @inline (__always) func inkNoteDashPatternDefaultValue() -> [CGFloat] {
+        return []
+    }
 }
 
 //protocol KMPreferenceManagerColorPart: NSObjectProtocol {
@@ -1237,6 +1365,193 @@ extension KMPreferenceManager {
             _ = self.setData(data: newValue, forKey: KMPreference.markupNoteFontSizeKey)
         }
     }
+    
+    var freeTextNoteLineWidth: Float {
+        get {
+            return self.getData(forKey: KMPreference.freeTextNoteLineWidthKey) as? Float ?? self.freeTextNoteLineWidthDefaultValue()
+        }
+        set {
+            self.syncDataToPDFView(newValue, forKey: KMPreference.freeTextNoteLineWidthKey)
+            
+            _ = self.setData(data: newValue, forKey: KMPreference.freeTextNoteLineWidthKey)
+        }
+    }
+    
+    var freeTextNoteLineStyle: Int {
+        get {
+            return self.getData(forKey: KMPreference.freeTextNoteLineStyleKey) as? Int ?? self.freeTextNoteLineStyleDefaultValue()
+        }
+        set {
+            self.syncDataToPDFView(newValue, forKey: KMPreference.freeTextNoteLineStyleKey)
+            
+            _ = self.setData(data: newValue, forKey: KMPreference.freeTextNoteLineStyleKey)
+        }
+    }
+    
+    var freeTextNoteDashPattern: [CGFloat] {
+        get {
+            return self.getData(forKey: KMPreference.freeTextNoteDashPatternKey) as? [CGFloat] ?? self.freeTextNoteDashPatternDefaultValue()
+        }
+        set {
+            self.syncDataToPDFView(newValue, forKey: KMPreference.freeTextNoteDashPatternKey)
+            
+            _ = self.setData(data: newValue, forKey: KMPreference.freeTextNoteDashPatternKey)
+        }
+    }
+    
+    var circleNoteLineWidth: Float {
+        get {
+            return self.getData(forKey: KMPreference.circleNoteLineWidthKey) as? Float ?? self.circleNoteLineWidthDefaultValue()
+        }
+        set {
+            self.syncDataToPDFView(newValue, forKey: KMPreference.circleNoteLineWidthKey)
+            
+            _ = self.setData(data: newValue, forKey: KMPreference.circleNoteLineWidthKey)
+        }
+    }
+    
+    var circleNoteLineStyle: Int {
+        get {
+            return self.getData(forKey: KMPreference.circleNoteLineStyleKey) as? Int ?? self.circleNoteLineStyleDefaultValue()
+        }
+        set {
+            self.syncDataToPDFView(newValue, forKey: KMPreference.circleNoteLineStyleKey)
+            
+            _ = self.setData(data: newValue, forKey: KMPreference.circleNoteLineStyleKey)
+        }
+    }
+    
+    var circleNoteDashPattern: [CGFloat] {
+        get {
+            return self.getData(forKey: KMPreference.circleNoteDashPatternKey) as? [CGFloat] ?? self.circleNoteDashPatternDefaultValue()
+        }
+        set {
+            self.syncDataToPDFView(newValue, forKey: KMPreference.circleNoteDashPatternKey)
+            
+            _ = self.setData(data: newValue, forKey: KMPreference.circleNoteDashPatternKey)
+        }
+    }
+    
+    var squareNoteLineWidth: Float {
+        get {
+            return self.getData(forKey: KMPreference.squareNoteLineWidthKey) as? Float ?? self.squareNoteLineWidthDefaultValue()
+        }
+        set {
+            self.syncDataToPDFView(newValue, forKey: KMPreference.squareNoteLineWidthKey)
+            
+            _ = self.setData(data: newValue, forKey: KMPreference.squareNoteLineWidthKey)
+        }
+    }
+    
+    var squareNoteLineStyle: Int {
+        get {
+            return self.getData(forKey: KMPreference.squareNoteLineStyleKey) as? Int ?? self.squareNoteLineStyleDefaultValue()
+        }
+        set {
+            self.syncDataToPDFView(newValue, forKey: KMPreference.squareNoteLineStyleKey)
+            
+            _ = self.setData(data: newValue, forKey: KMPreference.squareNoteLineStyleKey)
+        }
+    }
+    
+    var squareNoteDashPattern: [CGFloat] {
+        get {
+            return self.getData(forKey: KMPreference.squareNoteDashPatternKey) as? [CGFloat] ?? self.squareNoteDashPatternDefaultValue()
+        }
+        set {
+            self.syncDataToPDFView(newValue, forKey: KMPreference.squareNoteDashPatternKey)
+            
+            _ = self.setData(data: newValue, forKey: KMPreference.squareNoteDashPatternKey)
+        }
+    }
+    
+    var lineNoteLineWidth: Float {
+        get {
+            return self.getData(forKey: KMPreference.lineNoteLineWidthKey) as? Float ?? self.lineNoteLineWidthDefaultValue()
+        }
+        set {
+            self.syncDataToPDFView(newValue, forKey: KMPreference.lineNoteLineWidthKey)
+            
+            _ = self.setData(data: newValue, forKey: KMPreference.lineNoteLineWidthKey)
+        }
+    }
+    
+    var lineNoteLineStyle: Int {
+        get {
+            return self.getData(forKey: KMPreference.lineNoteLineStyleKey) as? Int ?? self.lineNoteLineStyleDefaultValue()
+        }
+        set {
+            self.syncDataToPDFView(newValue, forKey: KMPreference.lineNoteLineStyleKey)
+            
+            _ = self.setData(data: newValue, forKey: KMPreference.lineNoteLineStyleKey)
+        }
+    }
+    
+    var lineNoteDashPattern: [CGFloat] {
+        get {
+            return self.getData(forKey: KMPreference.lineNoteDashPatternKey) as? [CGFloat] ?? self.lineNoteDashPatternDefaultValue()
+        }
+        set {
+            self.syncDataToPDFView(newValue, forKey: KMPreference.lineNoteDashPatternKey)
+            
+            _ = self.setData(data: newValue, forKey: KMPreference.lineNoteDashPatternKey)
+        }
+    }
+    
+    var lineNoteStartLineStyle: Int {
+        get {
+            return self.getData(forKey: KMPreference.lineNoteStartLineStyleKey) as? Int ?? self.lineNoteStartLineStyleDefaultValue()
+        }
+        set {
+            self.syncDataToPDFView(newValue, forKey: KMPreference.lineNoteStartLineStyleKey)
+            
+            _ = self.setData(data: newValue, forKey: KMPreference.lineNoteStartLineStyleKey)
+        }
+    }
+    
+    var lineNoteEndLineStyle: Int {
+        get {
+            return self.getData(forKey: KMPreference.lineNoteEndLineStyleKey) as? Int ?? self.lineNoteEndLineStyleDefaultValue()
+        }
+        set {
+            self.syncDataToPDFView(newValue, forKey: KMPreference.lineNoteEndLineStyleKey)
+            
+            _ = self.setData(data: newValue, forKey: KMPreference.lineNoteEndLineStyleKey)
+        }
+    }
+    
+    var inkNoteLineWidth: Float {
+        get {
+            return self.getData(forKey: KMPreference.inkNoteLineWidthKey) as? Float ?? self.inkNoteLineWidthDefaultValue()
+        }
+        set {
+            self.syncDataToPDFView(newValue, forKey: KMPreference.inkNoteLineWidthKey)
+            
+            _ = self.setData(data: newValue, forKey: KMPreference.inkNoteLineWidthKey)
+        }
+    }
+    
+    var inkNoteLineStyle: Int {
+        get {
+            return self.getData(forKey: KMPreference.inkNoteLineStyleKey) as? Int ?? self.inkNoteLineStyleDefaultValue()
+        }
+        set {
+            self.syncDataToPDFView(newValue, forKey: KMPreference.inkNoteLineStyleKey)
+            
+            _ = self.setData(data: newValue, forKey: KMPreference.inkNoteLineStyleKey)
+        }
+    }
+    
+    var inkNoteDashPattern: [CGFloat] {
+        get {
+            return self.getData(forKey: KMPreference.inkNoteDashPatternKey) as? [CGFloat] ?? self.inkNoteDashPatternDefaultValue()
+        }
+        set {
+            self.syncDataToPDFView(newValue, forKey: KMPreference.inkNoteDashPatternKey)
+            
+            _ = self.setData(data: newValue, forKey: KMPreference.inkNoteDashPatternKey)
+        }
+    }
 }
 
 // MARK: -

+ 86 - 32
PDF Office/PDF Master/Class/Preference/View/KMLineWell.swift

@@ -44,7 +44,7 @@ class KMLineWell: NSControl {
             return self._lineWidth
         }
         set {
-            if (fabs(self._lineWidth - newValue) > 0.00001) {
+            if (abs(self._lineWidth - newValue) > 0.00001) {
                 self._lineWidth = newValue
                 self._changedValue(forKey: SKLineWellLineWidthKey)
             }
@@ -161,6 +161,9 @@ class KMLineWell: NSControl {
         }
     }
     
+    private var _pri_target: AnyObject?
+    private var _pri_action: Selector?
+    
     deinit {
         KMPrint("KMLineWell deinit.")
         
@@ -337,8 +340,50 @@ class KMLineWell: NSControl {
                 self._activate(true)
             }
         }
+        
+    }
+    
+    override var target: AnyObject? {
+        get {
+            return self._pri_target
+        }
+        set {
+            self._pri_target = newValue
+        }
+    }
+    
+    override var action: Selector? {
+        get {
+            return self._pri_action
+        }
+        set {
+            self._pri_action = newValue
+        }
+    }
+    
+    func takeValue(for key: String, from object: AnyObject) {
+        if let inspector = object as? KMLineInspector {
+            if key == Self.widthKey {
+                self.lineWidth = inspector.lineWidth
+            } else if key == Self.styleKey {
+                self.style = CPDFBorderStyle(rawValue: inspector.style) ?? .solid
+            } else if key == Self.startLineStyleKey {
+                self.startLineStyle = CPDFLineStyle(rawValue: inspector.startLineStyle) ?? .none
+            } else if key == Self.endLineStyleKey {
+                self.endLineStyle = CPDFLineStyle(rawValue: inspector.endLineStyle) ?? .none
+            } else if key == Self.dashPatternKey {
+                self.dashPattern = inspector.dashPattern as NSArray
+            }
+        }
     }
     
+//    - (void)takeValueForKey:(NSString *)key from:(id)object {
+//        [self setValue:[object valueForKey:key] forKey:key];
+//        NSDictionary *info = [self infoForBinding:key];
+//        [[info objectForKey:NSObservedObjectKey] setValue:[self valueForKey:key] forKeyPath:[info objectForKey:NSObservedKeyPathKey]];
+//    }
+
+    
     
     /*
 
@@ -372,18 +417,6 @@ class KMLineWell: NSControl {
      //    [super dealloc];
      }
 
-     - (void)takeValueForKey:(NSString *)key from:(id)object {
-         [self setValue:[object valueForKey:key] forKey:key];
-         NSDictionary *info = [self infoForBinding:key];
-         [[info objectForKey:NSObservedObjectKey] setValue:[self valueForKey:key] forKeyPath:[info objectForKey:NSObservedKeyPathKey]];
-     }
-
-
-
-     - (void)lineInspectorWindowWillClose:(NSNotification *)notification {
-         [self deactivate];
-     }
-
      #pragma mark Accessors
 
      - (SEL)action { return action; }
@@ -744,30 +777,27 @@ extension KMLineWell {
             nc.post(name: NSNotification.Name(rawValue: SKLineWellWillBecomeActiveNotification), object: self, userInfo: [EXCLUSIVE_KEY : NSNumber(value: exclusive)])
             
             if (__lwFlags.existsActiveLineWell != 0) {
-    //            [self takeValueForKey:SKLineWellLineWidthKey from:inspector];
-    //            [self takeValueForKey:SKLineWellDashPatternKey from:inspector];
-    //            [self takeValueForKey:SKLineWellStyleKey from:inspector];
+                self.takeValue(for: SKLineWellLineWidthKey, from: inspector)
+                self.takeValue(for: SKLineWellDashPatternKey, from: inspector)
+                self.takeValue(for: SKLineWellStyleKey, from: inspector)
                 if (self.displayStyle == .line) {
-    //                [self takeValueForKey:SKLineWellStartLineStyleKey from:inspector];
-    //                [self takeValueForKey:SKLineWellEndLineStyleKey from:inspector];
+                    self.takeValue(for: SKLineWellStartLineStyleKey, from: inspector)
+                    self.takeValue(for: SKLineWellEndLineStyleKey, from: inspector)
                 }
             } else {
-    //            [inspector setLineWidth:[self lineWidth]];
-    //            [inspector setDashPattern:[self dashPattern]];
-    //            [inspector setStyle:[self style]];
+                inspector.lineWidth = self.lineWidth
+                inspector.dashPattern = self.dashPattern as? [CGFloat] ?? []
+                inspector.style = self.style.rawValue
                 if (self.displayStyle == .line) {
-    //                [inspector setStartLineStyle:[self startLineStyle]];
-    //                [inspector setEndLineStyle:[self endLineStyle]];
+                    inspector.startLineStyle = self.startLineStyle.rawValue
+                    inspector.endLineStyle = self.endLineStyle.rawValue
                 }
             }
-    //        [[inspector window] orderFront:self];
             inspector.window?.orderFront(self)
             
             nc.addObserver(self, selector: #selector(_lineWellWillBecomeActive), name: NSNotification.Name(SKLineWellWillBecomeActiveNotification), object: nil)
-    //        [nc addObserver:self selector:@selector(lineInspectorWindowWillClose:)
-    //                   name:NSWindowWillCloseNotification object:[inspector window]];
-    //        [nc addObserver:self selector:@selector(lineInspectorLineAttributeChanged:)
-    //                   name:SKLineInspectorLineAttributeDidChangeNotification object:inspector];
+            nc.addObserver(self, selector: #selector(_lineInspectorWindowWillClose), name: NSWindow.willCloseNotification, object: inspector.window)
+            nc.addObserver(self, selector: #selector(_lineInspectorLineAttributeChanged), name: KMLineInspector.lineAttributeDidChangeNotification, object: inspector)
             
             __lwFlags.active = true
             
@@ -787,11 +817,35 @@ extension KMLineWell {
         }
     }
     
+    @objc private func _lineInspectorWindowWillClose(_ notification: Notification) {
+        self._deactivate()
+    }
+    
+    @objc private func _lineInspectorLineAttributeChanged(_ notification: Notification) {
+        guard let inspector = notification.object as? KMLineInspector else {
+            return
+        }
+        let action = inspector.currentLineChangeAction
+        var key: String?
+        if action == .lineWidth {
+            key = Self.widthKey
+        } else if action == .style {
+            key = Self.styleKey
+        } else if action == .dashPattern {
+            key = Self.dashPatternKey
+        } else if action == .startLineStyle {
+            key = Self.startLineStyleKey
+        } else if action == .endLineStyle {
+            key = Self.endLineStyleKey
+        }
+        
+        if let _key = key {
+            self.takeValue(for: _key, from: inspector)
+            self.sendAction(self._pri_action, to: self._pri_target)
+        }
+    }
+    
     private func _existsActiveLineWell() {
         __lwFlags.existsActiveLineWell = 1
     }
-    
-    /*
-
-     */
 }

PDF Office/PDF Master/PDF_Master DMG-Bridging-Header.h → PDF Office/PDF Master/PDF_Reader_Pro DMG-Bridging-Header.h


+ 26 - 15
PDF Office/PDF Master/PDF_Master Pro-Bridging-Header.h

@@ -2,57 +2,68 @@
 //  Use this file to import your target's public headers that you would like to expose to Swift.
 //
 
-#import <ComPDFKit/ComPDFKit.h>
-#import "ComPDFUIKit.h"
+//#import <ComPDFKit/ComPDFKit.h>
+#import "ComPDFKit/ComPDFKit.h"
 #import "CPDFListView+Event.h"
-#import "NSGeometry+PDFListView.h"
+#import "ComPDFUIKit.h"
 
 #import "KMToolbarItem.h"
-#import "KMToolbar.h"
 #import <ComPDFKit_Conversion/ComPDFKit_Conversion.h>
 //#import <ComDocumentAIKit/ComDocumentAIKit.h>
+#import "CTTabContents.h"
+#import "CTBrowser.h"
+#import "CTBrowserWindowController.h"
+#import "CTTabWindowController.h"
+#import "CTTabStripModel.h"
+#import "CTTabStripView.h"
+#import "CTBrowserWindow.h"
+#import "CTTabController.h"
+#import "CPDFListView+Public.h"
+#import "KMAnnotationPropertiesViewController.h"
 
 #import "CPDFListView+Tool.h"
 #import "NSBitmapImageRep_SKExtensions.h"
-#import "CPDFListView+Public.h"
-#import "KMGeneralAnnotationViewController.h"
-#import "KMAnnotationPropertiesViewController.h"
+#import <Masonry/Masonry.h>
 #import "KMPDFEditAppendWindow.h"
+
 #import "KMWatermarkPDFView_OC.h"
-#import "KMDocumentAIViewController.h"
-#import "NSUserDefaults+PDFListView.h"
 
 #import "KMCloudServer.h"
 #import <ObjectiveDropboxOfficial/ObjectiveDropboxOfficial.h>
 #import "KMCloudOperation.h"
+#import "KMSecondaryViewController.h"
 //
 #import "KMPrintAccessoryController_OC.h"
-//
 
 #import "CStringConstants.h"
-#import "NSUserDefaults+PDFListView.h"
+
+#import "KMCellEmptyView.h"
 #import "GBDeviceInfo.h"
 #import "KMEmailSubWindowController.h"
-#import "SKInfoWindowController.h"
 #import "SKKeychain.h"
+#import "CSelfSignAnnotationFreeText.h"
+#import "CSelfSignAnnotation.h"
 //广告
-#import "KMRecommondManager.h"
 #import "CPDFListView+Extension.h"
-#import "NSImage+PDFListView.h"
 
+#import "NSGeometry+PDFListView.h"
+#import "CPDFAnnotationHeader.h"
+#import "SKLocalization.h"
+#import "NSImage+PDFListView.h"
 #import "KMColorPickerViewController.h"
 
 #import "KMConvertURLToPDF.h"
+
 #import "NSImage_SKExtensions.h"
 
 #import "KMOCTool.h"
 #import "KMGOCRManager.h"
 #import "CPDFAnnotationModel.h"
+#import "CPDFListView.h"
 #import "Reachability.h"
 #import "NSPointerArray+PDFListView.h"
 
 #import "NewTabButton.h"
-
 //数字签名
 #import "KMDSignatureManager.h"
 #import "CPDFDigtalView.h"

+ 159 - 221
PDF Office/PDF Reader Pro.xcodeproj/project.pbxproj

@@ -726,6 +726,12 @@
 		9F69DBB52B512614003D4C45 /* KMAnnotationTextWidgetOptionsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9F69DBB12B512614003D4C45 /* KMAnnotationTextWidgetOptionsViewController.xib */; };
 		9F69DBB62B512614003D4C45 /* KMAnnotationTextWidgetOptionsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9F69DBB12B512614003D4C45 /* KMAnnotationTextWidgetOptionsViewController.xib */; };
 		9F69DBB72B512614003D4C45 /* KMAnnotationTextWidgetOptionsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9F69DBB12B512614003D4C45 /* KMAnnotationTextWidgetOptionsViewController.xib */; };
+		9F69DBBA2B55014F003D4C45 /* KMAnnotationButtonWidgetAppearanceViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F69DBB82B55014F003D4C45 /* KMAnnotationButtonWidgetAppearanceViewController.swift */; };
+		9F69DBBB2B55014F003D4C45 /* KMAnnotationButtonWidgetAppearanceViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F69DBB82B55014F003D4C45 /* KMAnnotationButtonWidgetAppearanceViewController.swift */; };
+		9F69DBBC2B55014F003D4C45 /* KMAnnotationButtonWidgetAppearanceViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F69DBB82B55014F003D4C45 /* KMAnnotationButtonWidgetAppearanceViewController.swift */; };
+		9F69DBBD2B55014F003D4C45 /* KMAnnotationButtonWidgetAppearanceViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9F69DBB92B55014F003D4C45 /* KMAnnotationButtonWidgetAppearanceViewController.xib */; };
+		9F69DBBE2B55014F003D4C45 /* KMAnnotationButtonWidgetAppearanceViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9F69DBB92B55014F003D4C45 /* KMAnnotationButtonWidgetAppearanceViewController.xib */; };
+		9F69DBBF2B55014F003D4C45 /* KMAnnotationButtonWidgetAppearanceViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9F69DBB92B55014F003D4C45 /* KMAnnotationButtonWidgetAppearanceViewController.xib */; };
 		9F705F76291A3A84005199AD /* KMHistoryFileDeleteWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F705F74291A3A84005199AD /* KMHistoryFileDeleteWindowController.swift */; };
 		9F705F77291A3A84005199AD /* KMHistoryFileDeleteWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F705F74291A3A84005199AD /* KMHistoryFileDeleteWindowController.swift */; };
 		9F705F78291A3A84005199AD /* KMHistoryFileDeleteWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F705F74291A3A84005199AD /* KMHistoryFileDeleteWindowController.swift */; };
@@ -1287,6 +1293,34 @@
 		AD1D48522AFB8510007AC1F0 /* KMMergeTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD1D48512AFB8510007AC1F0 /* KMMergeTableViewCell.xib */; };
 		AD1D48532AFB8510007AC1F0 /* KMMergeTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD1D48512AFB8510007AC1F0 /* KMMergeTableViewCell.xib */; };
 		AD1D48542AFB8510007AC1F0 /* KMMergeTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD1D48512AFB8510007AC1F0 /* KMMergeTableViewCell.xib */; };
+		AD2BF21A2B5553E70029F03F /* ComPDFKit_Conversion.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ADA08A8029F13EE1009B2A7B /* ComPDFKit_Conversion.framework */; };
+		AD2BF21B2B5553E70029F03F /* ComPDFKit_Conversion.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = ADA08A8029F13EE1009B2A7B /* ComPDFKit_Conversion.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		AD2BF21C2B5553E90029F03F /* ComPDFKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ADA08A7C29F13EA0009B2A7B /* ComPDFKit.framework */; };
+		AD2BF21D2B5553E90029F03F /* ComPDFKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = ADA08A7C29F13EA0009B2A7B /* ComPDFKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		AD2BF21E2B5553EB0029F03F /* AFNetworking.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ADE3C1C729A5A75E00793B13 /* AFNetworking.framework */; };
+		AD2BF21F2B5553EB0029F03F /* AFNetworking.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = ADE3C1C729A5A75E00793B13 /* AFNetworking.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		AD2BF2202B5555CA0029F03F /* ObjectiveDropboxOfficial.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BBB9B335299A5F35004F3235 /* ObjectiveDropboxOfficial.framework */; };
+		AD2BF2212B5555CA0029F03F /* ObjectiveDropboxOfficial.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = BBB9B335299A5F35004F3235 /* ObjectiveDropboxOfficial.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		AD2BF2222B5555CD0029F03F /* libDocumentAI.3.2.2.dylib in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = AD8DD2922A972486007CC9D0 /* libDocumentAI.3.2.2.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
+		AD2BF2232B5555CE0029F03F /* libonnxruntime.1.14.1.dylib in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = AD8DD2962A97248E007CC9D0 /* libonnxruntime.1.14.1.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
+		AD2BF2242B5555D00029F03F /* libopencv_world.4.2.dylib in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = BB9DCC7D2A09FC740024A6F1 /* libopencv_world.4.2.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
+		AD2BF2252B5555D30029F03F /* libpaddle2onnx.1.0.7.dylib in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = AD8DD29A2A972492007CC9D0 /* libpaddle2onnx.1.0.7.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
+		AD2BF2262B5556B20029F03F /* AppCenterAnalytics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9F00CCC32A2F2E2400AC462E /* AppCenterAnalytics.framework */; };
+		AD2BF2272B5556C40029F03F /* AppCenter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9F00CCC22A2F2E2300AC462E /* AppCenter.framework */; };
+		AD2BF2282B5556C80029F03F /* AppCenterCrashes.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9F00CCC42A2F2E2400AC462E /* AppCenterCrashes.framework */; };
+		AD2BF2292B5608700029F03F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = BBFBE6C128DD7B98008B2335 /* Assets.xcassets */; };
+		AD2BF22F2B5610110029F03F /* ComDocumentAIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AD2BF22B2B560F1D0029F03F /* ComDocumentAIKit.framework */; };
+		AD2BF2302B5610110029F03F /* ComDocumentAIKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = AD2BF22B2B560F1D0029F03F /* ComDocumentAIKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		AD2BF2312B56200D0029F03F /* SF-Pro-Text-Bold.otf in Resources */ = {isa = PBXBuildFile; fileRef = ADBC374429CAD2D300D93208 /* SF-Pro-Text-Bold.otf */; };
+		AD2BF2322B5620110029F03F /* SF-Pro-Text-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = ADEC7A7C299397F8009A8256 /* SF-Pro-Text-Regular.otf */; };
+		AD2BF2332B5620150029F03F /* SF-Pro-Text-Semibold.otf in Resources */ = {isa = PBXBuildFile; fileRef = ADEC7A7D299397F8009A8256 /* SF-Pro-Text-Semibold.otf */; };
+		AD2BF2342B5620380029F03F /* SF-Pro-Text-Bold.otf in CopyFiles */ = {isa = PBXBuildFile; fileRef = ADBC374429CAD2D300D93208 /* SF-Pro-Text-Bold.otf */; };
+		AD2BF2352B56203C0029F03F /* SF-Pro-Text-Regular.otf in CopyFiles */ = {isa = PBXBuildFile; fileRef = ADEC7A7C299397F8009A8256 /* SF-Pro-Text-Regular.otf */; };
+		AD2BF2362B5620410029F03F /* SF-Pro-Text-Semibold.otf in CopyFiles */ = {isa = PBXBuildFile; fileRef = ADEC7A7D299397F8009A8256 /* SF-Pro-Text-Semibold.otf */; };
+		AD2BF2372B5622200029F03F /* ComDocumentAIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AD2BF22B2B560F1D0029F03F /* ComDocumentAIKit.framework */; };
+		AD2BF2382B5622200029F03F /* ComDocumentAIKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = AD2BF22B2B560F1D0029F03F /* ComDocumentAIKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		AD2BF2392B5622260029F03F /* ComDocumentAIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AD2BF22B2B560F1D0029F03F /* ComDocumentAIKit.framework */; };
+		AD2BF23A2B5622260029F03F /* ComDocumentAIKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = AD2BF22B2B560F1D0029F03F /* ComDocumentAIKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
 		AD2D74AD29F0CEB300EDC5E4 /* KMCancellationWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD2D74AB29F0CEB300EDC5E4 /* KMCancellationWindowController.swift */; };
 		AD2D74AE29F0CEB300EDC5E4 /* KMCancellationWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD2D74AB29F0CEB300EDC5E4 /* KMCancellationWindowController.swift */; };
 		AD2D74AF29F0CEB300EDC5E4 /* KMCancellationWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD2D74AB29F0CEB300EDC5E4 /* KMCancellationWindowController.swift */; };
@@ -1598,8 +1632,6 @@
 		AD9527EE295578BD0039D2BC /* KMBaseTextFieldPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD9527ED295578BD0039D2BC /* KMBaseTextFieldPresenter.swift */; };
 		AD9527EF295578BD0039D2BC /* KMBaseTextFieldPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD9527ED295578BD0039D2BC /* KMBaseTextFieldPresenter.swift */; };
 		AD9527F0295578BD0039D2BC /* KMBaseTextFieldPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD9527ED295578BD0039D2BC /* KMBaseTextFieldPresenter.swift */; };
-		ADA08A7E29F13EA0009B2A7B /* ComPDFKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ADA08A7C29F13EA0009B2A7B /* ComPDFKit.framework */; };
-		ADA08A8229F13EE1009B2A7B /* ComPDFKit_Conversion.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ADA08A8029F13EE1009B2A7B /* ComPDFKit_Conversion.framework */; };
 		ADA08A8429F1430E009B2A7B /* ComPDFKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ADA08A7C29F13EA0009B2A7B /* ComPDFKit.framework */; };
 		ADA08A8529F1430E009B2A7B /* ComPDFKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = ADA08A7C29F13EA0009B2A7B /* ComPDFKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
 		ADA08A8629F14336009B2A7B /* ComPDFKit_Conversion.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ADA08A8029F13EE1009B2A7B /* ComPDFKit_Conversion.framework */; };
@@ -1798,10 +1830,8 @@
 		ADBC374229CAB1C300D93208 /* KMComparativeOutlineCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADBC374029CAB1C300D93208 /* KMComparativeOutlineCell.swift */; };
 		ADBC374329CAB1C300D93208 /* KMComparativeOutlineCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADBC374029CAB1C300D93208 /* KMComparativeOutlineCell.swift */; };
 		ADBC374529CAD2D300D93208 /* SF-Pro-Text-Bold.otf in Resources */ = {isa = PBXBuildFile; fileRef = ADBC374429CAD2D300D93208 /* SF-Pro-Text-Bold.otf */; };
-		ADBC374629CAD2D300D93208 /* SF-Pro-Text-Bold.otf in Resources */ = {isa = PBXBuildFile; fileRef = ADBC374429CAD2D300D93208 /* SF-Pro-Text-Bold.otf */; };
 		ADBC374729CAD2D300D93208 /* SF-Pro-Text-Bold.otf in Resources */ = {isa = PBXBuildFile; fileRef = ADBC374429CAD2D300D93208 /* SF-Pro-Text-Bold.otf */; };
 		ADBC374829CAD31700D93208 /* SF-Pro-Text-Bold.otf in CopyFiles */ = {isa = PBXBuildFile; fileRef = ADBC374429CAD2D300D93208 /* SF-Pro-Text-Bold.otf */; };
-		ADBC374929CAD31F00D93208 /* SF-Pro-Text-Bold.otf in CopyFiles */ = {isa = PBXBuildFile; fileRef = ADBC374429CAD2D300D93208 /* SF-Pro-Text-Bold.otf */; };
 		ADBC374A29CAD32A00D93208 /* SF-Pro-Text-Bold.otf in CopyFiles */ = {isa = PBXBuildFile; fileRef = ADBC374429CAD2D300D93208 /* SF-Pro-Text-Bold.otf */; };
 		ADBC374C29CAD65D00D93208 /* KMComparativeOutlineCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADBC374B29CAD65D00D93208 /* KMComparativeOutlineCell.xib */; };
 		ADBC374D29CAD65D00D93208 /* KMComparativeOutlineCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADBC374B29CAD65D00D93208 /* KMComparativeOutlineCell.xib */; };
@@ -2148,7 +2178,6 @@
 		ADE3C1C429A4C13700793B13 /* KMPrintAccessoryController_OC.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADE3C1C029A4C13700793B13 /* KMPrintAccessoryController_OC.xib */; };
 		ADE3C1C529A4C13700793B13 /* KMPrintAccessoryController_OC.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADE3C1C029A4C13700793B13 /* KMPrintAccessoryController_OC.xib */; };
 		ADE3C1C629A4C13700793B13 /* KMPrintAccessoryController_OC.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADE3C1C029A4C13700793B13 /* KMPrintAccessoryController_OC.xib */; };
-		ADE3C1C929A5A75E00793B13 /* AFNetworking.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ADE3C1C729A5A75E00793B13 /* AFNetworking.framework */; };
 		ADE3C1CC29A5A7EE00793B13 /* AFNetworking.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ADE3C1C729A5A75E00793B13 /* AFNetworking.framework */; };
 		ADE3C1CD29A5A7EE00793B13 /* AFNetworking.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = ADE3C1C729A5A75E00793B13 /* AFNetworking.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
 		ADE3C1DE29A5AA0B00793B13 /* KMRequestServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE3C1DD29A5AA0B00793B13 /* KMRequestServer.swift */; };
@@ -2296,15 +2325,11 @@
 		ADEC7A7F299397F8009A8256 /* NSFont+SFProText.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADEC7A7B299397F8009A8256 /* NSFont+SFProText.swift */; };
 		ADEC7A80299397F8009A8256 /* NSFont+SFProText.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADEC7A7B299397F8009A8256 /* NSFont+SFProText.swift */; };
 		ADEC7A81299397F8009A8256 /* SF-Pro-Text-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = ADEC7A7C299397F8009A8256 /* SF-Pro-Text-Regular.otf */; };
-		ADEC7A82299397F8009A8256 /* SF-Pro-Text-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = ADEC7A7C299397F8009A8256 /* SF-Pro-Text-Regular.otf */; };
 		ADEC7A83299397F8009A8256 /* SF-Pro-Text-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = ADEC7A7C299397F8009A8256 /* SF-Pro-Text-Regular.otf */; };
 		ADEC7A84299397F8009A8256 /* SF-Pro-Text-Semibold.otf in Resources */ = {isa = PBXBuildFile; fileRef = ADEC7A7D299397F8009A8256 /* SF-Pro-Text-Semibold.otf */; };
-		ADEC7A85299397F8009A8256 /* SF-Pro-Text-Semibold.otf in Resources */ = {isa = PBXBuildFile; fileRef = ADEC7A7D299397F8009A8256 /* SF-Pro-Text-Semibold.otf */; };
 		ADEC7A86299397F8009A8256 /* SF-Pro-Text-Semibold.otf in Resources */ = {isa = PBXBuildFile; fileRef = ADEC7A7D299397F8009A8256 /* SF-Pro-Text-Semibold.otf */; };
 		ADEC7A8829939857009A8256 /* SF-Pro-Text-Regular.otf in CopyFiles */ = {isa = PBXBuildFile; fileRef = ADEC7A7C299397F8009A8256 /* SF-Pro-Text-Regular.otf */; };
 		ADEC7A8929939857009A8256 /* SF-Pro-Text-Semibold.otf in CopyFiles */ = {isa = PBXBuildFile; fileRef = ADEC7A7D299397F8009A8256 /* SF-Pro-Text-Semibold.otf */; };
-		ADEC7A8D29939947009A8256 /* SF-Pro-Text-Regular.otf in CopyFiles */ = {isa = PBXBuildFile; fileRef = ADEC7A7C299397F8009A8256 /* SF-Pro-Text-Regular.otf */; };
-		ADEC7A8E29939947009A8256 /* SF-Pro-Text-Semibold.otf in CopyFiles */ = {isa = PBXBuildFile; fileRef = ADEC7A7D299397F8009A8256 /* SF-Pro-Text-Semibold.otf */; };
 		ADEC7A9029939957009A8256 /* SF-Pro-Text-Regular.otf in CopyFiles */ = {isa = PBXBuildFile; fileRef = ADEC7A7C299397F8009A8256 /* SF-Pro-Text-Regular.otf */; };
 		ADEC7A9129939957009A8256 /* SF-Pro-Text-Semibold.otf in CopyFiles */ = {isa = PBXBuildFile; fileRef = ADEC7A7D299397F8009A8256 /* SF-Pro-Text-Semibold.otf */; };
 		ADED71D929B57C01005EEC0A /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = ADED71DD29B57C01005EEC0A /* Localizable.strings */; };
@@ -3834,13 +3859,10 @@
 		BB9DCC8A2A09FC770024A6F1 /* libopencv_world.4.2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = BB9DCC7D2A09FC740024A6F1 /* libopencv_world.4.2.dylib */; };
 		BB9DCC8B2A09FC770024A6F1 /* libopencv_world.4.2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = BB9DCC7D2A09FC740024A6F1 /* libopencv_world.4.2.dylib */; };
 		BB9DCC942A09FCA50024A6F1 /* libopencv_world.4.2.dylib in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = BB9DCC7D2A09FC740024A6F1 /* libopencv_world.4.2.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
-		BB9DCC9A2A0A10410024A6F1 /* ComDocumentAIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB9DCC982A0A10400024A6F1 /* ComDocumentAIKit.framework */; };
-		BB9DCC9C2A0A104E0024A6F1 /* ComDocumentAIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB9DCC982A0A10400024A6F1 /* ComDocumentAIKit.framework */; };
-		BB9DCC9D2A0A104E0024A6F1 /* ComDocumentAIKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = BB9DCC982A0A10400024A6F1 /* ComDocumentAIKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
 		BB9DCC9F2A0A2B0A0024A6F1 /* KMConvertSettingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9DCC9E2A0A2B0A0024A6F1 /* KMConvertSettingView.swift */; };
 		BB9DCCA02A0A2B0A0024A6F1 /* KMConvertSettingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9DCC9E2A0A2B0A0024A6F1 /* KMConvertSettingView.swift */; };
 		BB9DCCA12A0A2B0A0024A6F1 /* KMConvertSettingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9DCC9E2A0A2B0A0024A6F1 /* KMConvertSettingView.swift */; };
-		BB9DEE862A14A01D00351CC4 /* PDF-Master-DMG-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = ADC076122987F06A006C752F /* PDF-Master-DMG-Info.plist */; };
+		BB9DEE862A14A01D00351CC4 /* PDF-Reader-Pro-DMG-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = ADC076122987F06A006C752F /* PDF-Reader-Pro-DMG-Info.plist */; };
 		BB9E2F732A495BCD000DC68D /* KMConvertSettingLimitTipView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9E2F722A495BCD000DC68D /* KMConvertSettingLimitTipView.swift */; };
 		BB9E2F742A495BCD000DC68D /* KMConvertSettingLimitTipView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9E2F722A495BCD000DC68D /* KMConvertSettingLimitTipView.swift */; };
 		BB9E2F752A495BCD000DC68D /* KMConvertSettingLimitTipView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9E2F722A495BCD000DC68D /* KMConvertSettingLimitTipView.swift */; };
@@ -4068,7 +4090,6 @@
 		BBB9B32E299A5D6D004F3235 /* GTMAppAuthFetcherAuthorization.m in Sources */ = {isa = PBXBuildFile; fileRef = BBB9B306299A5D6C004F3235 /* GTMAppAuthFetcherAuthorization.m */; };
 		BBB9B32F299A5D6D004F3235 /* GTMAppAuthFetcherAuthorization.m in Sources */ = {isa = PBXBuildFile; fileRef = BBB9B306299A5D6C004F3235 /* GTMAppAuthFetcherAuthorization.m */; };
 		BBB9B330299A5D6D004F3235 /* GTMAppAuthFetcherAuthorization.m in Sources */ = {isa = PBXBuildFile; fileRef = BBB9B306299A5D6C004F3235 /* GTMAppAuthFetcherAuthorization.m */; };
-		BBB9B337299A5F35004F3235 /* ObjectiveDropboxOfficial.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BBB9B335299A5F35004F3235 /* ObjectiveDropboxOfficial.framework */; };
 		BBB9B339299A5FD1004F3235 /* ObjectiveDropboxOfficial.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BBB9B335299A5F35004F3235 /* ObjectiveDropboxOfficial.framework */; };
 		BBB9B33A299A5FD1004F3235 /* ObjectiveDropboxOfficial.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = BBB9B335299A5F35004F3235 /* ObjectiveDropboxOfficial.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
 		BBBB6CCA2AD109F30035AA66 /* CPDFAnnotation+PDFListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBB6CC92AD109F30035AA66 /* CPDFAnnotation+PDFListView.swift */; };
@@ -4306,8 +4327,6 @@
 		BBD512A22B0DE86C005BFE8A /* KMBotaLeftView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBD512A02B0DE86C005BFE8A /* KMBotaLeftView.swift */; };
 		BBD512A32B0DE86C005BFE8A /* KMBotaLeftView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBD512A02B0DE86C005BFE8A /* KMBotaLeftView.swift */; };
 		BBD54ECA2A1C53A80012A230 /* libopencv_world.4.2.dylib in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = BB9DCC7D2A09FC740024A6F1 /* libopencv_world.4.2.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
-		BBD54ECD2A1C53B20012A230 /* ComDocumentAIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB9DCC982A0A10400024A6F1 /* ComDocumentAIKit.framework */; };
-		BBD54ECE2A1C53B20012A230 /* ComDocumentAIKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = BB9DCC982A0A10400024A6F1 /* ComDocumentAIKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
 		BBD54ED42A1CBD720012A230 /* NSView+KMExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBD54ED32A1CBD720012A230 /* NSView+KMExtension.swift */; };
 		BBD54ED52A1CBD720012A230 /* NSView+KMExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBD54ED32A1CBD720012A230 /* NSView+KMExtension.swift */; };
 		BBD54ED62A1CBD720012A230 /* NSView+KMExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBD54ED32A1CBD720012A230 /* NSView+KMExtension.swift */; };
@@ -4741,9 +4760,9 @@
 			dstPath = Fonts;
 			dstSubfolderSpec = 7;
 			files = (
-				ADBC374929CAD31F00D93208 /* SF-Pro-Text-Bold.otf in CopyFiles */,
-				ADEC7A8D29939947009A8256 /* SF-Pro-Text-Regular.otf in CopyFiles */,
-				ADEC7A8E29939947009A8256 /* SF-Pro-Text-Semibold.otf in CopyFiles */,
+				AD2BF2342B5620380029F03F /* SF-Pro-Text-Bold.otf in CopyFiles */,
+				AD2BF2352B56203C0029F03F /* SF-Pro-Text-Regular.otf in CopyFiles */,
+				AD2BF2362B5620410029F03F /* SF-Pro-Text-Semibold.otf in CopyFiles */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -4767,10 +4786,10 @@
 			files = (
 				ADA08A8729F14336009B2A7B /* ComPDFKit_Conversion.framework in Embed Frameworks */,
 				AD8DD29E2A97249A007CC9D0 /* libDocumentAI.3.2.2.dylib in Embed Frameworks */,
+				AD2BF2382B5622200029F03F /* ComDocumentAIKit.framework in Embed Frameworks */,
 				ADE3C1CD29A5A7EE00793B13 /* AFNetworking.framework in Embed Frameworks */,
 				AD8DD2A02A97249D007CC9D0 /* libpaddle2onnx.1.0.7.dylib in Embed Frameworks */,
 				AD8DD29F2A97249B007CC9D0 /* libonnxruntime.1.14.1.dylib in Embed Frameworks */,
-				BB9DCC9D2A0A104E0024A6F1 /* ComDocumentAIKit.framework in Embed Frameworks */,
 				89752DAC2936ECED003FF08E /* Masonry.framework in Embed Frameworks */,
 				ADA08A8529F1430E009B2A7B /* ComPDFKit.framework in Embed Frameworks */,
 				BBB9B33A299A5FD1004F3235 /* ObjectiveDropboxOfficial.framework in Embed Frameworks */,
@@ -4785,7 +4804,16 @@
 			dstPath = "";
 			dstSubfolderSpec = 10;
 			files = (
+				AD2BF21D2B5553E90029F03F /* ComPDFKit.framework in Embed Frameworks */,
+				AD2BF21F2B5553EB0029F03F /* AFNetworking.framework in Embed Frameworks */,
+				AD2BF2302B5610110029F03F /* ComDocumentAIKit.framework in Embed Frameworks */,
+				AD2BF2222B5555CD0029F03F /* libDocumentAI.3.2.2.dylib in Embed Frameworks */,
+				AD2BF21B2B5553E70029F03F /* ComPDFKit_Conversion.framework in Embed Frameworks */,
+				AD2BF2212B5555CA0029F03F /* ObjectiveDropboxOfficial.framework in Embed Frameworks */,
+				AD2BF2252B5555D30029F03F /* libpaddle2onnx.1.0.7.dylib in Embed Frameworks */,
 				89752DAA2936ECE9003FF08E /* Masonry.framework in Embed Frameworks */,
+				AD2BF2242B5555D00029F03F /* libopencv_world.4.2.dylib in Embed Frameworks */,
+				AD2BF2232B5555CE0029F03F /* libonnxruntime.1.14.1.dylib in Embed Frameworks */,
 			);
 			name = "Embed Frameworks";
 			runOnlyForDeploymentPostprocessing = 0;
@@ -4801,12 +4829,12 @@
 				9FC444FB2AA61EDE00D7187C /* ZipArchive.framework in Embed Frameworks */,
 				89752DA82936ECE4003FF08E /* Masonry.framework in Embed Frameworks */,
 				BBD7FDFC2A13210700F96075 /* AFNetworking.framework in Embed Frameworks */,
-				BBD54ECE2A1C53B20012A230 /* ComDocumentAIKit.framework in Embed Frameworks */,
 				BB88401F2A132C6B0062446B /* ObjectiveDropboxOfficial.framework in Embed Frameworks */,
 				BBD54ECA2A1C53A80012A230 /* libopencv_world.4.2.dylib in Embed Frameworks */,
 				BBD7FE002A13210C00F96075 /* ComPDFKit.framework in Embed Frameworks */,
 				AD61B7B02A9DD07300D346C1 /* libpaddle2onnx.1.0.7.dylib in Embed Frameworks */,
 				AD61B7AF2A9DD06F00D346C1 /* libonnxruntime.1.14.1.dylib in Embed Frameworks */,
+				AD2BF23A2B5622260029F03F /* ComDocumentAIKit.framework in Embed Frameworks */,
 				AD61B7AE2A9DD06C00D346C1 /* libDocumentAI.3.2.2.dylib in Embed Frameworks */,
 			);
 			name = "Embed Frameworks";
@@ -5111,6 +5139,8 @@
 		9F5664862988B16F00020985 /* KMTextfieldVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMTextfieldVC.xib; sourceTree = "<group>"; };
 		9F69DBB02B512614003D4C45 /* KMAnnotationTextWidgetOptionsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMAnnotationTextWidgetOptionsViewController.swift; sourceTree = "<group>"; };
 		9F69DBB12B512614003D4C45 /* KMAnnotationTextWidgetOptionsViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMAnnotationTextWidgetOptionsViewController.xib; sourceTree = "<group>"; };
+		9F69DBB82B55014F003D4C45 /* KMAnnotationButtonWidgetAppearanceViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMAnnotationButtonWidgetAppearanceViewController.swift; sourceTree = "<group>"; };
+		9F69DBB92B55014F003D4C45 /* KMAnnotationButtonWidgetAppearanceViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMAnnotationButtonWidgetAppearanceViewController.xib; sourceTree = "<group>"; };
 		9F705F74291A3A84005199AD /* KMHistoryFileDeleteWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMHistoryFileDeleteWindowController.swift; sourceTree = "<group>"; };
 		9F705F75291A3A84005199AD /* KMHistoryFileDeleteWindowController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMHistoryFileDeleteWindowController.xib; sourceTree = "<group>"; };
 		9F705F88291E576D005199AD /* KMTableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMTableView.swift; sourceTree = "<group>"; };
@@ -5304,6 +5334,13 @@
 		AD1D483D2AFB81F4007AC1F0 /* KMMergeBlankView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMMergeBlankView.xib; sourceTree = "<group>"; };
 		AD1D484D2AFB8506007AC1F0 /* KMMergeTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMMergeTableViewCell.swift; sourceTree = "<group>"; };
 		AD1D48512AFB8510007AC1F0 /* KMMergeTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMMergeTableViewCell.xib; sourceTree = "<group>"; };
+		AD2BEC002B5548DF0029F03F /* PDF_Reaer_Pro_EditionApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PDF_Reaer_Pro_EditionApp.swift; sourceTree = "<group>"; };
+		AD2BEC022B5548DF0029F03F /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };
+		AD2BEC042B5548E00029F03F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
+		AD2BEC072B5548E00029F03F /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = "<group>"; };
+		AD2BEC092B5548E00029F03F /* PDF_Reaer_Pro_Edition.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = PDF_Reaer_Pro_Edition.entitlements; sourceTree = "<group>"; };
+		AD2BEC0D2B554DB10029F03F /* PDF_Reader_Pro Edition-Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "PDF_Reader_Pro Edition-Bridging-Header.h"; sourceTree = "<group>"; };
+		AD2BF22B2B560F1D0029F03F /* ComDocumentAIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = ComDocumentAIKit.framework; sourceTree = "<group>"; };
 		AD2D74AB29F0CEB300EDC5E4 /* KMCancellationWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMCancellationWindowController.swift; sourceTree = "<group>"; };
 		AD2D74AC29F0CEB300EDC5E4 /* KMCancellationWindowController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMCancellationWindowController.xib; sourceTree = "<group>"; };
 		AD2D74B429F0D39500EDC5E4 /* KMCancellationSuccessView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMCancellationSuccessView.swift; sourceTree = "<group>"; };
@@ -5482,8 +5519,8 @@
 		ADBC375C29CC61E100D93208 /* KMReadModelView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMReadModelView.swift; sourceTree = "<group>"; };
 		ADBC376029CC637900D93208 /* KMReadModelView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMReadModelView.xib; sourceTree = "<group>"; };
 		ADBC376529CD86A000D93208 /* KMReadModelView.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = KMReadModelView.xcassets; sourceTree = "<group>"; };
-		ADC076112987F068006C752F /* PDF-Master-Pro-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "PDF-Master-Pro-Info.plist"; sourceTree = SOURCE_ROOT; };
-		ADC076122987F06A006C752F /* PDF-Master-DMG-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "PDF-Master-DMG-Info.plist"; sourceTree = SOURCE_ROOT; };
+		ADC076112987F068006C752F /* PDF-Reader-Pro-Edition-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "PDF-Reader-Pro-Edition-Info.plist"; sourceTree = SOURCE_ROOT; };
+		ADC076122987F06A006C752F /* PDF-Reader-Pro-DMG-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "PDF-Reader-Pro-DMG-Info.plist"; sourceTree = SOURCE_ROOT; };
 		ADC31FA52A0E0C1A00ED44A2 /* KMEditPropertyAlignmentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMEditPropertyAlignmentView.swift; sourceTree = "<group>"; };
 		ADC31FAB2A0E0C3900ED44A2 /* KMEditPropertyAlignmentView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMEditPropertyAlignmentView.xib; sourceTree = "<group>"; };
 		ADC63E352A49813E00854E02 /* KMSubscribeSuccessWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMSubscribeSuccessWindowController.swift; sourceTree = "<group>"; };
@@ -5919,8 +5956,7 @@
 		BB2A98492B26A99A00647AF3 /* KMBatchAddWatermarkOperation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMBatchAddWatermarkOperation.swift; sourceTree = "<group>"; };
 		BB2A98512B270B3300647AF3 /* KMBatchAddBackgroundOperation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMBatchAddBackgroundOperation.swift; sourceTree = "<group>"; };
 		BB2C6A7C28F26CEF00478A33 /* PDF_Reader_Pro-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "PDF_Reader_Pro-Bridging-Header.h"; sourceTree = "<group>"; };
-		BB2C6A7D28F26CEF00478A33 /* PDF_Master Pro-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "PDF_Master Pro-Bridging-Header.h"; sourceTree = "<group>"; };
-		BB2C6A7E28F26CF000478A33 /* PDF_Master DMG-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "PDF_Master DMG-Bridging-Header.h"; sourceTree = "<group>"; };
+		BB2C6A7E28F26CF000478A33 /* PDF_Reader_Pro DMG-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "PDF_Reader_Pro DMG-Bridging-Header.h"; sourceTree = "<group>"; };
 		BB2C6AC728F4085200478A33 /* CPDFListView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CPDFListView.h; sourceTree = "<group>"; };
 		BB2C6AC828F4085200478A33 /* CPDFListView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CPDFListView.m; sourceTree = "<group>"; };
 		BB2E665E29C885550000FEBC /* KMSignatureHelpViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMSignatureHelpViewController.xib; sourceTree = "<group>"; };
@@ -6277,7 +6313,6 @@
 		BB99ACCD292E2AEF0048AFD9 /* KMMergeCollectionViewItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMMergeCollectionViewItem.swift; sourceTree = "<group>"; };
 		BB99ACCE292E2AEF0048AFD9 /* KMMergeCollectionViewItem.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMMergeCollectionViewItem.xib; sourceTree = "<group>"; };
 		BB9DCC7D2A09FC740024A6F1 /* libopencv_world.4.2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libopencv_world.4.2.dylib; sourceTree = "<group>"; };
-		BB9DCC982A0A10400024A6F1 /* ComDocumentAIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = ComDocumentAIKit.framework; sourceTree = "<group>"; };
 		BB9DCC9E2A0A2B0A0024A6F1 /* KMConvertSettingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMConvertSettingView.swift; sourceTree = "<group>"; };
 		BB9E2F722A495BCD000DC68D /* KMConvertSettingLimitTipView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMConvertSettingLimitTipView.swift; sourceTree = "<group>"; };
 		BB9EA14E2B1ECD0400EAFD9B /* KMBatchOperateImageToPDFViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMBatchOperateImageToPDFViewController.swift; sourceTree = "<group>"; };
@@ -6539,7 +6574,7 @@
 		BBFBE6F028DD7C20008B2335 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = "<group>"; };
 		BBFBE6F228DD7C21008B2335 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
 		BBFBE6F528DD7C21008B2335 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
-		BBFBE6F728DD7C21008B2335 /* PDF_ Master_Pro.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "PDF_ Master_Pro.entitlements"; sourceTree = "<group>"; };
+		BBFBE6F728DD7C21008B2335 /* PDF-Reader-Pro-Edition.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "PDF-Reader-Pro-Edition.entitlements"; sourceTree = "<group>"; };
 		BBFBE6FC28DD7C21008B2335 /* PDF Reader Pro ProTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "PDF Reader Pro ProTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
 		BBFBE70028DD7C21008B2335 /* PDF_ Master_ProTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PDF_ Master_ProTests.swift"; sourceTree = "<group>"; };
 		BBFBE70628DD7C21008B2335 /* PDF Reader Pro ProUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "PDF Reader Pro ProUITests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -6627,8 +6662,8 @@
 				BBF5D4A62A5FD2A500D09418 /* AppCenterCrashes.framework in Frameworks */,
 				BB9DCC892A09FC760024A6F1 /* libopencv_world.4.2.dylib in Frameworks */,
 				ADE3C1CC29A5A7EE00793B13 /* AFNetworking.framework in Frameworks */,
+				AD2BF2372B5622200029F03F /* ComDocumentAIKit.framework in Frameworks */,
 				BBB9B339299A5FD1004F3235 /* ObjectiveDropboxOfficial.framework in Frameworks */,
-				BB9DCC9C2A0A104E0024A6F1 /* ComDocumentAIKit.framework in Frameworks */,
 				BBF5D4A52A5FD2A000D09418 /* AppCenterAnalytics.framework in Frameworks */,
 				ADFCEB3F2B4FB8C90001EBAF /* FirebaseABTesting.framework in Frameworks */,
 				89D9896328FD23AE003A3E87 /* PDFKit.framework in Frameworks */,
@@ -6675,24 +6710,27 @@
 				BB9DCC8A2A09FC770024A6F1 /* libopencv_world.4.2.dylib in Frameworks */,
 				ADFCEB402B4FB8C90001EBAF /* FirebaseABTesting.framework in Frameworks */,
 				AD8DD2942A972486007CC9D0 /* libDocumentAI.3.2.2.dylib in Frameworks */,
+				AD2BF21A2B5553E70029F03F /* ComPDFKit_Conversion.framework in Frameworks */,
+				AD2BF22F2B5610110029F03F /* ComDocumentAIKit.framework in Frameworks */,
 				AD8DD29C2A972492007CC9D0 /* libpaddle2onnx.1.0.7.dylib in Frameworks */,
+				AD2BF2282B5556C80029F03F /* AppCenterCrashes.framework in Frameworks */,
 				ADFCEB3D2B4FB8C90001EBAF /* FirebaseRemoteConfig.framework in Frameworks */,
-				ADE3C1C929A5A75E00793B13 /* AFNetworking.framework in Frameworks */,
 				9F00CF612A386C7400AC462E /* FirebaseInstallations.framework in Frameworks */,
 				9F00CF7B2A386DC500AC462E /* FirebaseCoreDiagnostics.framework in Frameworks */,
-				BBB9B337299A5F35004F3235 /* ObjectiveDropboxOfficial.framework in Frameworks */,
-				BB9DCC9A2A0A10410024A6F1 /* ComDocumentAIKit.framework in Frameworks */,
+				AD2BF2262B5556B20029F03F /* AppCenterAnalytics.framework in Frameworks */,
+				AD2BF2272B5556C40029F03F /* AppCenter.framework in Frameworks */,
+				AD2BF21C2B5553E90029F03F /* ComPDFKit.framework in Frameworks */,
 				9F00CF6E2A386D8D00AC462E /* PromisesObjC.framework in Frameworks */,
+				AD2BF2202B5555CA0029F03F /* ObjectiveDropboxOfficial.framework in Frameworks */,
+				AD2BF21E2B5553EB0029F03F /* AFNetworking.framework in Frameworks */,
 				9F00CF782A386DC400AC462E /* GoogleAppMeasurement.framework in Frameworks */,
 				89D9896428FD23B8003A3E87 /* PDFKit.framework in Frameworks */,
-				ADA08A7E29F13EA0009B2A7B /* ComPDFKit.framework in Frameworks */,
 				89752DA92936ECE9003FF08E /* Masonry.framework in Frameworks */,
 				9F00CF4E2A38655500AC462E /* FirebaseCore.framework in Frameworks */,
 				9F00CF7E2A386DC500AC462E /* GoogleAppMeasurementIdentitySupport.framework in Frameworks */,
 				AD8DD2982A97248E007CC9D0 /* libonnxruntime.1.14.1.dylib in Frameworks */,
 				9F00CF592A3866E900AC462E /* GoogleUtilities.framework in Frameworks */,
 				9F00CF812A386DC500AC462E /* GoogleDataTransport.framework in Frameworks */,
-				ADA08A8229F13EE1009B2A7B /* ComPDFKit_Conversion.framework in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -6720,13 +6758,13 @@
 				9F00CF6F2A386D8D00AC462E /* PromisesObjC.framework in Frameworks */,
 				BB9DCC8B2A09FC770024A6F1 /* libopencv_world.4.2.dylib in Frameworks */,
 				9F00CF692A386D8D00AC462E /* nanopb.framework in Frameworks */,
+				AD2BF2392B5622260029F03F /* ComDocumentAIKit.framework in Frameworks */,
 				9F00CF522A38655500AC462E /* FirebaseAnalytics.framework in Frameworks */,
 				BBD7FDFB2A13210700F96075 /* AFNetworking.framework in Frameworks */,
 				9F00CF5A2A3866E900AC462E /* GoogleUtilities.framework in Frameworks */,
 				ADFCEB412B4FB8C90001EBAF /* FirebaseABTesting.framework in Frameworks */,
 				89D9896528FD23BF003A3E87 /* PDFKit.framework in Frameworks */,
 				89752DA72936ECE4003FF08E /* Masonry.framework in Frameworks */,
-				BBD54ECD2A1C53B20012A230 /* ComDocumentAIKit.framework in Frameworks */,
 				9F00CCC02A2F251800AC462E /* Sparkle.framework in Frameworks */,
 				9F00CCC62A2F2E2400AC462E /* AppCenterAnalytics.framework in Frameworks */,
 				9F00CF822A386DC500AC462E /* GoogleDataTransport.framework in Frameworks */,
@@ -7698,6 +7736,8 @@
 				9FB220F62B186C9800A5B208 /* KMAnnotationGeneralViewController.xib */,
 				9F69DBB02B512614003D4C45 /* KMAnnotationTextWidgetOptionsViewController.swift */,
 				9F69DBB12B512614003D4C45 /* KMAnnotationTextWidgetOptionsViewController.xib */,
+				9F69DBB82B55014F003D4C45 /* KMAnnotationButtonWidgetAppearanceViewController.swift */,
+				9F69DBB92B55014F003D4C45 /* KMAnnotationButtonWidgetAppearanceViewController.xib */,
 			);
 			path = FormProperties;
 			sourceTree = "<group>";
@@ -7958,6 +7998,26 @@
 			path = KMMergeBlankView;
 			sourceTree = "<group>";
 		};
+		AD2BEBFF2B5548DF0029F03F /* PDF Reaer Pro Edition */ = {
+			isa = PBXGroup;
+			children = (
+				AD2BEC002B5548DF0029F03F /* PDF_Reaer_Pro_EditionApp.swift */,
+				AD2BEC022B5548DF0029F03F /* ContentView.swift */,
+				AD2BEC042B5548E00029F03F /* Assets.xcassets */,
+				AD2BEC092B5548E00029F03F /* PDF_Reaer_Pro_Edition.entitlements */,
+				AD2BEC062B5548E00029F03F /* Preview Content */,
+			);
+			path = "PDF Reaer Pro Edition";
+			sourceTree = "<group>";
+		};
+		AD2BEC062B5548E00029F03F /* Preview Content */ = {
+			isa = PBXGroup;
+			children = (
+				AD2BEC072B5548E00029F03F /* Preview Assets.xcassets */,
+			);
+			path = "Preview Content";
+			sourceTree = "<group>";
+		};
 		AD2D74AA29F0CE8500EDC5E4 /* Cancellation */ = {
 			isa = PBXGroup;
 			children = (
@@ -11053,8 +11113,8 @@
 		BB88E43E2940342B002B3655 /* Library */ = {
 			isa = PBXGroup;
 			children = (
+				AD2BF22B2B560F1D0029F03F /* ComDocumentAIKit.framework */,
 				9FC444FC2AA7057B00D7187C /* DocumentAI.bundle */,
-				BB9DCC982A0A10400024A6F1 /* ComDocumentAIKit.framework */,
 				AD8DD2922A972486007CC9D0 /* libDocumentAI.3.2.2.dylib */,
 				AD8DD2962A97248E007CC9D0 /* libonnxruntime.1.14.1.dylib */,
 				AD8DD29A2A972492007CC9D0 /* libpaddle2onnx.1.0.7.dylib */,
@@ -11891,6 +11951,7 @@
 				BBFBE71C28DD7C43008B2335 /* PDF Master DMG */,
 				BBFBE72E28DD7C43008B2335 /* PDF Master DMGTests */,
 				BBFBE73828DD7C43008B2335 /* PDF Master DMGUITests */,
+				AD2BEBFF2B5548DF0029F03F /* PDF Reaer Pro Edition */,
 				BBFBE6BB28DD7B97008B2335 /* Products */,
 				89D9896128FD23AE003A3E87 /* Frameworks */,
 				9F5664842987EBE500020985 /* Recovered References */,
@@ -11927,8 +11988,8 @@
 				BBFBE6C328DD7B98008B2335 /* Main.storyboard */,
 				BBFBE6C628DD7B98008B2335 /* PDF_Reader_Pro.entitlements */,
 				BB2C6A7C28F26CEF00478A33 /* PDF_Reader_Pro-Bridging-Header.h */,
-				BB2C6A7D28F26CEF00478A33 /* PDF_Master Pro-Bridging-Header.h */,
-				BB2C6A7E28F26CF000478A33 /* PDF_Master DMG-Bridging-Header.h */,
+				BB2C6A7E28F26CF000478A33 /* PDF_Reader_Pro DMG-Bridging-Header.h */,
+				AD2BEC0D2B554DB10029F03F /* PDF_Reader_Pro Edition-Bridging-Header.h */,
 			);
 			path = "PDF Master";
 			sourceTree = "<group>";
@@ -11953,12 +12014,12 @@
 		BBFBE6ED28DD7C20008B2335 /* PDF Master Pro */ = {
 			isa = PBXGroup;
 			children = (
-				ADC076112987F068006C752F /* PDF-Master-Pro-Info.plist */,
+				ADC076112987F068006C752F /* PDF-Reader-Pro-Edition-Info.plist */,
 				BBFBE6EE28DD7C20008B2335 /* AppDelegate.swift */,
 				BBFBE6F028DD7C20008B2335 /* ViewController.swift */,
 				BBFBE6F228DD7C21008B2335 /* Assets.xcassets */,
 				BBFBE6F428DD7C21008B2335 /* Main.storyboard */,
-				BBFBE6F728DD7C21008B2335 /* PDF_ Master_Pro.entitlements */,
+				BBFBE6F728DD7C21008B2335 /* PDF-Reader-Pro-Edition.entitlements */,
 			);
 			path = "PDF Master Pro";
 			sourceTree = "<group>";
@@ -11983,7 +12044,7 @@
 		BBFBE71C28DD7C43008B2335 /* PDF Master DMG */ = {
 			isa = PBXGroup;
 			children = (
-				ADC076122987F06A006C752F /* PDF-Master-DMG-Info.plist */,
+				ADC076122987F06A006C752F /* PDF-Reader-Pro-DMG-Info.plist */,
 				BBFBE71D28DD7C43008B2335 /* AppDelegate.swift */,
 				BBFBE71F28DD7C43008B2335 /* ViewController.swift */,
 				BBFBE72128DD7C43008B2335 /* Assets.xcassets */,
@@ -12369,7 +12430,7 @@
 			attributes = {
 				BuildIndependentTargetsInParallel = 1;
 				CLASSPREFIX = km;
-				LastSwiftUpdateCheck = 1400;
+				LastSwiftUpdateCheck = 1520;
 				LastUpgradeCheck = 1400;
 				TargetAttributes = {
 					BBFBE6B928DD7B97008B2335 = {
@@ -12631,6 +12692,7 @@
 				ADE86A7B2B0221E100414DFA /* KMSecurityWindowController.xib in Resources */,
 				BBC8A7752B0640C200FA9377 /* KMBotaSearchViewController.xib in Resources */,
 				BBAFDA7D2B4CDE1D00278BC3 /* KMPDFCropWindowController.xib in Resources */,
+				9F69DBBD2B55014F003D4C45 /* KMAnnotationButtonWidgetAppearanceViewController.xib in Resources */,
 				BBA9223B2B4E97540061057A /* KMPurchaseLimitWindowController.xib in Resources */,
 				BB65A0742AF8DE4F003A27A0 /* SyncPreferences.xib in Resources */,
 				9F0201992A1F352100C9B673 /* KMAITranslationConfirmWindowController.xib in Resources */,
@@ -12952,6 +13014,7 @@
 				ADD1B6F92946C0CA00C3FFF7 /* KMPrintChoosePageSizeMultipageView.xib in Resources */,
 				BB1A916F2AFB7871005E5FD8 /* KMConvertWindowController.xib in Resources */,
 				AD88109B29A78AEC00178CA1 /* KMVerificationCodeView.xib in Resources */,
+				9F69DBBE2B55014F003D4C45 /* KMAnnotationButtonWidgetAppearanceViewController.xib in Resources */,
 				9F512CD32B469A7700EC0BC3 /* KMPageDisplayThemeCollectionViewItem.xib in Resources */,
 				AD8810A429A8459000178CA1 /* KMComparativeTableViewController.xib in Resources */,
 				AD0FA4F629A8582C00EDEB50 /* KMComparativeTableView.xib in Resources */,
@@ -12998,6 +13061,7 @@
 				ADAFDA862AEB804B00F084BC /* KMQucikToolCollectionViewItem.xib in Resources */,
 				ADE3C1AF29A4779E00793B13 /* KMPrintAccessoryController.xib in Resources */,
 				BBC745EE295F067B0072C2ED /* KMCropSettingWindowController.xib in Resources */,
+				AD2BF2312B56200D0029F03F /* SF-Pro-Text-Bold.otf in Resources */,
 				89752E082939DB42003FF08E /* KMToolbarViewController.xib in Resources */,
 				ADDF83632B391A5C00A81A4E /* DSignatureFromFileViewController.xib in Resources */,
 				ADDF83992B391A5D00A81A4E /* PDFCertExportAccessoryView.xib in Resources */,
@@ -13019,6 +13083,7 @@
 				BB1969D22B2833FF00922736 /* KMProgressWindowController.xib in Resources */,
 				AD867F9929D955D200F00440 /* KMBOTAOutlineCellView.xib in Resources */,
 				BB1BFF662AE9FBA8003EB179 /* KMBatchOperateWindowController.xib in Resources */,
+				AD2BF2292B5608700029F03F /* Assets.xcassets in Resources */,
 				BB65A0832AF8FEA1003A27A0 /* KMBatchOperateRemoveHeaderFooterViewController.xib in Resources */,
 				BB4F7E9A2B0C858D0077EC8C /* KMNoteTypeCollectionViewItem.xib in Resources */,
 				ADDF83842B391A5D00A81A4E /* DSignatureSaveTypeViewController.xib in Resources */,
@@ -13035,6 +13100,7 @@
 				ADE3C1E829A5ABC200793B13 /* KMLoginWindowController.xib in Resources */,
 				BB49ED02293F459500C82CA2 /* KMConvertPPTsWindowController.xib in Resources */,
 				AD3AAD312B0B700500DE5FE7 /* KMCompareCoveringView.xib in Resources */,
+				AD2BF2322B5620110029F03F /* SF-Pro-Text-Regular.otf in Resources */,
 				BB8F455B295AA1270037EA22 /* KMHeaderFooterPropertyInfoController.xib in Resources */,
 				BB7F7BFB29AA469F00A3E4E7 /* KMSigntureViewItem.xib in Resources */,
 				BBC70EAA2AEA6EF800AC1585 /* KMToolbarCustomWindowController.xib in Resources */,
@@ -13053,7 +13119,6 @@
 				BBAFC84E298519F700D0648E /* KMSavePanelAccessoryController.xib in Resources */,
 				ADBC2CF6299C7B3E006280C8 /* Print.xcassets in Resources */,
 				BB5DF1ED2959C5CB0025CDA1 /* KMHeaderFooterPreviewController.xib in Resources */,
-				ADEC7A82299397F8009A8256 /* SF-Pro-Text-Regular.otf in Resources */,
 				ADC63E442A49817400854E02 /* KMSubscribeSuccessView.xib in Resources */,
 				ADDF837B2B391A5D00A81A4E /* CDSignatureTextViewController.xib in Resources */,
 				AD1D480C2AFB18DA007AC1F0 /* KMCompressWIndowControllerNew.xib in Resources */,
@@ -13238,10 +13303,10 @@
 				BB1B0AEA2B4FC6E900889528 /* KMFunctionGuideMultiController.xib in Resources */,
 				ADBC374D29CAD65D00D93208 /* KMComparativeOutlineCell.xib in Resources */,
 				BBC2BCCA295DA8F30036B983 /* KMCropPreviewController.xib in Resources */,
+				AD2BF2332B5620150029F03F /* SF-Pro-Text-Semibold.otf in Resources */,
 				AD3AAD1F2B0B5B4400DE5FE7 /* KMCompareCoveringWindowController.xib in Resources */,
 				BB24D4AB2977BE6700041659 /* KMRedactConfirmWindowController.xib in Resources */,
 				BB1EC8022967B26700EC0BC3 /* KMPDFEditViewController.xib in Resources */,
-				ADBC374629CAD2D300D93208 /* SF-Pro-Text-Bold.otf in Resources */,
 				ADAFDA5F2AEB455500F084BC /* KMHomeContentView.xib in Resources */,
 				AD1D48532AFB8510007AC1F0 /* KMMergeTableViewCell.xib in Resources */,
 				ADBC2CFF299CA6C7006280C8 /* KMPrintDuplexPrintingSetView.xib in Resources */,
@@ -13312,7 +13377,6 @@
 				BB5F8A1D29BB15AD00365ADB /* KMEmailSubWindowController.xib in Resources */,
 				BBC348062955403D008D2CD1 /* KMWatermarkFilePropertyInfoController.xib in Resources */,
 				BB89725A294C559F0045787C /* KMWatermarkPropertyCreateController.xib in Resources */,
-				ADEC7A85299397F8009A8256 /* SF-Pro-Text-Semibold.otf in Resources */,
 				AD88108829A719E500178CA1 /* KMRegisterView.xib in Resources */,
 				ADE86AF32B0AF56C00414DFA /* KMCompareCoveringSettingView.xib in Resources */,
 				ADC63E3B2A49813E00854E02 /* KMSubscribeSuccessWindowController.xib in Resources */,
@@ -13592,6 +13656,7 @@
 				ADB2D6EB294740F30029D2B3 /* KMPrintPaperSetWindowController.xib in Resources */,
 				BB1969D32B2833FF00922736 /* KMProgressWindowController.xib in Resources */,
 				BBAFDA7F2B4CDE1D00278BC3 /* KMPDFCropWindowController.xib in Resources */,
+				9F69DBBF2B55014F003D4C45 /* KMAnnotationButtonWidgetAppearanceViewController.xib in Resources */,
 				BBA9223D2B4E97540061057A /* KMPurchaseLimitWindowController.xib in Resources */,
 				BB276A5E2B038D3A00AB5578 /* KMOCRPDFWindowController.xib in Resources */,
 				AD0FA50029A8DD8700EDEB50 /* KMRegisterSuccessView.xib in Resources */,
@@ -13608,7 +13673,7 @@
 				ADAFDA602AEB455500F084BC /* KMHomeContentView.xib in Resources */,
 				BBA8B7B5293635D80097D183 /* KMPasswordInputWindow.xib in Resources */,
 				89752DB22936F505003FF08E /* KMCustomButtonPopMenuViewController.xib in Resources */,
-				BB9DEE862A14A01D00351CC4 /* PDF-Master-DMG-Info.plist in Resources */,
+				BB9DEE862A14A01D00351CC4 /* PDF-Reader-Pro-DMG-Info.plist in Resources */,
 				BB8810A52B4F7D1000AFA63E /* KMVerificationActivateViewController.xib in Resources */,
 				BB8F455C295AA1270037EA22 /* KMHeaderFooterPropertyInfoController.xib in Resources */,
 				BB6347BA2AF224E200F5438E /* KMConvertCollectionViewHeader.xib in Resources */,
@@ -14880,6 +14945,7 @@
 				BB146FF9299DC0D100784A6A /* OIDExternalUserAgentMac.m in Sources */,
 				BB9DCC9F2A0A2B0A0024A6F1 /* KMConvertSettingView.swift in Sources */,
 				ADDEEA9A2AD7BB2D00EF675D /* KMAnnotationPropertiesColorManager.swift in Sources */,
+				9F69DBBA2B55014F003D4C45 /* KMAnnotationButtonWidgetAppearanceViewController.swift in Sources */,
 				BBE9D0972AF0CECB002E83CE /* KMBatchOperateCompressViewController.swift in Sources */,
 				BB74DA772AC41182006EDFE7 /* NSFont+KMExtension.swift in Sources */,
 				BB6DD8252934D056001F0544 /* KMSecureEncryptSuccessTipView.swift in Sources */,
@@ -15044,6 +15110,7 @@
 				BBD426802B4FCF1500AC8660 /* KMTextFieldCell.swift in Sources */,
 				BBA00AC52B157C880043D903 /* KMToolbarZoomItemView.swift in Sources */,
 				BB1B0AC62B4FC6E900889528 /* KMGuideInfoWindow.swift in Sources */,
+				9F69DBBB2B55014F003D4C45 /* KMAnnotationButtonWidgetAppearanceViewController.swift in Sources */,
 				BBC3484B2958222C008D2CD1 /* KMBackgroundOutsideView.swift in Sources */,
 				AD1D48222AFB6BBA007AC1F0 /* KMMergeView.swift in Sources */,
 				BB90E4F32AF37F9F00B04B9F /* KMCustomViewButton.swift in Sources */,
@@ -16720,6 +16787,7 @@
 				BB147028299DC0D100784A6A /* OIDTokenRequest.m in Sources */,
 				BB1B0AD02B4FC6E900889528 /* KMFunctionGuideMultiController.swift in Sources */,
 				9F1FE49829406E4700E952CA /* common.c in Sources */,
+				9F69DBBC2B55014F003D4C45 /* KMAnnotationButtonWidgetAppearanceViewController.swift in Sources */,
 				ADBC375629CAE94700D93208 /* KMComparativeOutlineSectionCell.swift in Sources */,
 				9F0CB5442986953A00007028 /* KMURLToPDFWindowController.swift in Sources */,
 				ADAFDA322AE8E45000F084BC /* KMAdvertisementConfig.swift in Sources */,
@@ -17387,6 +17455,8 @@
 					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library",
 					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics/FirebaseRemoteConfig",
 					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics/FirebaseRemoteConfig",
+					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
+					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
 				);
 				GCC_C_LANGUAGE_STANDARD = gnu99;
 				GCC_PREPROCESSOR_DEFINITIONS = (
@@ -17482,6 +17552,8 @@
 					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library",
 					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics/FirebaseRemoteConfig",
 					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics/FirebaseRemoteConfig",
+					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
+					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
 				);
 				GCC_C_LANGUAGE_STANDARD = gnu99;
 				GCC_PREPROCESSOR_DEFINITIONS = "VERSION_FREE=1";
@@ -17601,68 +17673,26 @@
 			buildSettings = {
 				ASSETCATALOG_COMPILER_APPICON_NAME = "PDF Reader Pro Edition";
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+				ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES;
 				CLANG_ENABLE_MODULES = YES;
-				CODE_SIGN_ENTITLEMENTS = "PDF Master Pro/PDF_Master_Pro.entitlements";
-				CODE_SIGN_STYLE = Manual;
+				CODE_SIGN_ENTITLEMENTS = "PDF Master Pro/PDF-Reader-Pro-Edition.entitlements";
+				CODE_SIGN_IDENTITY = "Apple Development";
+				"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
+				CODE_SIGN_STYLE = Automatic;
 				COMBINE_HIDPI_IMAGES = YES;
 				CURRENT_PROJECT_VERSION = 1;
 				DEFINES_MODULE = YES;
-				DEVELOPMENT_TEAM = "";
+				DEVELOPMENT_TEAM = 4GGQPGRTSV;
 				ENABLE_HARDENED_RUNTIME = YES;
 				FRAMEWORK_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFWindowController/PDFSDK",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFWindowController/PDFSDK",
-					"$(PROJECT_DIR)/PDF\\ Office/Third\\ Pard\\ Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Third\\ Pard\\ Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/Convert/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/Convert/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/Convert/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/Convert/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/Home/NSObject/Services",
-					"$(PROJECT_DIR)/PDF\\ Office/Third\\ Pard\\ Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/Home/NSObject/Services",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/Home/NSObject/Services",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/Home/NSObject/Services",
-					"$(PROJECT_DIR)/PDF\\ Office/Third\\ Pard\\ Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Third\\ Pard\\ Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/Home/NSObject/Services",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/Home/NSObject/Services",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/Home/NSObject/Services",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/Home/NSObject/Services",
-					"$(PROJECT_DIR)/PDF\\ Office/Third\\ Pard\\ Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/Home/NSObject/Services",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/Home/NSObject/Services",
-					"$(PROJECT_DIR)/PDF\\ Office/Third\\ Pard\\ Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/Home/NSObject/Services",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/Home/NSObject/Services",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Third\\ Pard\\ Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Third\\ Pard\\ Library",
+					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics",
+					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics/FirebaseRemoteConfig",
 					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFWindowController/PDFSDK",
+					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library",
+					"\"$(SRCROOT)/PDF Master/Class/PDFTools/Convert/Library/ComDocumentAIKit.framework\"",
 					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
 					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
-					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library",
-					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library",
-					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library",
-					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics",
-					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics",
-					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics",
-					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics",
-					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics",
-					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics",
-					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics",
-					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics",
-					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics",
-					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics",
-					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library",
-					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics/FirebaseRemoteConfig",
-					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics/FirebaseRemoteConfig",
 				);
 				GCC_PREPROCESSOR_DEFINITIONS = (
 					"DEBUG=1",
@@ -17670,7 +17700,8 @@
 					"VERSION_PRO=1",
 				);
 				GENERATE_INFOPLIST_FILE = YES;
-				INFOPLIST_FILE = "PDF-Office-Pro-Info.plist";
+				INFOPLIST_FILE = "PDF-Reader-Pro-Edition-Info.plist";
+				INFOPLIST_KEY_NSContactsUsageDescription = "Your consent is required before you could access the function.";
 				INFOPLIST_KEY_NSHumanReadableCopyright = "";
 				INFOPLIST_KEY_NSMainStoryboardFile = Main;
 				INFOPLIST_KEY_NSPrincipalClass = NSApplication;
@@ -17680,46 +17711,18 @@
 				);
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
-					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
-					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
-					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
-					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
-					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
-					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
-					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
+					"\"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/OCR/Library\"",
 					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
 				);
 				MACOSX_DEPLOYMENT_TARGET = 11.0;
 				MARKETING_VERSION = 1.1.0;
-				PRODUCT_BUNDLE_IDENTIFIER = "com.kdanmobile.PDF-Office-Pro";
+				OTHER_SWIFT_FLAGS = "-DVERSION_PRO";
+				PRODUCT_BUNDLE_IDENTIFIER = com.brother.pdfreaderpro.mac;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				PROVISIONING_PROFILE_SPECIFIER = "";
 				SWIFT_EMIT_LOC_STRINGS = YES;
-				SWIFT_OBJC_BRIDGING_HEADER = "PDF Master/PDF Master Pro-Bridging-Header.h";
-				SWIFT_OBJC_INTERFACE_HEADER_NAME = "PDF_Master-Swift.h";
+				SWIFT_OBJC_BRIDGING_HEADER = "PDF Master/PDF_Reader_Pro Edition-Bridging-Header.h";
+				SWIFT_OBJC_INTERFACE_HEADER_NAME = "PDF_Reader_Pro-Swift.h";
 				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
 				SWIFT_VERSION = 5.0;
 			};
@@ -17730,72 +17733,31 @@
 			buildSettings = {
 				ASSETCATALOG_COMPILER_APPICON_NAME = "PDF Reader Pro Edition";
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+				ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES;
 				CLANG_ENABLE_MODULES = YES;
-				CODE_SIGN_ENTITLEMENTS = "PDF Master Pro/PDF_Master_Pro.entitlements";
-				CODE_SIGN_STYLE = Manual;
+				CODE_SIGN_ENTITLEMENTS = "PDF Master Pro/PDF-Reader-Pro-Edition.entitlements";
+				CODE_SIGN_IDENTITY = "Apple Development";
+				"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
+				CODE_SIGN_STYLE = Automatic;
 				COMBINE_HIDPI_IMAGES = YES;
 				CURRENT_PROJECT_VERSION = 1;
 				DEFINES_MODULE = YES;
-				DEVELOPMENT_TEAM = "";
+				DEVELOPMENT_TEAM = 4GGQPGRTSV;
 				ENABLE_HARDENED_RUNTIME = YES;
 				FRAMEWORK_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFWindowController/PDFSDK",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFWindowController/PDFSDK",
-					"$(PROJECT_DIR)/PDF\\ Office/Third\\ Pard\\ Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Third\\ Pard\\ Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/Convert/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/Convert/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/Convert/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/Convert/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/Home/NSObject/Services",
-					"$(PROJECT_DIR)/PDF\\ Office/Third\\ Pard\\ Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/Home/NSObject/Services",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/Home/NSObject/Services",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/Home/NSObject/Services",
-					"$(PROJECT_DIR)/PDF\\ Office/Third\\ Pard\\ Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Third\\ Pard\\ Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/Home/NSObject/Services",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/Home/NSObject/Services",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/Home/NSObject/Services",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/Home/NSObject/Services",
-					"$(PROJECT_DIR)/PDF\\ Office/Third\\ Pard\\ Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/Home/NSObject/Services",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/Home/NSObject/Services",
-					"$(PROJECT_DIR)/PDF\\ Office/Third\\ Pard\\ Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/Home/NSObject/Services",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/Home/NSObject/Services",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Third\\ Pard\\ Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Third\\ Pard\\ Library",
+					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics",
+					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics/FirebaseRemoteConfig",
 					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFWindowController/PDFSDK",
+					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library",
+					"\"$(SRCROOT)/PDF Master/Class/PDFTools/Convert/Library/ComDocumentAIKit.framework\"",
 					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
 					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
-					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library",
-					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library",
-					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library",
-					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics",
-					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics",
-					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics",
-					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics",
-					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics",
-					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics",
-					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics",
-					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics",
-					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics",
-					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics",
-					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library",
-					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics/FirebaseRemoteConfig",
-					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics/FirebaseRemoteConfig",
 				);
 				GCC_PREPROCESSOR_DEFINITIONS = "VERSION_PRO=1";
 				GENERATE_INFOPLIST_FILE = YES;
-				INFOPLIST_FILE = "PDF-Office-Pro-Info.plist";
+				INFOPLIST_FILE = "PDF-Reader-Pro-Edition-Info.plist";
+				INFOPLIST_KEY_NSContactsUsageDescription = "Your consent is required before you could access the function.";
 				INFOPLIST_KEY_NSHumanReadableCopyright = "";
 				INFOPLIST_KEY_NSMainStoryboardFile = Main;
 				INFOPLIST_KEY_NSPrincipalClass = NSApplication;
@@ -17805,46 +17767,18 @@
 				);
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Office/Class/PDFTools/OCR/Library",
-					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
-					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
-					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
-					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
-					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
-					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
-					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
-					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
+					"\"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/OCR/Library\"",
 					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
 				);
 				MACOSX_DEPLOYMENT_TARGET = 11.0;
 				MARKETING_VERSION = 1.1.0;
-				PRODUCT_BUNDLE_IDENTIFIER = "com.kdanmobile.PDF-Office-Pro";
+				OTHER_SWIFT_FLAGS = "-DVERSION_PRO";
+				PRODUCT_BUNDLE_IDENTIFIER = com.brother.pdfreaderpro.mac;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				PROVISIONING_PROFILE_SPECIFIER = "";
 				SWIFT_EMIT_LOC_STRINGS = YES;
-				SWIFT_OBJC_BRIDGING_HEADER = "PDF Master/PDF Master Pro-Bridging-Header.h";
-				SWIFT_OBJC_INTERFACE_HEADER_NAME = "PDF_Master-Swift.h";
+				SWIFT_OBJC_BRIDGING_HEADER = "PDF Master/PDF_Reader_Pro Edition-Bridging-Header.h";
+				SWIFT_OBJC_INTERFACE_HEADER_NAME = "PDF_Reader_Pro-Swift.h";
 				SWIFT_VERSION = 5.0;
 			};
 			name = Release;
@@ -18038,6 +17972,8 @@
 					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library",
 					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics/FirebaseRemoteConfig",
 					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics/FirebaseRemoteConfig",
+					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
+					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
 				);
 				GCC_PREPROCESSOR_DEFINITIONS = (
 					"DEBUG=1",
@@ -18045,7 +17981,7 @@
 					"VERSION_DMG=1",
 				);
 				GENERATE_INFOPLIST_FILE = YES;
-				INFOPLIST_FILE = "PDF-Master-DMG-Info.plist";
+				INFOPLIST_FILE = "PDF-Reader-Pro-DMG-Info.plist";
 				INFOPLIST_KEY_CFBundleDisplayName = "PDF Reader Pro";
 				INFOPLIST_KEY_NSHumanReadableCopyright = "";
 				INFOPLIST_KEY_NSMainStoryboardFile = Main;
@@ -18105,7 +18041,7 @@
 				PRODUCT_NAME = "PDF Reader Pro";
 				PROVISIONING_PROFILE_SPECIFIER = "";
 				SWIFT_EMIT_LOC_STRINGS = YES;
-				SWIFT_OBJC_BRIDGING_HEADER = "PDF Master/PDF_Master DMG-Bridging-Header.h";
+				SWIFT_OBJC_BRIDGING_HEADER = "PDF Master/PDF_Reader_Pro DMG-Bridging-Header.h";
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "PDF_Reader_Pro-Swift.h";
 				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
 				SWIFT_VERSION = 5.0;
@@ -18216,10 +18152,12 @@
 					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library",
 					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics/FirebaseRemoteConfig",
 					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics/FirebaseRemoteConfig",
+					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
+					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
 				);
 				GCC_PREPROCESSOR_DEFINITIONS = "VERSION_DMG=1";
 				GENERATE_INFOPLIST_FILE = YES;
-				INFOPLIST_FILE = "PDF-Master-DMG-Info.plist";
+				INFOPLIST_FILE = "PDF-Reader-Pro-DMG-Info.plist";
 				INFOPLIST_KEY_CFBundleDisplayName = "PDF Reader Pro";
 				INFOPLIST_KEY_NSHumanReadableCopyright = "";
 				INFOPLIST_KEY_NSMainStoryboardFile = Main;
@@ -18279,7 +18217,7 @@
 				PRODUCT_NAME = "PDF Reader Pro";
 				PROVISIONING_PROFILE_SPECIFIER = "";
 				SWIFT_EMIT_LOC_STRINGS = YES;
-				SWIFT_OBJC_BRIDGING_HEADER = "PDF Master/PDF_Master DMG-Bridging-Header.h";
+				SWIFT_OBJC_BRIDGING_HEADER = "PDF Master/PDF_Reader_Pro DMG-Bridging-Header.h";
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "PDF_Reader_Pro-Swift.h";
 				SWIFT_VERSION = 5.0;
 			};

+ 101 - 0
PDF Office/PDF Reader Pro.xcodeproj/xcshareddata/xcschemes/PDF Reader Pro DMG.xcscheme

@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1520"
+   version = "1.7">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "BBFBE71A28DD7C43008B2335"
+               BuildableName = "PDF Reader Pro.app"
+               BlueprintName = "PDF Reader Pro DMG"
+               ReferencedContainer = "container:PDF Reader Pro.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      shouldAutocreateTestPlan = "YES">
+      <Testables>
+         <TestableReference
+            skipped = "NO"
+            parallelizable = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "BBFBE72A28DD7C43008B2335"
+               BuildableName = "PDF Reader Pro DMGTests.xctest"
+               BlueprintName = "PDF Reader Pro DMGTests"
+               ReferencedContainer = "container:PDF Reader Pro.xcodeproj">
+            </BuildableReference>
+         </TestableReference>
+         <TestableReference
+            skipped = "NO"
+            parallelizable = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "BBFBE73428DD7C43008B2335"
+               BuildableName = "PDF Reader Pro DMGUITests.xctest"
+               BlueprintName = "PDF Reader Pro DMGUITests"
+               ReferencedContainer = "container:PDF Reader Pro.xcodeproj">
+            </BuildableReference>
+         </TestableReference>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "BBFBE71A28DD7C43008B2335"
+            BuildableName = "PDF Reader Pro.app"
+            BlueprintName = "PDF Reader Pro DMG"
+            ReferencedContainer = "container:PDF Reader Pro.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "BBFBE71A28DD7C43008B2335"
+            BuildableName = "PDF Reader Pro.app"
+            BlueprintName = "PDF Reader Pro DMG"
+            ReferencedContainer = "container:PDF Reader Pro.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 101 - 0
PDF Office/PDF Reader Pro.xcodeproj/xcshareddata/xcschemes/PDF Reader Pro Edition.xcscheme

@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1520"
+   version = "1.7">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "BBFBE6EB28DD7C20008B2335"
+               BuildableName = "PDF Reader Pro Edition.app"
+               BlueprintName = "PDF Reader Pro Edition"
+               ReferencedContainer = "container:PDF Reader Pro.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      shouldAutocreateTestPlan = "YES">
+      <Testables>
+         <TestableReference
+            skipped = "NO"
+            parallelizable = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "BBFBE6FB28DD7C21008B2335"
+               BuildableName = "PDF Reader Pro ProTests.xctest"
+               BlueprintName = "PDF Reader Pro ProTests"
+               ReferencedContainer = "container:PDF Reader Pro.xcodeproj">
+            </BuildableReference>
+         </TestableReference>
+         <TestableReference
+            skipped = "NO"
+            parallelizable = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "BBFBE70528DD7C21008B2335"
+               BuildableName = "PDF Reader Pro ProUITests.xctest"
+               BlueprintName = "PDF Reader Pro ProUITests"
+               ReferencedContainer = "container:PDF Reader Pro.xcodeproj">
+            </BuildableReference>
+         </TestableReference>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "BBFBE6EB28DD7C20008B2335"
+            BuildableName = "PDF Reader Pro Edition.app"
+            BlueprintName = "PDF Reader Pro Edition"
+            ReferencedContainer = "container:PDF Reader Pro.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "BBFBE6EB28DD7C20008B2335"
+            BuildableName = "PDF Reader Pro Edition.app"
+            BlueprintName = "PDF Reader Pro Edition"
+            ReferencedContainer = "container:PDF Reader Pro.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 101 - 0
PDF Office/PDF Reader Pro.xcodeproj/xcshareddata/xcschemes/PDF Reader Pro.xcscheme

@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1520"
+   version = "1.7">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "BBFBE6B928DD7B97008B2335"
+               BuildableName = "PDF Reader Pro.app"
+               BlueprintName = "PDF Reader Pro"
+               ReferencedContainer = "container:PDF Reader Pro.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      shouldAutocreateTestPlan = "YES">
+      <Testables>
+         <TestableReference
+            skipped = "NO"
+            parallelizable = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "BBFBE6CA28DD7B98008B2335"
+               BuildableName = "PDF Reader ProTests.xctest"
+               BlueprintName = "PDF Reader ProTests"
+               ReferencedContainer = "container:PDF Reader Pro.xcodeproj">
+            </BuildableReference>
+         </TestableReference>
+         <TestableReference
+            skipped = "NO"
+            parallelizable = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "BBFBE6D428DD7B98008B2335"
+               BuildableName = "PDF Reader ProUITests.xctest"
+               BlueprintName = "PDF Reader ProUITests"
+               ReferencedContainer = "container:PDF Reader Pro.xcodeproj">
+            </BuildableReference>
+         </TestableReference>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "BBFBE6B928DD7B97008B2335"
+            BuildableName = "PDF Reader Pro.app"
+            BlueprintName = "PDF Reader Pro"
+            ReferencedContainer = "container:PDF Reader Pro.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "BBFBE6B928DD7B97008B2335"
+            BuildableName = "PDF Reader Pro.app"
+            BlueprintName = "PDF Reader Pro"
+            ReferencedContainer = "container:PDF Reader Pro.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

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

@@ -7,32 +7,32 @@
       <BreakpointProxy
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
-            uuid = "24F01C9D-E8E8-4B64-B562-4AC1BE49A9EB"
+            uuid = "B76B13E1-8734-4B17-9930-B97EF4578D2C"
             shouldBeEnabled = "Yes"
             ignoreCount = "0"
             continueAfterRunningActions = "No"
-            filePath = "PDF Master/Class/Purchase/DMG/KMPurchaseCompareDMGWindowController.m"
+            filePath = "PDF Master/Class/Purchase/DMG/Verification/VerificationManager/VerificationManager.m"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "511"
-            endingLineNumber = "511"
-            landmarkName = "-buttonItemClicked_License:"
+            startingLineNumber = "392"
+            endingLineNumber = "392"
+            landmarkName = "-verificationWithComplention:"
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
       <BreakpointProxy
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
-            uuid = "AB88C63F-2ECE-4146-8844-8679B230E310"
+            uuid = "5423EA5F-EE41-4612-B7F2-9CB978699CA3"
             shouldBeEnabled = "Yes"
             ignoreCount = "0"
             continueAfterRunningActions = "No"
-            filePath = "PDF Master/Class/Purchase/DMG/KMPurchaseCompareDMGWindowController.m"
+            filePath = "PDF Master/Class/Purchase/DMG/Verification/VerificationManager/VerificationManager.m"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "300"
-            endingLineNumber = "300"
-            landmarkName = "-windowDidLoad"
+            startingLineNumber = "369"
+            endingLineNumber = "369"
+            landmarkName = "-verificationWithComplention:"
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>

+ 0 - 5
PDF Office/PDF Reader Pro.xcodeproj/xcuserdata/kdanmobile.xcuserdatad/xcschemes/xcschememanagement.plist

@@ -14,11 +14,6 @@
 			<key>orderHint</key>
 			<integer>0</integer>
 		</dict>
-		<key>PDF Reader Pro Pro.xcscheme_^#shared#^_</key>
-		<dict>
-			<key>orderHint</key>
-			<integer>2</integer>
-		</dict>
 		<key>PDF Reader Pro.xcscheme_^#shared#^_</key>
 		<dict>
 			<key>orderHint</key>

Різницю між файлами не показано, бо вона завелика
+ 1597 - 202
PDF Office/PDF Reader Pro.xcodeproj/xcuserdata/lizhe.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist


+ 11 - 0
PDF Office/PDF Reaer Pro Edition/Assets.xcassets/AccentColor.colorset/Contents.json

@@ -0,0 +1,11 @@
+{
+  "colors" : [
+    {
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 58 - 0
PDF Office/PDF Reaer Pro Edition/Assets.xcassets/AppIcon.appiconset/Contents.json

@@ -0,0 +1,58 @@
+{
+  "images" : [
+    {
+      "idiom" : "mac",
+      "scale" : "1x",
+      "size" : "16x16"
+    },
+    {
+      "idiom" : "mac",
+      "scale" : "2x",
+      "size" : "16x16"
+    },
+    {
+      "idiom" : "mac",
+      "scale" : "1x",
+      "size" : "32x32"
+    },
+    {
+      "idiom" : "mac",
+      "scale" : "2x",
+      "size" : "32x32"
+    },
+    {
+      "idiom" : "mac",
+      "scale" : "1x",
+      "size" : "128x128"
+    },
+    {
+      "idiom" : "mac",
+      "scale" : "2x",
+      "size" : "128x128"
+    },
+    {
+      "idiom" : "mac",
+      "scale" : "1x",
+      "size" : "256x256"
+    },
+    {
+      "idiom" : "mac",
+      "scale" : "2x",
+      "size" : "256x256"
+    },
+    {
+      "idiom" : "mac",
+      "scale" : "1x",
+      "size" : "512x512"
+    },
+    {
+      "idiom" : "mac",
+      "scale" : "2x",
+      "size" : "512x512"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 6 - 0
PDF Office/PDF Reaer Pro Edition/Assets.xcassets/Contents.json

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

+ 24 - 0
PDF Office/PDF Reaer Pro Edition/ContentView.swift

@@ -0,0 +1,24 @@
+//
+//  ContentView.swift
+//  PDF Reaer Pro Edition
+//
+//  Created by lizhe on 2024/1/15.
+//
+
+import SwiftUI
+
+struct ContentView: View {
+    var body: some View {
+        VStack {
+            Image(systemName: "globe")
+                .imageScale(.large)
+                .foregroundStyle(.tint)
+            Text("Hello, world!")
+        }
+        .padding()
+    }
+}
+
+#Preview {
+    ContentView()
+}

+ 4 - 4
PDF Office/PDF Master Pro/PDF_ Master_Pro.entitlements

@@ -2,9 +2,9 @@
 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 <plist version="1.0">
 <dict>
-    <key>com.apple.security.app-sandbox</key>
-    <true/>
-    <key>com.apple.security.files.user-selected.read-only</key>
-    <true/>
+	<key>com.apple.security.app-sandbox</key>
+	<true/>
+	<key>com.apple.security.files.user-selected.read-only</key>
+	<true/>
 </dict>
 </plist>

+ 17 - 0
PDF Office/PDF Reaer Pro Edition/PDF_Reaer_Pro_EditionApp.swift

@@ -0,0 +1,17 @@
+//
+//  PDF_Reaer_Pro_EditionApp.swift
+//  PDF Reaer Pro Edition
+//
+//  Created by lizhe on 2024/1/15.
+//
+
+import SwiftUI
+
+@main
+struct PDF_Reaer_Pro_EditionApp: App {
+    var body: some Scene {
+        WindowGroup {
+            ContentView()
+        }
+    }
+}

+ 6 - 0
PDF Office/PDF Reaer Pro Edition/Preview Content/Preview Assets.xcassets/Contents.json

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

+ 0 - 33
PDF Office/PDF-Master-Pro-Info.plist

@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>Fabric</key>
-	<dict>
-		<key>APIKey</key>
-		<string>AIzaSyDex9auPUJBSvPMMu4UhIAtpwwzKutdmiQ</string>
-		<key>Kits</key>
-		<array>
-			<dict>
-				<key>KitInfo</key>
-				<dict/>
-				<key>KitName</key>
-				<string>Crashlytics</string>
-			</dict>
-		</array>
-	</dict>
-	<key>FirebaseAppDelegateProxyEnabled</key>
-	<false/>
-	<key>NSAppTransportSecurity</key>
-	<dict>
-		<key>NSAllowsArbitraryLoads</key>
-		<true/>
-	</dict>
-	<key>UIAppFonts</key>
-	<array>
-		<string>SF-Pro-Text-Regular.otf</string>
-		<string>SF-Pro-Text-Semibold.otf</string>
-		<string>SF-Pro-Text-Bold.otf</string>
-	</array>
-</dict>
-</plist>

+ 5 - 0
PDF Office/PDF-Office-Pro-Info.plist

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict/>
+</plist>

PDF Office/PDF-Master-DMG-Info.plist → PDF Office/PDF-Reader-Pro-DMG-Info.plist


+ 324 - 0
PDF Office/PDF-Reader-Pro-Edition-Info.plist

@@ -0,0 +1,324 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleDocumentTypes</key>
+	<array>
+		<dict>
+			<key>CFBundleTypeExtensions</key>
+			<array>
+				<string>pdf</string>
+				<string>PDF</string>
+			</array>
+			<key>CFBundleTypeMIMETypes</key>
+			<array>
+				<string>application/pdf</string>
+			</array>
+			<key>CFBundleTypeName</key>
+			<string>Adobe PDF document</string>
+			<key>CFBundleTypeOSTypes</key>
+			<array>
+				<string>PDF</string>
+			</array>
+			<key>CFBundleTypeRole</key>
+			<string>Editor</string>
+			<key>LSHandlerRank</key>
+			<string>Owner</string>
+			<key>LSIsAppleDefaultForType</key>
+			<string>Yes</string>
+			<key>LSItemContentTypes</key>
+			<array>
+				<string>com.adobe.pdf</string>
+			</array>
+			<key>NSDocumentClass</key>
+			<string>$(PRODUCT_MODULE_NAME).KMMainDocument</string>
+		</dict>
+		<dict>
+			<key>CFBundleTypeExtensions</key>
+			<array>
+				<string>ai</string>
+				<string>AI</string>
+			</array>
+			<key>CFBundleTypeName</key>
+			<string>DocumentType</string>
+			<key>CFBundleTypeRole</key>
+			<string>Viewer</string>
+			<key>LSHandlerRank</key>
+			<string>Alternate</string>
+			<key>LSItemContentTypes</key>
+			<array>
+				<string>com.adobe.illustrator.ai-image</string>
+			</array>
+			<key>NSDocumentClass</key>
+			<string>$(PRODUCT_MODULE_NAME).KMMainDocument</string>
+		</dict>
+		<dict>
+			<key>CFBundleTypeName</key>
+			<string>Images</string>
+			<key>CFBundleTypeRole</key>
+			<string>Viewer</string>
+			<key>LSHandlerRank</key>
+			<string>Alternate</string>
+			<key>LSItemContentTypes</key>
+			<array>
+				<string>com.adobe.postscript</string>
+			</array>
+			<key>NSDocumentClass</key>
+			<string>$(PRODUCT_MODULE_NAME).KMMainDocument</string>
+			<key>NSExportableTypes</key>
+			<array>
+				<string>com.adobe.pdf</string>
+				<string>net.sourceforge.skim-app.pdfd</string>
+				<string>com.adobe.postscript</string>
+				<string>com.adobe.encapsulated-postscript</string>
+				<string>org.tug.tex.dvi</string>
+				<string>org.tug.tex.xdv</string>
+				<string>net.sourceforge.skim-app.skimnotes</string>
+				<string>public.plain-text</string>
+				<string>public.rtf</string>
+				<string>com.apple.rtfd</string>
+				<string>com.adobe.fdf</string>
+			</array>
+		</dict>
+		<dict>
+			<key>CFBundleTypeName</key>
+			<string>Encapsulated PostScript</string>
+			<key>CFBundleTypeRole</key>
+			<string>Editor</string>
+			<key>LSHandlerRank</key>
+			<string>Alternate</string>
+			<key>LSItemContentTypes</key>
+			<array>
+				<string>com.adobe.encapsulated-postscript</string>
+			</array>
+			<key>NSDocumentClass</key>
+			<string>$(PRODUCT_MODULE_NAME).KMMainDocument</string>
+			<key>NSExportableTypes</key>
+			<array>
+				<string>com.adobe.pdf</string>
+				<string>net.sourceforge.skim-app.pdfd</string>
+				<string>com.adobe.postscript</string>
+				<string>com.adobe.encapsulated-postscript</string>
+				<string>org.tug.tex.dvi</string>
+				<string>org.tug.tex.xdv</string>
+				<string>net.sourceforge.skim-app.skimnotes</string>
+				<string>public.plain-text</string>
+				<string>public.rtf</string>
+				<string>com.apple.rtfd</string>
+				<string>com.adobe.fdf</string>
+			</array>
+		</dict>
+		<dict>
+			<key>CFBundleTypeName</key>
+			<string>DVI</string>
+			<key>CFBundleTypeRole</key>
+			<string>Editor</string>
+			<key>LSHandlerRank</key>
+			<string>Alternate</string>
+			<key>LSItemContentTypes</key>
+			<array>
+				<string>org.tug.tex.dvi</string>
+			</array>
+			<key>NSDocumentClass</key>
+			<string>$(PRODUCT_MODULE_NAME).KMMainDocument</string>
+			<key>NSExportableTypes</key>
+			<array>
+				<string>com.adobe.pdf</string>
+				<string>net.sourceforge.skim-app.pdfd</string>
+				<string>com.adobe.postscript</string>
+				<string>com.adobe.encapsulated-postscript</string>
+				<string>org.tug.tex.dvi</string>
+				<string>org.tug.tex.xdv</string>
+				<string>net.sourceforge.skim-app.skimnotes</string>
+				<string>public.plain-text</string>
+				<string>public.rtf</string>
+				<string>com.apple.rtfd</string>
+				<string>com.adobe.fdf</string>
+			</array>
+		</dict>
+		<dict>
+			<key>CFBundleTypeName</key>
+			<string>XDV</string>
+			<key>CFBundleTypeRole</key>
+			<string>Editor</string>
+			<key>LSHandlerRank</key>
+			<string>Alternate</string>
+			<key>LSItemContentTypes</key>
+			<array>
+				<string>org.tug.tex.xdv</string>
+			</array>
+			<key>NSDocumentClass</key>
+			<string>$(PRODUCT_MODULE_NAME).KMMainDocument</string>
+			<key>NSExportableTypes</key>
+			<array>
+				<string>com.adobe.pdf</string>
+				<string>net.sourceforge.skim-app.pdfd</string>
+				<string>com.adobe.postscript</string>
+				<string>com.adobe.encapsulated-postscript</string>
+				<string>org.tug.tex.dvi</string>
+				<string>org.tug.tex.xdv</string>
+				<string>net.sourceforge.skim-app.skimnotes</string>
+				<string>public.plain-text</string>
+				<string>public.rtf</string>
+				<string>com.apple.rtfd</string>
+				<string>com.adobe.fdf</string>
+			</array>
+		</dict>
+		<dict>
+			<key>CFBundleTypeName</key>
+			<string>PDF Reader Pro Edition Notes</string>
+			<key>CFBundleTypeRole</key>
+			<string>Editor</string>
+			<key>LSHandlerRank</key>
+			<string>Owner</string>
+			<key>LSItemContentTypes</key>
+			<array>
+				<string>net.sourceforge.skim-app.skimnotes</string>
+			</array>
+			<key>NSDocumentClass</key>
+			<string>$(PRODUCT_MODULE_NAME).KMMainDocument</string>
+			<key>NSExportableTypes</key>
+			<array>
+				<string>net.sourceforge.skim-app.skimnotes</string>
+				<string>public.plain-text</string>
+				<string>public.rtf</string>
+				<string>com.apple.rtfd</string>
+				<string>com.adobe.fdf</string>
+			</array>
+		</dict>
+		<dict>
+			<key>CFBundleTypeName</key>
+			<string>Notes as Text</string>
+			<key>CFBundleTypeRole</key>
+			<string>None</string>
+			<key>LSHandlerRank</key>
+			<string>Alternate</string>
+			<key>LSItemContentTypes</key>
+			<array>
+				<string>public.rtf</string>
+			</array>
+		</dict>
+		<dict>
+			<key>CFBundleTypeName</key>
+			<string>Notes as RTF</string>
+			<key>CFBundleTypeRole</key>
+			<string>None</string>
+			<key>LSHandlerRank</key>
+			<string>Alternate</string>
+			<key>LSItemContentTypes</key>
+			<array>
+				<string>public.rtf</string>
+			</array>
+		</dict>
+		<dict>
+			<key>CFBundleTypeName</key>
+			<string>Notes as RTFD</string>
+			<key>CFBundleTypeRole</key>
+			<string>None</string>
+			<key>LSHandlerRank</key>
+			<string>Alternate</string>
+			<key>LSItemContentTypes</key>
+			<array>
+				<string>com.apple.rtfd</string>
+			</array>
+		</dict>
+		<dict>
+			<key>CFBundleTypeName</key>
+			<string>Notes as FDF</string>
+			<key>CFBundleTypeRole</key>
+			<string>Editor</string>
+			<key>LSHandlerRank</key>
+			<string>Alternate</string>
+			<key>LSItemContentTypes</key>
+			<array>
+				<string>com.adobe.fdf</string>
+			</array>
+		</dict>
+		<dict>
+			<key>CFBundleTypeName</key>
+			<string>Folder</string>
+			<key>CFBundleTypeRole</key>
+			<string>Viewer</string>
+			<key>LSHandlerRank</key>
+			<string>Alternate</string>
+			<key>LSItemContentTypes</key>
+			<array>
+				<string>public.folder</string>
+			</array>
+		</dict>
+		<dict>
+			<key>CFBundleTypeExtensions</key>
+			<array>
+				<string>jpg</string>
+				<string>cur</string>
+				<string>bmp</string>
+				<string>jpeg</string>
+				<string>gif</string>
+				<string>png</string>
+				<string>tiff</string>
+				<string>tif</string>
+				<string>ico</string>
+				<string>icns</string>
+				<string>tga</string>
+				<string>psd</string>
+				<string>eps</string>
+				<string>hdr</string>
+				<string>jp2</string>
+				<string>jpc</string>
+				<string>pict</string>
+				<string>sgi</string>
+			</array>
+			<key>CFBundleTypeName</key>
+			<string>Images</string>
+			<key>CFBundleTypeRole</key>
+			<string>Viewer</string>
+			<key>LSHandlerRank</key>
+			<string>Alternate</string>
+			<key>NSDocumentClass</key>
+			<string>KMImageDocument</string>
+		</dict>
+	</array>
+	<key>CFBundleURLTypes</key>
+	<array>
+		<dict>
+			<key>CFBundleTypeRole</key>
+			<string>Editor</string>
+			<key>CFBundleURLName</key>
+			<string>com.brother.pdfreaderpro.mac</string>
+			<key>CFBundleURLSchemes</key>
+			<array>
+				<string>db-4tcmyravvap2dmu</string>
+			</array>
+		</dict>
+	</array>
+	<key>Fabric</key>
+	<dict>
+		<key>APIKey</key>
+		<string>AIzaSyDex9auPUJBSvPMMu4UhIAtpwwzKutdmiQ</string>
+		<key>Kits</key>
+		<array>
+			<dict>
+				<key>KitInfo</key>
+				<dict/>
+				<key>KitName</key>
+				<string>Crashlytics</string>
+			</dict>
+		</array>
+	</dict>
+	<key>FirebaseAppDelegateProxyEnabled</key>
+	<false/>
+	<key>ATSApplicationFontsPath</key>
+	<string>Fonts</string>
+	<key>NSAppTransportSecurity</key>
+	<dict>
+		<key>NSAllowsArbitraryLoads</key>
+		<true/>
+	</dict>
+	<key>UIAppFonts</key>
+	<array>
+		<string>SF-Pro-Text-Regular.otf</string>
+		<string>SF-Pro-Text-Semibold.otf</string>
+		<string>SF-Pro-Text-Bold.otf</string>
+	</array>
+</dict>
+</plist>