Browse Source

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

liujiajie 1 year ago
parent
commit
70852db8e5
19 changed files with 1142 additions and 89 deletions
  1. 31 0
      PDF Office/PDF Master/AppDelegate.swift
  2. 42 0
      PDF Office/PDF Master/Class/Common/Category/NSError_Extensions.swift
  3. 1 1
      PDF Office/PDF Master/Class/Common/DataManager/KMDataManager.swift
  4. 114 0
      PDF Office/PDF Master/Class/Document/KMDocumentController.swift
  5. 0 1
      PDF Office/PDF Master/Class/PDFWindowController/PDFListView/CPDFKitExtensions/CPDFAnnotationExtensions/CPDFAnnotation+PDFListView.swift
  6. 26 0
      PDF Office/PDF Master/Class/PDFWindowController/PDFListView/CPDFKitExtensions/CPDFPageExtensions/CPDFPage+PDFListView.swift
  7. 1 0
      PDF Office/PDF Master/Class/PDFWindowController/PDFListView/CPDFListView.h
  8. 64 0
      PDF Office/PDF Master/Class/PDFWindowController/PDFListView/CPDFListView.m
  9. 0 2
      PDF Office/PDF Master/Class/PDFWindowController/PDFListView/ComPDFUIConfig.swift
  10. 4 5
      PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/StampList/KMAnnotationStampViewController.swift
  11. 1 2
      PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/StampList/KMDynamicStampViewController.swift
  12. 6 0
      PDF Office/PDF Master/Class/PDFWindowController/ViewController/KMMainViewController+Action.swift
  13. 194 3
      PDF Office/PDF Master/Class/Preference/Tools/KMPreferenceCommon.swift
  14. 257 75
      PDF Office/PDF Master/Class/Preference/Tools/KMPreferenceManager.swift
  15. 115 0
      PDF Office/PDF Master/Info.plist
  16. 8 0
      PDF Office/PDF Reader Pro.xcodeproj/project.pbxproj
  17. 48 0
      PDF Office/PDF Reader Pro.xcodeproj/xcuserdata/kdanmobile.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
  18. 115 0
      PDF Office/PDF-Reader-Pro-DMG-Info.plist
  19. 115 0
      PDF Office/PDF-Reader-Pro-Edition-Info.plist

+ 31 - 0
PDF Office/PDF Master/AppDelegate.swift

@@ -52,6 +52,7 @@ class AppDelegate: NSObject, NSApplicationDelegate, iRateDelegate{
             
         }
 #endif
+        NSApp.servicesProvider = self
         
         KMKdanRemoteConfig.remoteConfig().fetchWithRemoteConfigCompletionHandler { status, error in
             
@@ -794,3 +795,33 @@ extension AppDelegate : SUUpdaterDelegate {
     }
 }
 #endif
+
+extension AppDelegate {
+    // MARK: - Services Support
+    func openDocumentFromURLOnPboard(_ pboard: NSPasteboard, userData: String?, error errorString: inout String?) {
+        var error: NSError?
+        if let document = NSDocumentController.shared.openDocumentWithURLFromPasteboard(pboard, showNotes: false, outError: &error) {
+            // Document opened successfully
+        } else if let error = error {
+            errorString = error.localizedDescription
+        }
+    }
+
+    func openDocumentFromDataOnPboard(_ pboard: NSPasteboard, userData: String?, error errorString: inout String?) {
+        var error: NSError?
+        if let document = NSDocumentController.shared.openDocumentWithImageFromPasteboard(pboard, error: &error) {
+            // Document opened successfully
+        } else if let error = error {
+            errorString = error.localizedDescription
+        }
+    }
+
+    func openNotesDocumentFromURLOnPboard(_ pboard: NSPasteboard, userData: String?, error errorString: inout String?) {
+        var error: NSError?
+        if let document = NSDocumentController.shared.openDocumentWithURLFromPasteboard(pboard, showNotes: true, outError: &error) {
+            // Document opened successfully
+        } else if let error = error {
+            errorString = error.localizedDescription
+        }
+    }
+}

+ 42 - 0
PDF Office/PDF Master/Class/Common/Category/NSError_Extensions.swift

@@ -0,0 +1,42 @@
+//
+//  NSError_Extensions.swift
+//  PDF Reader Pro
+//
+//  Created by lizhe on 2024/3/8.
+//
+
+import Cocoa
+
+enum KMDocumentErrorType: Int {
+    case writeFile = 1
+    case readFile = 2
+    case ReadPasteboard = 3
+    case printDocument = 4
+}
+
+let SKDocumentErrorDomain = "SKDocumentErrorDomain"
+extension NSError {
+    static func writeFileError(withLocalizedDescription description: String) -> NSError {
+        return NSError(domain: SKDocumentErrorDomain, code: KMDocumentErrorType.writeFile.rawValue, userInfo: [NSLocalizedDescriptionKey: description])
+    }
+    
+    static func readFileError(withLocalizedDescription description: String) -> NSError {
+        return NSError(domain: SKDocumentErrorDomain, code: KMDocumentErrorType.readFile.rawValue, userInfo: [NSLocalizedDescriptionKey: description])
+    }
+    
+    static func readPasteboardError(withLocalizedDescription description: String) -> NSError {
+        return NSError(domain: SKDocumentErrorDomain, code: KMDocumentErrorType.ReadPasteboard.rawValue, userInfo: [NSLocalizedDescriptionKey: description])
+    }
+    
+    static func printDocumentError(withLocalizedDescription description: String) -> NSError {
+        return NSError(domain: SKDocumentErrorDomain, code: KMDocumentErrorType.printDocument.rawValue, userInfo: [NSLocalizedDescriptionKey: description])
+    }
+    
+    static func userCancelledError(withUnderlyingError error: NSError) -> NSError {
+        return NSError(domain: NSCocoaErrorDomain, code: NSUserCancelledError, userInfo: [NSUnderlyingErrorKey: error])
+    }
+    
+    var isUserCancelledError: Bool {
+        return domain == NSCocoaErrorDomain && code == NSUserCancelledError
+    }
+}

+ 1 - 1
PDF Office/PDF Master/Class/Common/DataManager/KMDataManager.swift

@@ -18,7 +18,7 @@ class KMDataManager: NSObject {
 
 extension KMDataManager {
     class func ud_object(forKey defaultName: String) -> Any? {
-        return self.userD_.bool(forKey: defaultName)
+        return self.userD_.object(forKey: defaultName)
     }
 
     class func ud_set(_ value: Any?, forKey defaultName: String, sync: Bool = true) {

+ 114 - 0
PDF Office/PDF Master/Class/Document/KMDocumentController.swift

@@ -149,3 +149,117 @@ class KMDocumentController: NSDocumentController {
     }
 }
 
+extension NSDocumentController {
+    func openDocumentWithURLFromPasteboard(_ pboard: NSPasteboard, showNotes: Bool, outError: NSErrorPointer) -> Any? {
+        guard let theURLs = NSURL.readURLs(from: pboard), let theURL = theURLs.first else {
+            if showNotes == false {
+                outError?.pointee = NSError.readPasteboardError(withLocalizedDescription: NSLocalizedString("Unable to load data from clipboard", comment: "Error description"))
+            }
+            return nil
+        }
+        
+//        guard theURL.isFileURL else {
+//            if showNotes == false {
+//                return SKDownloadController.shared.addDownload(for: theURL)
+//            }
+//            return nil
+//        }
+        
+        var document: Any?
+//        do {
+//            let type = try self.type(forContentsOf: theURL)
+//            if showNotes == false || SKNotesDocument.readableTypes.contains(type) {
+//                document = try self.openDocument(withContentsOf: theURL, display: true)
+//            } else if SKMainDocument.readableTypes.contains(type) {
+//                for doc in self.documents {
+//                    if let sourceURL = (doc as? NSObject)?.value(forKey: "sourceFileURL") as? URL, sourceURL == theURL {
+//                        document = doc
+//                        break
+//                    }
+//                }
+//                if let existingDoc = document as? NSDocument {
+//                    existingDoc.showWindows()
+//                } else {
+//                    var error: NSError?
+//                    var data: Data?
+//                    
+//                    if NSWorkspace.shared.type(type, conformsToType: SKPDFBundleDocumentType) {
+//                        if let skimFileURL = try FileManager.default.bundledFileURL(withExtension: "skim", inPDFBundleAt: theURL) {
+//                            data = try Data(contentsOf: skimFileURL)
+//                        }
+//                    } else {
+//                        data = try SKNExtendedAttributeManager.shared().extendedAttributeNamed(SKIM_NOTES_KEY, atPath: theURL.path, traverseLink: true)
+//                    }
+//                    
+//                    let newDocument = try makeUntitledDocument(ofType: SKNotesDocumentType)
+//                    newDocument.sourceFileURL = theURL
+//                    
+//                    if data == nil || newDocument.read(from: data ?? Data(), ofType: SKNotesDocumentType) {
+//                        self.addDocument(newDocument)
+//                        newDocument.makeWindowControllers()
+//                        newDocument.showWindows()
+//                    } else {
+//                        document = nil
+//                        outError?.pointee = error
+//                    }
+//                }
+//            }
+//        } catch {
+//            outError?.pointee = error as NSError
+//        }
+        
+        return document
+    }
+
+    
+    func openDocumentWithImageFromPasteboard(_ pboard: NSPasteboard, error outError: NSErrorPointer) -> Any? {
+        var document: Any?
+//        var data: Data?
+//        var type: String?
+//        
+//        if pboard.canReadItem(withDataConformingToTypes: [NSPasteboard.PasteboardType.PDF]) {
+//            pboard.types
+//            data = pboard.data(forType: NSPasteboard.PasteboardType.PDF)
+//            type = SKPDFDocumentType
+//        } else if pboard.canReadItem(withDataConformingToTypes: [SKPasteboardTypePostScript]) {
+//            pboard.types
+//            data = pboard.data(forType: SKPasteboardTypePostScript)
+//            type = isEncapsulatedPostScriptData(data) ? SKEncapsulatedPostScriptDocumentType : SKPostScriptDocumentType
+//        } else if pboard.canReadItem(withDataConformingToTypes: [NSPasteboard.PasteboardType.tiff]) {
+//            pboard.types
+//            data = convertTIFFDataToPDF(pboard.data(forType: NSPasteboard.PasteboardType.tiff))
+//            type = SKPDFDocumentType
+//        } else {
+//            let images = pboard.readObjects(forClasses: [NSImage.self], options: [:]) as? [NSImage]
+//            let strings = pboard.readObjects(forClasses: [NSAttributedString.self], options: [:]) as? [NSAttributedString]
+//            if let images = images, images.count > 0 {
+//                data = convertTIFFDataToPDF(images[0].tiffRepresentation)
+//                type = SKPDFDocumentType
+//            } else if let strings = strings, strings.count > 0 {
+//                data = convertStringsToPDF(strings)
+//                type = SKPDFDocumentType
+//            }
+//        }
+//        
+//        if let data = data, let type = type {
+//            var error: NSError?
+//            document = makeUntitledDocument(ofType: type, error: &error)
+//            
+//            if (document as? NSDocument)?.read(from: data, ofType: type, error: &error) ?? false {
+//                addDocument(document as! NSDocument)
+//                (document as! NSDocument).makeWindowControllers()
+//                (document as! NSDocument).showWindows()
+//            } else {
+//                document = nil
+//                if let outError = outError {
+//                    outError.pointee = error
+//                }
+//            }
+//        } else if let outError = outError {
+//            outError.pointee = NSError.readPasteboardError(withLocalizedDescription: NSLocalizedString("Unable to load data from clipboard", comment: "Error description"))
+//        }
+//        
+        return document
+    }
+
+}

+ 0 - 1
PDF Office/PDF Master/Class/PDFWindowController/PDFListView/CPDFKitExtensions/CPDFAnnotationExtensions/CPDFAnnotation+PDFListView.swift

@@ -181,7 +181,6 @@ import Foundation
 @objc extension CPDFAnnotation {
     /*
      #define SKUseUserNameKey @"SKUseUserName"
-     #define SKUserNameKey @"SKUserName"
 
 
      NSString *SKPDFAnnotationScriptingBorderStyleKey = @"scriptingBorderStyle";

+ 26 - 0
PDF Office/PDF Master/Class/PDFWindowController/PDFListView/CPDFKitExtensions/CPDFPageExtensions/CPDFPage+PDFListView.swift

@@ -8,6 +8,32 @@
 import Foundation
 
 @objc extension CPDFPage {
+    func pdfData(for rect: NSRect) -> Data? {
+        if rect == NSZeroRect {
+            return self.document.dataRepresentation()
+        }
+        if rect.isEmpty {
+            return nil
+        }
+        
+        var data: Data?
+        let page = self.copy() as! PDFPage
+        
+        if #available(macOS 10.11, *) {
+            // On 10.11 the media box is shifted back to the origin without the contents being shifted
+            page.setBounds(rect, for: .cropBox)
+        } else {
+            page.setBounds(rect, for: .mediaBox)
+            page.setBounds(NSZeroRect, for: .cropBox)
+        }
+        page.setBounds(NSZeroRect, for: .bleedBox)
+        page.setBounds(NSZeroRect, for: .trimBox)
+        page.setBounds(NSZeroRect, for: .artBox)
+        data = page.dataRepresentation
+        
+        return data
+    }
+    
     @objc func PDFListViewTIFFData(for rect: NSRect) -> Data? {
         if (NSIsEmptyRect(rect)) {
             return nil

+ 1 - 0
PDF Office/PDF Master/Class/PDFWindowController/PDFListView/CPDFListView.h

@@ -252,6 +252,7 @@ typedef NS_ENUM(NSInteger, KMPDFViewSplitMode) {
 
 - (void)setPageBackgroundColorWithColor:(NSColor *)color viewMode:(KMPDFViewMode)viewMode;
 
+- (BOOL)writeSelectionToPasteboard:(NSPasteboard *)pboard types:(NSArray *)types;
 @end
 
 @protocol CPDFListViewDelegate <NSObject>

+ 64 - 0
PDF Office/PDF Master/Class/PDFWindowController/PDFListView/CPDFListView.m

@@ -87,6 +87,9 @@ NSNotificationName const KMPDFViewTableAnnotationDidChangeNotification = @"KMPDF
     self.clickLineAnnotation = nil;
     self.isClickDoubleCreatLine = NO;
     
+    NSArray *sendTypes = [NSArray arrayWithObjects:NSPasteboardTypePDF, NSPasteboardTypeTIFF, nil];
+    [NSApp registerServicesMenuSendTypes:sendTypes returnTypes:[NSArray array]];
+    
     KMPDFViewMode viewMode = KMPDFViewModeNormal;
     if ([[NSUserDefaults standardUserDefaults] objectForKey:@"kPDFViewModeKey"]) {
         viewMode = (KMPDFViewMode)[[[NSUserDefaults standardUserDefaults] objectForKey:@"kPDFViewModeKey"] integerValue];
@@ -1630,4 +1633,65 @@ NSNotificationName const KMPDFViewTableAnnotationDidChangeNotification = @"KMPDF
     [self setNeedsDisplay:YES];
 }
 
+#pragma mark Services
+
+- (BOOL)writeSelectionToPasteboard:(NSPasteboard *)pboard types:(NSArray *)types {
+    if ([self toolMode] == CSelectToolMode && NSIsEmptyRect(_selectionRect) == NO && _selectionPageIndex != NSNotFound) {
+        NSMutableArray *writeTypes = [NSMutableArray array];
+        NSString *pdfType = nil;
+        NSData *pdfData = nil;
+        NSString *tiffType = nil;
+        NSData *tiffData = nil;
+        NSRect selRect = NSIntegralRect(_selectionRect);
+        
+        // Unfortunately only old PboardTypes are requested rather than preferred UTIs, even if we only validate and the Service only requests UTIs, so we need to support both
+        if ([[self document] allowsPrinting] && [[self document] isLocked] == NO) {
+            if ([types containsObject:NSPasteboardTypePDF])
+                pdfType = NSPasteboardTypePDF;
+            else if ([types containsObject:NSPasteboardTypePDF])
+                pdfType = NSPasteboardTypePDF;
+            if (pdfType && (pdfData = [[self currentSelectionPage] pdfDataFor:selRect]))
+                [writeTypes addObject:pdfType];
+        }
+        if ([types containsObject:NSPasteboardTypeTIFF])
+            tiffType = NSPasteboardTypeTIFF;
+        else if ([types containsObject:NSPasteboardTypeTIFF])
+            tiffType = NSPasteboardTypeTIFF;
+        if (tiffType && (tiffData = [[self currentSelectionPage] PDFListViewTIFFDataFor:selRect]))
+            [writeTypes addObject:tiffType];
+        if ([writeTypes count] > 0) {
+            [pboard declareTypes:writeTypes owner:nil];
+            if (pdfData)
+                [pboard setData:pdfData forType:pdfType];
+            if (tiffData)
+                [pboard setData:tiffData forType:tiffType];
+            return YES;
+        }
+    }
+    if ([[self currentSelection] hasCharacters]) {
+        if ([types containsObject:NSPasteboardTypeRTF] || [types containsObject:NSPasteboardTypeRTF]) {
+            [pboard clearContents];
+            [pboard writeObjects:[NSArray arrayWithObjects:[[self currentSelection] attributedString], nil]];
+            return YES;
+        } else if ([types containsObject:NSPasteboardTypeString] || [types containsObject:NSPasteboardTypeString]) {
+            [pboard clearContents];
+            [pboard writeObjects:[NSArray arrayWithObjects:[[self currentSelection] string], nil]];
+            return YES;
+        }
+    }
+    
+    
+    return [[CPDFListView superclass] instancesRespondToSelector:_cmd];
+}
+
+- (id)validRequestorForSendType:(NSString *)sendType returnType:(NSString *)returnType {
+    if ([self toolMode] == CSelectToolMode && NSIsEmptyRect(_selectionRect) == NO && _selectionPageIndex != NSNotFound && returnType == nil &&
+        (([[self document] allowsPrinting] && [[self document] isLocked] == NO && [sendType isEqualToString:NSPasteboardTypePDF]) || [sendType isEqualToString:NSPasteboardTypeTIFF])) {
+        return self;
+    }
+    if ([[self currentSelection] hasCharacters] && returnType == nil && ([sendType isEqualToString:NSPasteboardTypeString] || [sendType isEqualToString:NSPasteboardTypeRTF])) {
+        return self;
+    }
+    return [super validRequestorForSendType:sendType returnType:returnType];
+}
 @end

+ 0 - 2
PDF Office/PDF Master/Class/PDFWindowController/PDFListView/ComPDFUIConfig.swift

@@ -16,8 +16,6 @@ class ComPDFUIConfig: NSObject {
             // Set the defaults in the standard user defaults
             UserDefaults.standard.register(defaults: initialValuesDict)
             
-            // App启动后,恢复部分设置
-            KMPreferenceManager.shared.resumeDataToPDFView()
             UserDefaults.standard.setPDFListViewColor(NSColor.black, forKey: CFreeTextNoteFontColorKey)
             
             NSImage.makePDFListViewCursorImages()

+ 4 - 5
PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/StampList/KMAnnotationStampViewController.swift

@@ -1288,7 +1288,8 @@ let KMPDFDynamicStampNeedAuthorKey1 = "km_pdfview_dynamic_stamp_need_author"
     
     @IBAction func dynamicStampButtonItemClicked_Author(_ sender: NSButton) {
         // 从沙盒中取出作者,如果没有
-        if let author = UserDefaults.standard.string(forKey: "SKUserName"), !author.isEmpty {
+        
+        if let author = KMDataManager.ud_string(forKey: KMUserNameKey), !author.isEmpty {
             self.authorTextField.placeholderString = author
         } else {
             self.authorTextField.placeholderString = NSFullUserName()
@@ -1300,7 +1301,7 @@ let KMPDFDynamicStampNeedAuthorKey1 = "km_pdfview_dynamic_stamp_need_author"
             self.authorTextField.stringValue = ""
             self.authorTextField.isEditable = false
         } else {
-            if let author = UserDefaults.standard.string(forKey: "SKUserName"), !author.isEmpty {
+            if let author = KMDataManager.ud_string(forKey: KMUserNameKey), !author.isEmpty {
                 self.authorTextField.stringValue = author
             } else {
                 self.authorTextField.stringValue = NSFullUserName()
@@ -1342,9 +1343,7 @@ let KMPDFDynamicStampNeedAuthorKey1 = "km_pdfview_dynamic_stamp_need_author"
         loadDynamicStamps()
         
         let userName = authorTextField.stringValue.isEmpty ? "" : authorTextField.stringValue
-        
-        UserDefaults.standard.set(userName, forKey: "SKUserName")
-        UserDefaults.standard.synchronize()
+        KMDataManager.ud_set(userName, forKey: KMUserNameKey)
         
         createStampTableView.reloadData()
     }

+ 1 - 2
PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/StampList/KMDynamicStampViewController.swift

@@ -130,7 +130,6 @@ typealias UpdateStampCallBack = () -> Void
     
     func controlTextDidEndEditing(_ obj: Notification) {
         let userName = authorTextField.stringValue.isEmpty ? "" : authorTextField.stringValue
-        UserDefaults.standard.set(userName, forKey: "SKUserName")
-        UserDefaults.standard.synchronize()
+        KMDataManager.ud_set(userName, forKey: KMUserNameKey)
     }
 }

+ 6 - 0
PDF Office/PDF Master/Class/PDFWindowController/ViewController/KMMainViewController+Action.swift

@@ -4513,6 +4513,12 @@ extension KMMainViewController : KMMainToolbarControllerDelegate {
                     self.toolbarController.toolbarType = isSelected ? .None : .viewSetting
                     toolbarItem.isSelected = !isSelected
                     self.toolbarController.clickItem(KMToolbarViewSettingIdentifier)
+                    let rightItem = self.toolbarController.findItem(KMRightControlToolbarItemIdentifier)
+                    if isSelected {
+                        rightItem?.isSelected = false
+                    } else {
+                        rightItem?.isSelected = true
+                    }
                 } else if toolbarItem.itemIdentifier == KMLeftControlToolbarItemIdentifier {
                     toolbarItem.isSelected = !toolbarItem.isSelected
                     self.leftSideViewController.showPanelView(show: toolbarItem.isSelected)

+ 194 - 3
PDF Office/PDF Master/Class/Preference/Tools/KMPreferenceCommon.swift

@@ -31,9 +31,43 @@ public let KMFullScreenBackgroundColorKey                       = "SKFullScreenB
 public let KMReadingBarColorKey                                 = "SKReadingBarColor"
 public let KMReadingBarInvertKey                                = "SKReadingBarInvert"
 
-
-
-
+// note
+public let KMFreeTextNoteColorKey                               = "SKFreeTextNoteColor"
+public let KMAnchoredNoteColorKey                               = "SKAnchoredNoteColor"
+public let KMLineNoteColorKey                                   = "SKLineNoteColor"
+public let KMLineNoteInteriorColorKey                           = "SKLineNoteInteriorColor"
+public let KMCircleNoteColorKey                                 = "SKCircleNoteColor"
+public let KMCircleNoteInteriorColorKey                         = "SKCircleNoteInteriorColor"
+public let KMSquareNoteColorKey                                 = "SKSquareNoteColor"
+public let KMSquareNoteInteriorColorKey                         = "SKSquareNoteInteriorColor"
+public let KMHighlightNoteColorKey                              = "SKHighlightNoteColor"
+public let KMUnderlineNoteColorKey                              = "SKUnderlineNoteColor"
+public let KMStrikeOutNoteColorKey                              = "SKStrikeOutNoteColor"
+public let KMInkNoteColorKey                                    = "SKInkNoteColor"
+// font
+public let KMFreeTextNoteFontNameKey                            = "SKFreeTextNoteFontName"
+public let KMFreeTextNoteFontSizeKey                            = "SKFreeTextNoteFontSize"
+public let KMFreeTextNoteAlignmentKey                           = "SKFreeTextNoteAlignment"
+public let KMAnchoredNoteFontNameKey                            = "SKAnchoredNoteFontName"
+public let KMAnchoredNoteFontSizeKey                            = "SKAnchoredNoteFontSize"
+// line style
+public let KMFreeTextNoteLineStyleKey                           = "SKFreeTextNoteLineStyle"
+public let KMFreeTextNoteLineWidthKey                           = "SKFreeTextNoteLineWidth"
+public let KMFreeTextNoteDashPatternKey                         = "SKFreeTextNoteDashPattern"
+public let KMCircleNoteLineStyleKey                             = "SKCircleNoteLineStyle"
+public let KMCircleNoteLineWidthKey                             = "SKCircleNoteLineWidth"
+public let KMCircleNoteDashPatternhKey                          = "SKCircleNoteDashPattern"
+public let KMSquareNoteLineStyleKey                             = "SKSquareNoteLineStyle"
+public let KMSquareNoteLineWidthKey                             = "SKSquareNoteLineWidth"
+public let KMSquareNoteDashPatternKey                           = "SKSquareNoteDashPattern"
+public let KMLineNoteLineStyleKey                               = "SKLineNoteLineStyle"
+public let KMLineNoteLineWidthKey                               = "SKLineNoteLineWidth"
+public let KMLineNoteDashPatternKey                             = "SKLineNoteDashPattern"
+public let KMLineNoteStartLineStyleKey                          = "SKLineNoteStartLineStyle"
+public let KMLineNoteEndLineStyleKey                            = "SKLineNoteEndLineStyle"
+public let KMInkNoteLineStyleKey                                = "SKInkNoteLineStyle"
+public let KMInkNoteLineWidthKey                                = "SKInkNoteLineWidth"
+public let KMInkNoteDashPatternKey                              = "SKInkNoteDashPattern"
 
 func KMPreferenceKeyToCKey(pKey: KMPreferenceKey) -> String? {
     // freeText
@@ -126,9 +160,89 @@ func KMPreferenceKeyToUDKey(pKey: KMPreferenceKey) -> String? {
     } else if pKey == KMPreference.invertBarKey {
         return KMReadingBarInvertKey
     }
+    // note
+    else if pKey == KMPreference.markupColorTextKey {
+        return KMFreeTextNoteColorKey
+    } else if pKey == KMPreference.markupColorNoteKey {
+        return KMAnchoredNoteColorKey
+    } else if pKey == KMPreference.markupColorLineKey {
+        return KMLineNoteColorKey
+    }
+//    else if pKey == KMPreference.markup
+    else if pKey == KMPreference.markupColorCircleBorderKey {
+        return KMCircleNoteColorKey
+    } else if pKey == KMPreference.markupColorCircleFillKey {
+        return KMCircleNoteInteriorColorKey
+    } else if pKey == KMPreference.markupColorRectangleBorderKey {
+        return KMSquareNoteColorKey
+    } else if pKey == KMPreference.markupColorRectangleFillKey {
+        return KMSquareNoteInteriorColorKey
+    } else if pKey == KMPreference.markupColorHighlightKey {
+        return KMHighlightNoteColorKey
+    } else if pKey == KMPreference.markupColorUnderlineKey {
+        return KMUnderlineNoteColorKey
+    } else if pKey == KMPreference.markupColorStrikthroughKey {
+        return KMStrikeOutNoteColorKey
+    } else if pKey == KMPreference.markupColorPenKey {
+        return KMInkNoteColorKey
+    }
+    // font
+    else if pKey == KMPreference.markupFontTextStringKey {
+        return KMFreeTextNoteFontNameKey
+    } else if pKey == KMPreference.markupTextFontSizeKey {
+        return KMFreeTextNoteFontSizeKey
+    } else if pKey == KMPreference.markupFontTextAligmentKey {
+        return KMFreeTextNoteAlignmentKey
+    } else if pKey == KMPreference.markupFontNoteStringKey {
+        return KMAnchoredNoteFontNameKey
+    } else if pKey == KMPreference.markupNoteFontSizeKey {
+        return KMAnchoredNoteFontSizeKey
+    }
+    // line style
+    else if pKey == KMPreference.freeTextNoteLineStyleKey {
+        return KMFreeTextNoteLineStyleKey
+    } else if pKey == KMPreference.freeTextNoteLineWidthKey {
+        return KMFreeTextNoteLineWidthKey
+    } else if pKey == KMPreference.freeTextNoteDashPatternKey {
+        return KMFreeTextNoteDashPatternKey
+    }
+    else if pKey == KMPreference.circleNoteLineStyleKey {
+        return KMCircleNoteLineStyleKey
+    } else if pKey == KMPreference.circleNoteLineWidthKey {
+        return KMCircleNoteLineWidthKey
+    } else if pKey == KMPreference.circleNoteDashPatternKey {
+        return KMCircleNoteDashPatternhKey
+    }
+    else if pKey == KMPreference.squareNoteLineStyleKey {
+        return KMSquareNoteLineStyleKey
+    } else if pKey == KMPreference.squareNoteLineWidthKey {
+        return KMSquareNoteLineWidthKey
+    } else if pKey == KMPreference.squareNoteDashPatternKey {
+        return KMSquareNoteDashPatternKey
+    }
+    else if pKey == KMPreference.lineNoteLineStyleKey {
+        return KMLineNoteLineStyleKey
+    } else if pKey == KMPreference.lineNoteLineWidthKey {
+        return KMLineNoteLineWidthKey
+    } else if pKey == KMPreference.lineNoteDashPatternKey {
+        return KMLineNoteDashPatternKey
+    } else if pKey == KMPreference.lineNoteStartLineStyleKey {
+        return KMLineNoteStartLineStyleKey
+    } else if pKey == KMPreference.lineNoteEndLineStyleKey {
+        return KMLineNoteEndLineStyleKey
+    }
+    else if pKey == KMPreference.inkNoteLineStyleKey {
+        return KMInkNoteLineStyleKey
+    } else if pKey == KMPreference.inkNoteLineWidthKey {
+        return KMInkNoteLineWidthKey
+    } else if pKey == KMPreference.inkNoteDashPatternKey {
+        return KMInkNoteDashPatternKey
+    }
     return nil
 }
 
+//public let KMLineNoteInteriorColorKey                           = "SKLineNoteInteriorColor"
+
 func KMPreferenceKeyFromUDKey(udKey: String) -> KMPreferenceKey? {
     // general
     if udKey == KMUserNameKey {
@@ -170,5 +284,82 @@ func KMPreferenceKeyFromUDKey(udKey: String) -> KMPreferenceKey? {
     } else if udKey == KMReadingBarInvertKey {
         return KMPreference.invertBarKey
     }
+    // note
+    else if udKey == KMFreeTextNoteColorKey {
+        return KMPreference.markupColorTextKey
+    } else if udKey == KMAnchoredNoteColorKey {
+        return KMPreference.markupColorNoteKey
+    } else if udKey == KMLineNoteColorKey {
+        return KMPreference.markupColorLineKey
+    } else if udKey == KMCircleNoteColorKey {
+        return KMPreference.markupColorCircleBorderKey
+    } else if udKey == KMCircleNoteInteriorColorKey {
+        return KMPreference.markupColorCircleFillKey
+    } else if udKey == KMSquareNoteColorKey {
+        return KMPreference.markupColorRectangleBorderKey
+    } else if udKey == KMSquareNoteInteriorColorKey {
+        return KMPreference.markupColorRectangleFillKey
+    } else if udKey == KMHighlightNoteColorKey {
+        return KMPreference.markupColorHighlightKey
+    } else if udKey == KMUnderlineNoteColorKey {
+        return KMPreference.markupColorUnderlineKey
+    } else if udKey == KMStrikeOutNoteColorKey {
+        return KMPreference.markupColorStrikthroughKey
+    } else if udKey == KMInkNoteColorKey {
+        return KMPreference.markupColorPenKey
+    }
+    // font
+    else if udKey == KMFreeTextNoteFontNameKey {
+        return KMPreference.markupFontTextStringKey
+    } else if udKey == KMFreeTextNoteFontSizeKey {
+        return KMPreference.markupTextFontSizeKey
+    } else if udKey == KMFreeTextNoteAlignmentKey {
+        return KMPreference.markupFontTextAligmentKey
+    } else if udKey == KMAnchoredNoteFontNameKey {
+        return KMPreference.markupFontNoteStringKey
+    } else if udKey == KMAnchoredNoteFontSizeKey {
+        return KMPreference.markupNoteFontSizeKey
+    }
+    // line style
+    else if udKey == KMFreeTextNoteLineStyleKey {
+        return KMPreference.freeTextNoteLineStyleKey
+    } else if udKey == KMFreeTextNoteLineWidthKey {
+        return KMPreference.freeTextNoteLineWidthKey
+    } else if udKey == KMFreeTextNoteDashPatternKey {
+        return KMPreference.freeTextNoteDashPatternKey
+    }
+    else if udKey == KMCircleNoteLineStyleKey {
+        return KMPreference.circleNoteLineStyleKey
+    } else if udKey == KMCircleNoteLineWidthKey {
+        return KMPreference.circleNoteLineWidthKey
+    } else if udKey == KMCircleNoteDashPatternhKey {
+        return KMPreference.circleNoteDashPatternKey
+    }
+    else if udKey == KMSquareNoteLineStyleKey {
+        return KMPreference.squareNoteLineStyleKey
+    } else if udKey == KMSquareNoteLineWidthKey {
+        return KMPreference.squareNoteLineWidthKey
+    } else if udKey == KMSquareNoteDashPatternKey {
+        return KMPreference.squareNoteDashPatternKey
+    }
+    else if udKey == KMLineNoteLineStyleKey {
+        return KMPreference.lineNoteLineStyleKey
+    } else if udKey == KMLineNoteLineWidthKey {
+        return KMPreference.lineNoteLineWidthKey
+    } else if udKey == KMLineNoteDashPatternKey {
+        return KMPreference.lineNoteDashPatternKey
+    } else if udKey == KMLineNoteStartLineStyleKey {
+        return KMPreference.lineNoteStartLineStyleKey
+    } else if udKey == KMLineNoteEndLineStyleKey {
+        return KMPreference.lineNoteEndLineStyleKey
+    }
+    else if udKey == KMInkNoteLineStyleKey {
+        return KMPreference.inkNoteLineStyleKey
+    } else if udKey == KMInkNoteLineWidthKey {
+        return KMPreference.inkNoteLineWidthKey
+    } else if udKey == KMInkNoteDashPatternKey {
+        return KMPreference.inkNoteDashPatternKey
+    }
     return nil
 }
+

+ 257 - 75
PDF Office/PDF Master/Class/Preference/Tools/KMPreferenceManager.swift

@@ -88,25 +88,25 @@ 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 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 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"
@@ -306,6 +306,7 @@ typealias KMPreference = KMPreferenceManager
         self.resetDataToPDFView()
         self._resetDataToUserDefault(group: .general)
         self._resetDataToUserDefault(group: .display)
+        self._resetDataToUserDefault(group: .markup)
         
         DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {
             var groppInfos: [KMPreferenceKey : Any] = [:]
@@ -1322,331 +1323,512 @@ extension KMPreferenceManager {
 extension KMPreferenceManager {
     var markupHighlightColor: NSColor {
         get {
+            let pKey = KMPreference.markupColorHighlightKey
+            let udKey = KMPreferenceKeyToUDKey(pKey: pKey) ?? ""
+            if let color = UserDefaults.standard.color(forKey: udKey) {
+                return color
+            }
             return self.getColor(forKey: KMPreference.markupColorHighlightKey)
         }
         set {
             self.syncDataToPDFView(newValue, forKey: KMPreference.markupColorHighlightKey)
             
             let _ = self.setColor(newValue, forKey: KMPreference.markupColorHighlightKey)
+            self._syncDataToUserDefault(newValue, forKey: KMPreference.markupColorHighlightKey)
         }
     }
     var markupStrikthroughColor: NSColor {
         get {
+            let pKey = KMPreference.markupColorStrikthroughKey
+            let udKey = KMPreferenceKeyToUDKey(pKey: pKey) ?? ""
+            if let color = UserDefaults.standard.color(forKey: udKey) {
+                return color
+            }
             return self.getColor(forKey: KMPreference.markupColorStrikthroughKey)
         }
         set {
             self.syncDataToPDFView(newValue, forKey: KMPreference.markupColorStrikthroughKey)
             
             let _ = self.setColor(newValue, forKey: KMPreference.markupColorStrikthroughKey)
+            self._syncDataToUserDefault(newValue, forKey: KMPreference.markupColorStrikthroughKey)
         }
     }
     var markupUnderlineColor: NSColor {
         get {
+            let pKey = KMPreference.markupColorUnderlineKey
+            let udKey = KMPreferenceKeyToUDKey(pKey: pKey) ?? ""
+            if let color = UserDefaults.standard.color(forKey: udKey) {
+                return color
+            }
             return self.getColor(forKey: KMPreference.markupColorUnderlineKey)
         }
         set {
             self.syncDataToPDFView(newValue, forKey: KMPreference.markupColorUnderlineKey)
             
             let _ = self.setColor(newValue, forKey: KMPreference.markupColorUnderlineKey)
+            self._syncDataToUserDefault(newValue, forKey: KMPreference.markupColorUnderlineKey)
         }
     }
     var markupPenColor: NSColor {
         get {
+            let pKey = KMPreference.markupColorPenKey
+            let udKey = KMPreferenceKeyToUDKey(pKey: pKey) ?? ""
+            if let color = UserDefaults.standard.color(forKey: udKey) {
+                return color
+            }
             return self.getColor(forKey: KMPreference.markupColorPenKey)
         }
         set {
             self.syncDataToPDFView(newValue, forKey: KMPreference.markupColorPenKey)
             
             let _ = self.setColor(newValue, forKey: KMPreference.markupColorPenKey)
+            self._syncDataToUserDefault(newValue, forKey: KMPreference.markupColorPenKey)
         }
     }
     var markupTextColor: NSColor {
         get {
+            let pKey = KMPreference.markupColorTextKey
+            let udKey = KMPreferenceKeyToUDKey(pKey: pKey) ?? ""
+            if let color = UserDefaults.standard.color(forKey: udKey) {
+                return color
+            }
             return self.getColor(forKey: KMPreference.markupColorTextKey)
         }
         set {
             self.syncDataToPDFView(newValue, forKey: KMPreference.markupColorTextKey)
             
             let _ = self.setColor(newValue, forKey: KMPreference.markupColorTextKey)
+            self._syncDataToUserDefault(newValue, forKey: KMPreference.markupColorTextKey)
         }
     }
     var markupNoteColor: NSColor {
         get {
+            let pKey = KMPreference.markupColorNoteKey
+            let udKey = KMPreferenceKeyToUDKey(pKey: pKey) ?? ""
+            if let color = UserDefaults.standard.color(forKey: udKey) {
+                return color
+            }
             return self.getColor(forKey: KMPreference.markupColorNoteKey)
         }
         set {
             self.syncDataToPDFView(newValue, forKey: KMPreference.markupColorNoteKey)
             
             let _ = self.setColor(newValue, forKey: KMPreference.markupColorNoteKey)
+            self._syncDataToUserDefault(newValue, forKey: KMPreference.markupColorNoteKey)
         }
     }
     var markupRectangleFillColor: NSColor {
         get {
+            let pKey = KMPreference.markupColorRectangleFillKey
+            let udKey = KMPreferenceKeyToUDKey(pKey: pKey) ?? ""
+            if let color = UserDefaults.standard.color(forKey: udKey) {
+                return color
+            }
             return self.getColor(forKey: KMPreference.markupColorRectangleFillKey)
         }
         set {
             self.syncDataToPDFView(newValue, forKey: KMPreference.markupColorRectangleFillKey)
             
             let _ = self.setColor(newValue, forKey: KMPreference.markupColorRectangleFillKey)
+            self._syncDataToUserDefault(newValue, forKey: KMPreference.markupColorRectangleFillKey)
         }
     }
     var markupRectangleBorderColor: NSColor {
         get {
+            let pKey = KMPreference.markupColorRectangleBorderKey
+            let udKey = KMPreferenceKeyToUDKey(pKey: pKey) ?? ""
+            if let color = UserDefaults.standard.color(forKey: udKey) {
+                return color
+            }
             return self.getColor(forKey: KMPreference.markupColorRectangleBorderKey)
         }
         set {
             self.syncDataToPDFView(newValue, forKey: KMPreference.markupColorRectangleBorderKey)
             
             let _ = self.setColor(newValue, forKey: KMPreference.markupColorRectangleBorderKey)
+            self._syncDataToUserDefault(newValue, forKey: KMPreference.markupColorRectangleBorderKey)
         }
     }
     var markupCircleFillColor: NSColor {
         get {
+            let pKey = KMPreference.markupColorCircleFillKey
+            let udKey = KMPreferenceKeyToUDKey(pKey: pKey) ?? ""
+            if let color = UserDefaults.standard.color(forKey: udKey) {
+                return color
+            }
             return self.getColor(forKey: KMPreference.markupColorCircleFillKey)
         }
         set {
             self.syncDataToPDFView(newValue, forKey: KMPreference.markupColorCircleFillKey)
             
             let _ = self.setColor(newValue, forKey: KMPreference.markupColorCircleFillKey)
+            self._syncDataToUserDefault(newValue, forKey: KMPreference.markupColorCircleFillKey)
         }
     }
     var markupCircleBorderColor: NSColor {
         get {
+            let pKey = KMPreference.markupColorCircleBorderKey
+            let udKey = KMPreferenceKeyToUDKey(pKey: pKey) ?? ""
+            if let color = UserDefaults.standard.color(forKey: udKey) {
+                return color
+            }
             return self.getColor(forKey: KMPreference.markupColorCircleBorderKey)
         }
         set {
             self.syncDataToPDFView(newValue, forKey: KMPreference.markupColorCircleBorderKey)
             
             let _ = self.setColor(newValue, forKey: KMPreference.markupColorCircleBorderKey)
+            self._syncDataToUserDefault(newValue, forKey: KMPreference.markupColorCircleBorderKey)
         }
     }
     var markupLineColor: NSColor {
         get {
+            let pKey = KMPreference.markupColorLineKey
+            let udKey = KMPreferenceKeyToUDKey(pKey: pKey) ?? ""
+            if let color = UserDefaults.standard.color(forKey: udKey) {
+                return color
+            }
             return self.getColor(forKey: KMPreference.markupColorLineKey)
         }
         set {
             self.syncDataToPDFView(newValue, forKey: KMPreference.markupColorLineKey)
             
             let _ = self.setColor(newValue, forKey: KMPreference.markupColorLineKey)
+            self._syncDataToUserDefault(newValue, forKey: KMPreference.markupColorLineKey)
         }
     }
     var markupArrowColor: NSColor {
         get {
+            let pKey = KMPreference.markupColorArrowKey
+            let udKey = KMPreferenceKeyToUDKey(pKey: pKey) ?? ""
+            if let color = UserDefaults.standard.color(forKey: udKey) {
+                return color
+            }
             return self.getColor(forKey: KMPreference.markupColorArrowKey)
         }
         set {
             self.syncDataToPDFView(newValue, forKey: KMPreference.markupColorArrowKey)
             
             let _ = self.setColor(newValue, forKey: KMPreference.markupColorArrowKey)
+            self._syncDataToUserDefault(newValue, forKey: KMPreference.markupColorArrowKey)
         }
     }
     
     var markupTextFontSize: Float {
         get {
-            return self.getData(forKey: KMPreference.markupTextFontSizeKey) as? Float ?? self.textFontSizeDefaultValue()
+            let pKey = KMPreference.markupTextFontSizeKey
+            let udKey = KMPreferenceKeyToUDKey(pKey: pKey) ?? ""
+            let num = KMDataManager.ud_object(forKey: udKey) as? NSNumber
+            return num?.floatValue ?? self.textFontSizeDefaultValue()
+//            return self.getData(forKey: pKey) as? Float ?? self.textFontSizeDefaultValue()
         }
         set {
-            self.syncDataToPDFView(newValue, forKey: KMPreference.markupTextFontSizeKey)
+            let pKey = KMPreference.markupTextFontSizeKey
+            self.syncDataToPDFView(newValue, forKey: pKey)
             
-            _ = self.setData(data: newValue, forKey: KMPreference.markupTextFontSizeKey)
+            _ = self.setData(data: newValue, forKey: pKey)
+            self._syncDataToUserDefault(NSNumber(value: newValue), forKey: pKey)
         }
     }
     
     var markupNoteFontSize: Float {
         get {
-            return self.getData(forKey: KMPreference.markupNoteFontSizeKey) as? Float ?? self.noteFontSizeDefaultValue()
+            let pKey = KMPreference.markupNoteFontSizeKey
+            let udKey = KMPreferenceKeyToUDKey(pKey: pKey) ?? ""
+            let num = KMDataManager.ud_object(forKey: udKey) as? NSNumber
+            return num?.floatValue ?? self.noteFontSizeDefaultValue()
+//            return self.getData(forKey: KMPreference.markupNoteFontSizeKey) as? Float ?? self.noteFontSizeDefaultValue()
         }
         set {
-            self.syncDataToPDFView(newValue, forKey: KMPreference.markupNoteFontSizeKey)
+            let pKey = KMPreference.markupNoteFontSizeKey
+            self.syncDataToPDFView(newValue, forKey: pKey)
             
-            _ = self.setData(data: newValue, forKey: KMPreference.markupNoteFontSizeKey)
+            _ = self.setData(data: newValue, forKey: pKey)
+            self._syncDataToUserDefault(NSNumber(value: newValue), forKey: pKey)
         }
     }
     
     var freeTextNoteLineWidth: Float {
         get {
-            return self.getData(forKey: KMPreference.freeTextNoteLineWidthKey) as? Float ?? self.freeTextNoteLineWidthDefaultValue()
+            let pKey = KMPreference.freeTextNoteLineWidthKey
+            let udKey = KMPreferenceKeyToUDKey(pKey: pKey) ?? ""
+            let num = KMDataManager.ud_object(forKey: udKey) as? NSNumber
+            return num?.floatValue ?? self.freeTextNoteLineWidthDefaultValue()
+//            return self.getData(forKey: KMPreference.freeTextNoteLineWidthKey) as? Float ?? self.freeTextNoteLineWidthDefaultValue()
         }
         set {
-            self.syncDataToPDFView(newValue, forKey: KMPreference.freeTextNoteLineWidthKey)
+            let pKey = KMPreference.freeTextNoteLineWidthKey
+            self.syncDataToPDFView(newValue, forKey: pKey)
             
-            _ = self.setData(data: newValue, forKey: KMPreference.freeTextNoteLineWidthKey)
+            _ = self.setData(data: newValue, forKey: pKey)
+            self._syncDataToUserDefault(NSNumber(value: newValue), forKey: pKey)
         }
     }
     
     var freeTextNoteLineStyle: Int {
         get {
-            return self.getData(forKey: KMPreference.freeTextNoteLineStyleKey) as? Int ?? self.freeTextNoteLineStyleDefaultValue()
+            let pKey = KMPreference.freeTextNoteLineStyleKey
+            let udKey = KMPreferenceKeyToUDKey(pKey: pKey) ?? ""
+            let num = KMDataManager.ud_object(forKey: udKey) as? NSNumber
+            return num?.intValue ?? self.freeTextNoteLineStyleDefaultValue()
+//            return self.getData(forKey: KMPreference.freeTextNoteLineStyleKey) as? Int ?? self.freeTextNoteLineStyleDefaultValue()
         }
         set {
-            self.syncDataToPDFView(newValue, forKey: KMPreference.freeTextNoteLineStyleKey)
+            let pKey = KMPreference.freeTextNoteLineStyleKey
+            self.syncDataToPDFView(newValue, forKey: pKey)
             
-            _ = self.setData(data: newValue, forKey: KMPreference.freeTextNoteLineStyleKey)
+            _ = self.setData(data: newValue, forKey: pKey)
+            self._syncDataToUserDefault(NSNumber(value: newValue), forKey: pKey)
         }
     }
     
     var freeTextNoteDashPattern: [CGFloat] {
         get {
-            return self.getData(forKey: KMPreference.freeTextNoteDashPatternKey) as? [CGFloat] ?? self.freeTextNoteDashPatternDefaultValue()
+            let pKey = KMPreference.freeTextNoteDashPatternKey
+            let udKey = KMPreferenceKeyToUDKey(pKey: pKey) ?? ""
+            return KMDataManager.ud_array(forKey: udKey) as? [CGFloat] ?? self.freeTextNoteDashPatternDefaultValue()
+//            return self.getData(forKey: KMPreference.freeTextNoteDashPatternKey) as? [CGFloat] ?? self.freeTextNoteDashPatternDefaultValue()
         }
         set {
-            self.syncDataToPDFView(newValue, forKey: KMPreference.freeTextNoteDashPatternKey)
+            let pKey = KMPreference.freeTextNoteDashPatternKey
+            self.syncDataToPDFView(newValue, forKey: pKey)
             
-            _ = self.setData(data: newValue, forKey: KMPreference.freeTextNoteDashPatternKey)
+            _ = self.setData(data: newValue, forKey: pKey)
+            self._syncDataToUserDefault(newValue, forKey: pKey)
         }
     }
     
     var circleNoteLineWidth: Float {
         get {
-            return self.getData(forKey: KMPreference.circleNoteLineWidthKey) as? Float ?? self.circleNoteLineWidthDefaultValue()
+            let pKey = KMPreference.circleNoteLineWidthKey
+            let udKey = KMPreferenceKeyToUDKey(pKey: pKey) ?? ""
+            let num = KMDataManager.ud_object(forKey: udKey) as? NSNumber
+            return num?.floatValue ?? self.circleNoteLineWidthDefaultValue()
+//            return self.getData(forKey: KMPreference.circleNoteLineWidthKey) as? Float ?? self.circleNoteLineWidthDefaultValue()
         }
         set {
-            self.syncDataToPDFView(newValue, forKey: KMPreference.circleNoteLineWidthKey)
+            let pKey = KMPreference.circleNoteLineWidthKey
+            self.syncDataToPDFView(newValue, forKey: pKey)
             
-            _ = self.setData(data: newValue, forKey: KMPreference.circleNoteLineWidthKey)
+            _ = self.setData(data: newValue, forKey: pKey)
+            self._syncDataToUserDefault(NSNumber(value: newValue), forKey: pKey)
         }
     }
     
     var circleNoteLineStyle: Int {
         get {
-            return self.getData(forKey: KMPreference.circleNoteLineStyleKey) as? Int ?? self.circleNoteLineStyleDefaultValue()
+            let pKey = KMPreference.circleNoteLineStyleKey
+            let udKey = KMPreferenceKeyToUDKey(pKey: pKey) ?? ""
+            let num = KMDataManager.ud_object(forKey: udKey) as? NSNumber
+            return num?.intValue ?? self.circleNoteLineStyleDefaultValue()
+//            return self.getData(forKey: KMPreference.circleNoteLineStyleKey) as? Int ?? self.circleNoteLineStyleDefaultValue()
         }
         set {
-            self.syncDataToPDFView(newValue, forKey: KMPreference.circleNoteLineStyleKey)
+            let pKey = KMPreference.circleNoteLineStyleKey
+            self.syncDataToPDFView(newValue, forKey: pKey)
             
-            _ = self.setData(data: newValue, forKey: KMPreference.circleNoteLineStyleKey)
+            _ = self.setData(data: newValue, forKey: pKey)
+            self._syncDataToUserDefault(NSNumber(value: newValue), forKey: pKey)
         }
     }
     
     var circleNoteDashPattern: [CGFloat] {
         get {
-            return self.getData(forKey: KMPreference.circleNoteDashPatternKey) as? [CGFloat] ?? self.circleNoteDashPatternDefaultValue()
+            let pKey = KMPreference.circleNoteDashPatternKey
+            let udKey = KMPreferenceKeyToUDKey(pKey: pKey) ?? ""
+            return KMDataManager.ud_array(forKey: udKey) as? [CGFloat] ?? self.circleNoteDashPatternDefaultValue()
+//            return self.getData(forKey: KMPreference.circleNoteDashPatternKey) as? [CGFloat] ?? self.circleNoteDashPatternDefaultValue()
         }
         set {
-            self.syncDataToPDFView(newValue, forKey: KMPreference.circleNoteDashPatternKey)
+            let pKey = KMPreference.circleNoteDashPatternKey
+            self.syncDataToPDFView(newValue, forKey: pKey)
             
-            _ = self.setData(data: newValue, forKey: KMPreference.circleNoteDashPatternKey)
+            _ = self.setData(data: newValue, forKey: pKey)
+            self._syncDataToUserDefault(newValue, forKey: pKey)
         }
     }
     
     var squareNoteLineWidth: Float {
         get {
-            return self.getData(forKey: KMPreference.squareNoteLineWidthKey) as? Float ?? self.squareNoteLineWidthDefaultValue()
+            let pKey = KMPreference.squareNoteLineWidthKey
+            let udKey = KMPreferenceKeyToUDKey(pKey: pKey) ?? ""
+            let num = KMDataManager.ud_object(forKey: udKey) as? NSNumber
+            return num?.floatValue ?? self.squareNoteLineWidthDefaultValue()
+//            return self.getData(forKey: KMPreference.squareNoteLineWidthKey) as? Float ?? self.squareNoteLineWidthDefaultValue()
         }
         set {
-            self.syncDataToPDFView(newValue, forKey: KMPreference.squareNoteLineWidthKey)
+            let pKey = KMPreference.squareNoteLineWidthKey
+            self.syncDataToPDFView(newValue, forKey: pKey)
             
-            _ = self.setData(data: newValue, forKey: KMPreference.squareNoteLineWidthKey)
+            _ = self.setData(data: newValue, forKey: pKey)
+            self._syncDataToUserDefault(NSNumber(value: newValue), forKey: pKey)
         }
     }
     
     var squareNoteLineStyle: Int {
         get {
-            return self.getData(forKey: KMPreference.squareNoteLineStyleKey) as? Int ?? self.squareNoteLineStyleDefaultValue()
+            let pKey = KMPreference.squareNoteLineStyleKey
+            let udKey = KMPreferenceKeyToUDKey(pKey: pKey) ?? ""
+            let num = KMDataManager.ud_object(forKey: udKey) as? NSNumber
+            return num?.intValue ?? self.squareNoteLineStyleDefaultValue()
+//            return self.getData(forKey: KMPreference.squareNoteLineStyleKey) as? Int ?? self.squareNoteLineStyleDefaultValue()
         }
         set {
-            self.syncDataToPDFView(newValue, forKey: KMPreference.squareNoteLineStyleKey)
+            let pKey = KMPreference.squareNoteLineStyleKey
+            self.syncDataToPDFView(newValue, forKey: pKey)
             
-            _ = self.setData(data: newValue, forKey: KMPreference.squareNoteLineStyleKey)
+            _ = self.setData(data: newValue, forKey: pKey)
+            self._syncDataToUserDefault(NSNumber(value: newValue), forKey: pKey)
         }
     }
     
     var squareNoteDashPattern: [CGFloat] {
         get {
-            return self.getData(forKey: KMPreference.squareNoteDashPatternKey) as? [CGFloat] ?? self.squareNoteDashPatternDefaultValue()
+            let pKey = KMPreference.squareNoteDashPatternKey
+            let udKey = KMPreferenceKeyToUDKey(pKey: pKey) ?? ""
+            return KMDataManager.ud_array(forKey: udKey) as? [CGFloat] ?? self.squareNoteDashPatternDefaultValue()
+//            return self.getData(forKey: KMPreference.squareNoteDashPatternKey) as? [CGFloat] ?? self.squareNoteDashPatternDefaultValue()
         }
         set {
-            self.syncDataToPDFView(newValue, forKey: KMPreference.squareNoteDashPatternKey)
+            let pKey = KMPreference.squareNoteDashPatternKey
+            self.syncDataToPDFView(newValue, forKey: pKey)
             
-            _ = self.setData(data: newValue, forKey: KMPreference.squareNoteDashPatternKey)
+            _ = self.setData(data: newValue, forKey: pKey)
+            self._syncDataToUserDefault(newValue, forKey: pKey)
         }
     }
     
     var lineNoteLineWidth: Float {
         get {
-            return self.getData(forKey: KMPreference.lineNoteLineWidthKey) as? Float ?? self.lineNoteLineWidthDefaultValue()
+            let pKey = KMPreference.lineNoteLineWidthKey
+            let udKey = KMPreferenceKeyToUDKey(pKey: pKey) ?? ""
+            let num = KMDataManager.ud_object(forKey: udKey) as? NSNumber
+            return num?.floatValue ?? self.lineNoteLineWidthDefaultValue()
+//            return self.getData(forKey: KMPreference.lineNoteLineWidthKey) as? Float ?? self.lineNoteLineWidthDefaultValue()
         }
         set {
-            self.syncDataToPDFView(newValue, forKey: KMPreference.lineNoteLineWidthKey)
+            let pKey = KMPreference.lineNoteLineWidthKey
+            self.syncDataToPDFView(newValue, forKey: pKey)
             
-            _ = self.setData(data: newValue, forKey: KMPreference.lineNoteLineWidthKey)
+            _ = self.setData(data: newValue, forKey: pKey)
+            self._syncDataToUserDefault(NSNumber(value: newValue), forKey: pKey)
         }
     }
     
     var lineNoteLineStyle: Int {
         get {
-            return self.getData(forKey: KMPreference.lineNoteLineStyleKey) as? Int ?? self.lineNoteLineStyleDefaultValue()
+            let pKey = KMPreference.lineNoteLineStyleKey
+            let udKey = KMPreferenceKeyToUDKey(pKey: pKey) ?? ""
+            let num = KMDataManager.ud_object(forKey: udKey) as? NSNumber
+            return num?.intValue ?? self.lineNoteLineStyleDefaultValue()
+//            return self.getData(forKey: KMPreference.lineNoteLineStyleKey) as? Int ?? self.lineNoteLineStyleDefaultValue()
         }
         set {
-            self.syncDataToPDFView(newValue, forKey: KMPreference.lineNoteLineStyleKey)
+            let pKey = KMPreference.lineNoteLineStyleKey
+            self.syncDataToPDFView(newValue, forKey: pKey)
             
-            _ = self.setData(data: newValue, forKey: KMPreference.lineNoteLineStyleKey)
+            _ = self.setData(data: newValue, forKey: pKey)
+            self._syncDataToUserDefault(NSNumber(value: newValue), forKey: pKey)
         }
     }
     
     var lineNoteDashPattern: [CGFloat] {
         get {
-            return self.getData(forKey: KMPreference.lineNoteDashPatternKey) as? [CGFloat] ?? self.lineNoteDashPatternDefaultValue()
+            let pKey = KMPreference.lineNoteDashPatternKey
+            let udKey = KMPreferenceKeyToUDKey(pKey: pKey) ?? ""
+            return KMDataManager.ud_array(forKey: udKey) as? [CGFloat] ?? self.lineNoteDashPatternDefaultValue()
+//            return self.getData(forKey: KMPreference.lineNoteDashPatternKey) as? [CGFloat] ?? self.lineNoteDashPatternDefaultValue()
         }
         set {
-            self.syncDataToPDFView(newValue, forKey: KMPreference.lineNoteDashPatternKey)
+            let pKey = KMPreference.lineNoteDashPatternKey
+            self.syncDataToPDFView(newValue, forKey: pKey)
             
-            _ = self.setData(data: newValue, forKey: KMPreference.lineNoteDashPatternKey)
+            _ = self.setData(data: newValue, forKey: pKey)
+            self._syncDataToUserDefault(newValue, forKey: pKey)
         }
     }
     
     var lineNoteStartLineStyle: Int {
         get {
-            return self.getData(forKey: KMPreference.lineNoteStartLineStyleKey) as? Int ?? self.lineNoteStartLineStyleDefaultValue()
+            let pKey = KMPreference.lineNoteStartLineStyleKey
+            let udKey = KMPreferenceKeyToUDKey(pKey: pKey) ?? ""
+            let num = KMDataManager.ud_object(forKey: udKey) as? NSNumber
+            return num?.intValue ?? self.lineNoteStartLineStyleDefaultValue()
+//            return self.getData(forKey: KMPreference.lineNoteStartLineStyleKey) as? Int ?? self.lineNoteStartLineStyleDefaultValue()
         }
         set {
-            self.syncDataToPDFView(newValue, forKey: KMPreference.lineNoteStartLineStyleKey)
+            let pKey = KMPreference.lineNoteStartLineStyleKey
+            self.syncDataToPDFView(newValue, forKey: pKey)
             
-            _ = self.setData(data: newValue, forKey: KMPreference.lineNoteStartLineStyleKey)
+            _ = self.setData(data: newValue, forKey: pKey)
+            self._syncDataToUserDefault(NSNumber(value: newValue), forKey: pKey)
         }
     }
     
     var lineNoteEndLineStyle: Int {
         get {
-            return self.getData(forKey: KMPreference.lineNoteEndLineStyleKey) as? Int ?? self.lineNoteEndLineStyleDefaultValue()
+            let pKey = KMPreference.lineNoteEndLineStyleKey
+            let udKey = KMPreferenceKeyToUDKey(pKey: pKey) ?? ""
+            let num = KMDataManager.ud_object(forKey: udKey) as? NSNumber
+            return num?.intValue ?? self.lineNoteEndLineStyleDefaultValue()
+//            return self.getData(forKey: KMPreference.lineNoteEndLineStyleKey) as? Int ?? self.lineNoteEndLineStyleDefaultValue()
         }
         set {
-            self.syncDataToPDFView(newValue, forKey: KMPreference.lineNoteEndLineStyleKey)
+            let pKey = KMPreference.lineNoteEndLineStyleKey
+            self.syncDataToPDFView(newValue, forKey: pKey)
             
-            _ = self.setData(data: newValue, forKey: KMPreference.lineNoteEndLineStyleKey)
+            _ = self.setData(data: newValue, forKey: pKey)
+            self._syncDataToUserDefault(NSNumber(value: newValue), forKey: pKey)
         }
     }
     
     var inkNoteLineWidth: Float {
         get {
-            return self.getData(forKey: KMPreference.inkNoteLineWidthKey) as? Float ?? self.inkNoteLineWidthDefaultValue()
+            let pKey = KMPreference.inkNoteLineWidthKey
+            let udKey = KMPreferenceKeyToUDKey(pKey: pKey) ?? ""
+            let num = KMDataManager.ud_object(forKey: udKey) as? NSNumber
+            return num?.floatValue ?? self.inkNoteLineWidthDefaultValue()
+//            return self.getData(forKey: KMPreference.inkNoteLineWidthKey) as? Float ?? self.inkNoteLineWidthDefaultValue()
         }
         set {
-            self.syncDataToPDFView(newValue, forKey: KMPreference.inkNoteLineWidthKey)
+            let pKey = KMPreference.inkNoteLineWidthKey
+            self.syncDataToPDFView(newValue, forKey: pKey)
             
-            _ = self.setData(data: newValue, forKey: KMPreference.inkNoteLineWidthKey)
+            _ = self.setData(data: newValue, forKey: pKey)
+            self._syncDataToUserDefault(NSNumber(value: newValue), forKey: pKey)
         }
     }
     
     var inkNoteLineStyle: Int {
         get {
-            return self.getData(forKey: KMPreference.inkNoteLineStyleKey) as? Int ?? self.inkNoteLineStyleDefaultValue()
+            let pKey = KMPreference.inkNoteLineStyleKey
+            let udKey = KMPreferenceKeyToUDKey(pKey: pKey) ?? ""
+            let num = KMDataManager.ud_object(forKey: udKey) as? NSNumber
+            return num?.intValue ?? self.inkNoteLineStyleDefaultValue()
+//            return self.getData(forKey: KMPreference.inkNoteLineStyleKey) as? Int ?? self.inkNoteLineStyleDefaultValue()
         }
         set {
-            self.syncDataToPDFView(newValue, forKey: KMPreference.inkNoteLineStyleKey)
+            let pKey = KMPreference.inkNoteLineStyleKey
+            self.syncDataToPDFView(newValue, forKey: pKey)
             
-            _ = self.setData(data: newValue, forKey: KMPreference.inkNoteLineStyleKey)
+            _ = self.setData(data: newValue, forKey: pKey)
+            self._syncDataToUserDefault(NSNumber(value: newValue), forKey: pKey)
         }
     }
     
     var inkNoteDashPattern: [CGFloat] {
         get {
-            return self.getData(forKey: KMPreference.inkNoteDashPatternKey) as? [CGFloat] ?? self.inkNoteDashPatternDefaultValue()
+            let pKey = KMPreference.inkNoteDashPatternKey
+            let udKey = KMPreferenceKeyToUDKey(pKey: pKey) ?? ""
+            return KMDataManager.ud_array(forKey: udKey) as? [CGFloat] ?? self.inkNoteDashPatternDefaultValue()
+//            return self.getData(forKey: KMPreference.inkNoteDashPatternKey) as? [CGFloat] ?? self.inkNoteDashPatternDefaultValue()
         }
         set {
-            self.syncDataToPDFView(newValue, forKey: KMPreference.inkNoteDashPatternKey)
+            let pKey = KMPreference.inkNoteDashPatternKey
+            self.syncDataToPDFView(newValue, forKey: pKey)
             
-            _ = self.setData(data: newValue, forKey: KMPreference.inkNoteDashPatternKey)
+            _ = self.setData(data: newValue, forKey: pKey)
+            self._syncDataToUserDefault(newValue, forKey: pKey)
         }
     }
 }

+ 115 - 0
PDF Office/PDF Master/Info.plist

@@ -336,5 +336,120 @@
 		<string>Ubuntu-Bold.ttf</string>
 		<string>Ubuntu-Medium.ttf</string>
 	</array>
+	<key>NSServices</key>
+	<array>
+		<dict>
+			<key>NSMenuItem</key>
+			<dict>
+				<key>default</key>
+				<string>Open File in PDF Reader Pro Edition</string>
+			</dict>
+			<key>NSMessage</key>
+			<string>openDocumentFromURLOnPboard</string>
+			<key>NSPortName</key>
+			<string>PDF Reader Pro Edition</string>
+			<key>NSRequiredContext</key>
+			<dict>
+				<key>NSTextContent</key>
+				<string>FilePath</string>
+			</dict>
+			<key>NSSendFileTypes</key>
+			<array>
+				<string>com.adobe.pdf</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.pdfd</string>
+				<string>net.sourceforge.skim-app.skimnotes</string>
+			</array>
+			<key>NSSendTypes</key>
+			<array>
+				<string>public.url</string>
+				<string>public.file-url</string>
+				<string>public.plain-text</string>
+			</array>
+		</dict>
+		<dict>
+			<key>NSMenuItem</key>
+			<dict>
+				<key>default</key>
+				<string>Open URL in PDF Reader Pro Edition</string>
+			</dict>
+			<key>NSMessage</key>
+			<string>openDocumentFromURLOnPboard</string>
+			<key>NSPortName</key>
+			<string>PDF Reader Pro Edition</string>
+			<key>NSRequiredContext</key>
+			<dict>
+				<key>NSTextContent</key>
+				<string>URL</string>
+			</dict>
+			<key>NSSendFileTypes</key>
+			<array>
+				<string>com.adobe.pdf</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.pdfd</string>
+				<string>net.sourceforge.skim-app.skimnotes</string>
+			</array>
+			<key>NSSendTypes</key>
+			<array>
+				<string>public.url</string>
+				<string>public.plain-text</string>
+			</array>
+		</dict>
+		<dict>
+			<key>NSMenuItem</key>
+			<dict>
+				<key>default</key>
+				<string>Open Selected PDF</string>
+			</dict>
+			<key>NSMessage</key>
+			<string>openDocumentFromDataOnPboard</string>
+			<key>NSPortName</key>
+			<string>PDF Reader Pro Edition</string>
+			<key>NSSendTypes</key>
+			<array>
+				<string>com.adobe.pdf</string>
+				<string>com.adobe.encapsulated-postscript</string>
+				<string>public.tiff</string>
+			</array>
+		</dict>
+		<dict>
+			<key>NSMenuItem</key>
+			<dict>
+				<key>default</key>
+				<string>Show PDF Reader Pro Edition Notes</string>
+			</dict>
+			<key>NSMessage</key>
+			<string>openNotesDocumentFromURLOnPboard</string>
+			<key>NSPortName</key>
+			<string>PDF Reader Pro Edition</string>
+			<key>NSRequiredContext</key>
+			<dict>
+				<key>NSTextContent</key>
+				<string>FilePath</string>
+			</dict>
+			<key>NSSendFileTypes</key>
+			<array>
+				<string>com.adobe.pdf</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.pdfd</string>
+				<string>net.sourceforge.skim-app.skimnotes</string>
+			</array>
+			<key>NSSendTypes</key>
+			<array>
+				<string>public.url</string>
+				<string>public.file-url</string>
+				<string>public.plain-text</string>
+			</array>
+		</dict>
+	</array>
 </dict>
 </plist>

+ 8 - 0
PDF Office/PDF Reader Pro.xcodeproj/project.pbxproj

@@ -1555,6 +1555,9 @@
 		AD3AAD932B1034C000DE5FE7 /* KMHeaderFooterView.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD3AAD922B1034C000DE5FE7 /* KMHeaderFooterView.xib */; };
 		AD3AAD942B1034C000DE5FE7 /* KMHeaderFooterView.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD3AAD922B1034C000DE5FE7 /* KMHeaderFooterView.xib */; };
 		AD3AAD952B1034C000DE5FE7 /* KMHeaderFooterView.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD3AAD922B1034C000DE5FE7 /* KMHeaderFooterView.xib */; };
+		AD4C71712B9ADFE0003A6286 /* NSError_Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD4C71702B9ADFE0003A6286 /* NSError_Extensions.swift */; };
+		AD4C71722B9ADFE0003A6286 /* NSError_Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD4C71702B9ADFE0003A6286 /* NSError_Extensions.swift */; };
+		AD4C71732B9ADFE0003A6286 /* NSError_Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD4C71702B9ADFE0003A6286 /* NSError_Extensions.swift */; };
 		AD53B6FE29AC5FCD00D61E81 /* KMLightMemberToken.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD53B6FD29AC5FCD00D61E81 /* KMLightMemberToken.swift */; };
 		AD53B6FF29AC5FCD00D61E81 /* KMLightMemberToken.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD53B6FD29AC5FCD00D61E81 /* KMLightMemberToken.swift */; };
 		AD53B70029AC5FCD00D61E81 /* KMLightMemberToken.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD53B6FD29AC5FCD00D61E81 /* KMLightMemberToken.swift */; };
@@ -5789,6 +5792,7 @@
 		AD3AAD872B10349600DE5FE7 /* KMHeaderFooterWindowController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMHeaderFooterWindowController.xib; sourceTree = "<group>"; };
 		AD3AAD8E2B1034B400DE5FE7 /* KMHeaderFooterView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMHeaderFooterView.swift; sourceTree = "<group>"; };
 		AD3AAD922B1034C000DE5FE7 /* KMHeaderFooterView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMHeaderFooterView.xib; sourceTree = "<group>"; };
+		AD4C71702B9ADFE0003A6286 /* NSError_Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSError_Extensions.swift; sourceTree = "<group>"; };
 		AD53B6FD29AC5FCD00D61E81 /* KMLightMemberToken.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMLightMemberToken.swift; sourceTree = "<group>"; };
 		AD58F4042B14954B00299EE0 /* KMCompareTextHeaderView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMCompareTextHeaderView.xib; sourceTree = "<group>"; };
 		AD58F40D2B1DAAA700299EE0 /* KMPrintDefaultView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPrintDefaultView.swift; sourceTree = "<group>"; };
@@ -10660,6 +10664,7 @@
 				BB03D6972B0221FF008C9976 /* NSImage+KMExtension.swift */,
 				9FE0BBEA2B0F242C00CD1CAC /* NSUserDefaults_KMExtension.swift */,
 				9FB2210D2B1AE35E00A5B208 /* NSBitmapImageRep_KMExtension.swift */,
+				AD4C71702B9ADFE0003A6286 /* NSError_Extensions.swift */,
 			);
 			path = Category;
 			sourceTree = "<group>";
@@ -16125,6 +16130,7 @@
 				BB5726F02B20707D0089D283 /* CPDFMarkupAnnotation+PDFListView.swift in Sources */,
 				ADE8BC3E29F9458700570F89 /* KMRecommondInfo.m in Sources */,
 				AD9527C6295295110039D2BC /* KMPrintPrinterModel.swift in Sources */,
+				AD4C71712B9ADFE0003A6286 /* NSError_Extensions.swift in Sources */,
 				BB146FE4299DC0D100784A6A /* GTLRURITemplate.m in Sources */,
 				9F1FE50D29407B2B00E952CA /* KMUploadFilePanel.swift in Sources */,
 				9F0201862A1DA28B00C9B673 /* KMAILanguagePopVC.swift in Sources */,
@@ -16592,6 +16598,7 @@
 				ADD1B6AC2941E97F00C3FFF7 /* KMPrintWindowController.swift in Sources */,
 				9FDD0FAF29534FDC000C4DAD /* KMCompLight.swift in Sources */,
 				BB8810922B4F7C4100AFA63E /* KMVerificationExpiredViewController.m in Sources */,
+				AD4C71722B9ADFE0003A6286 /* NSError_Extensions.swift in Sources */,
 				AD1CA4122A061CCD0070541F /* KMAnnotationScreenColorViewItem.swift in Sources */,
 				BB2A98532B270B3300647AF3 /* KMBatchAddBackgroundOperation.swift in Sources */,
 				AD867FC229DFC39400F00440 /* KMBOTAAnnotationItem.swift in Sources */,
@@ -18289,6 +18296,7 @@
 				AD68782329A5FADC005B5210 /* KMLightMemberCache.swift in Sources */,
 				AD7D5C832B8ECD09006562CD /* KMPDFSynchronizer.swift in Sources */,
 				BB8F4584295B0F900037EA22 /* KMHeaderFooterMarginInfoView.swift in Sources */,
+				AD4C71732B9ADFE0003A6286 /* NSError_Extensions.swift in Sources */,
 				BB49ED17293F489500C82CA2 /* KMConvertImageSettingView.swift in Sources */,
 				899700EA28F3E4D3009AF911 /* MainWindowController.swift in Sources */,
 				BBD1F79A296FF78C00343885 /* KMPageEditSettingBaseModel.swift in Sources */,

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

@@ -611,5 +611,53 @@
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "44337E05-94FF-4B8A-8AB7-5A77E6B1BE81"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Master/Class/Common/Category/NSUserDefaults_KMExtension.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "53"
+            endingLineNumber = "53"
+            landmarkName = "setColor(_:forKey:)"
+            landmarkType = "7">
+            <Locations>
+               <Location
+                  uuid = "44337E05-94FF-4B8A-8AB7-5A77E6B1BE81 - a4a36b403e095cbc"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "__C.NSUserDefaults.setColor(_: __C.NSColor, forKey: Swift.String) -&gt; ()"
+                  moduleName = "PDF Reader Pro"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Users/kdanmobile/work/tangchao/git/PDFOffice/PDF%20Office/PDF%20Master/Class/Common/Category/NSUserDefaults_KMExtension.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "53"
+                  endingLineNumber = "53"
+                  offsetFromSymbolStart = "121">
+               </Location>
+               <Location
+                  uuid = "44337E05-94FF-4B8A-8AB7-5A77E6B1BE81 - a4a36b403e095cbc"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "__C.NSUserDefaults.setColor(_: __C.NSColor, forKey: Swift.String) -&gt; ()"
+                  moduleName = "PDF Reader Pro"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Users/kdanmobile/work/tangchao/git/PDFOffice/PDF%20Office/PDF%20Master/Class/Common/Category/NSUserDefaults_KMExtension.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "53"
+                  endingLineNumber = "53"
+                  offsetFromSymbolStart = "181">
+               </Location>
+            </Locations>
+         </BreakpointContent>
+      </BreakpointProxy>
    </Breakpoints>
 </Bucket>

+ 115 - 0
PDF Office/PDF-Reader-Pro-DMG-Info.plist

@@ -332,5 +332,120 @@
 		<string>Ubuntu-Bold.ttf</string>
 		<string>Ubuntu-Medium.ttf</string>
 	</array>
+	<key>NSServices</key>
+	<array>
+		<dict>
+			<key>NSMenuItem</key>
+			<dict>
+				<key>default</key>
+				<string>Open File in PDF Reader Pro Edition</string>
+			</dict>
+			<key>NSMessage</key>
+			<string>openDocumentFromURLOnPboard</string>
+			<key>NSPortName</key>
+			<string>PDF Reader Pro Edition</string>
+			<key>NSRequiredContext</key>
+			<dict>
+				<key>NSTextContent</key>
+				<string>FilePath</string>
+			</dict>
+			<key>NSSendFileTypes</key>
+			<array>
+				<string>com.adobe.pdf</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.pdfd</string>
+				<string>net.sourceforge.skim-app.skimnotes</string>
+			</array>
+			<key>NSSendTypes</key>
+			<array>
+				<string>public.url</string>
+				<string>public.file-url</string>
+				<string>public.plain-text</string>
+			</array>
+		</dict>
+		<dict>
+			<key>NSMenuItem</key>
+			<dict>
+				<key>default</key>
+				<string>Open URL in PDF Reader Pro Edition</string>
+			</dict>
+			<key>NSMessage</key>
+			<string>openDocumentFromURLOnPboard</string>
+			<key>NSPortName</key>
+			<string>PDF Reader Pro Edition</string>
+			<key>NSRequiredContext</key>
+			<dict>
+				<key>NSTextContent</key>
+				<string>URL</string>
+			</dict>
+			<key>NSSendFileTypes</key>
+			<array>
+				<string>com.adobe.pdf</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.pdfd</string>
+				<string>net.sourceforge.skim-app.skimnotes</string>
+			</array>
+			<key>NSSendTypes</key>
+			<array>
+				<string>public.url</string>
+				<string>public.plain-text</string>
+			</array>
+		</dict>
+		<dict>
+			<key>NSMenuItem</key>
+			<dict>
+				<key>default</key>
+				<string>Open Selected PDF</string>
+			</dict>
+			<key>NSMessage</key>
+			<string>openDocumentFromDataOnPboard</string>
+			<key>NSPortName</key>
+			<string>PDF Reader Pro Edition</string>
+			<key>NSSendTypes</key>
+			<array>
+				<string>com.adobe.pdf</string>
+				<string>com.adobe.encapsulated-postscript</string>
+				<string>public.tiff</string>
+			</array>
+		</dict>
+		<dict>
+			<key>NSMenuItem</key>
+			<dict>
+				<key>default</key>
+				<string>Show PDF Reader Pro Edition Notes</string>
+			</dict>
+			<key>NSMessage</key>
+			<string>openNotesDocumentFromURLOnPboard</string>
+			<key>NSPortName</key>
+			<string>PDF Reader Pro Edition</string>
+			<key>NSRequiredContext</key>
+			<dict>
+				<key>NSTextContent</key>
+				<string>FilePath</string>
+			</dict>
+			<key>NSSendFileTypes</key>
+			<array>
+				<string>com.adobe.pdf</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.pdfd</string>
+				<string>net.sourceforge.skim-app.skimnotes</string>
+			</array>
+			<key>NSSendTypes</key>
+			<array>
+				<string>public.url</string>
+				<string>public.file-url</string>
+				<string>public.plain-text</string>
+			</array>
+		</dict>
+	</array>
 </dict>
 </plist>

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

@@ -322,5 +322,120 @@
 		<string>Ubuntu-Medium.ttf</string>
 		<string>Ubuntu-Bold.ttf</string>
 	</array>
+	<key>NSServices</key>
+	<array>
+		<dict>
+			<key>NSMenuItem</key>
+			<dict>
+				<key>default</key>
+				<string>Open File in PDF Reader Pro Edition</string>
+			</dict>
+			<key>NSMessage</key>
+			<string>openDocumentFromURLOnPboard</string>
+			<key>NSPortName</key>
+			<string>PDF Reader Pro Edition</string>
+			<key>NSRequiredContext</key>
+			<dict>
+				<key>NSTextContent</key>
+				<string>FilePath</string>
+			</dict>
+			<key>NSSendFileTypes</key>
+			<array>
+				<string>com.adobe.pdf</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.pdfd</string>
+				<string>net.sourceforge.skim-app.skimnotes</string>
+			</array>
+			<key>NSSendTypes</key>
+			<array>
+				<string>public.url</string>
+				<string>public.file-url</string>
+				<string>public.plain-text</string>
+			</array>
+		</dict>
+		<dict>
+			<key>NSMenuItem</key>
+			<dict>
+				<key>default</key>
+				<string>Open URL in PDF Reader Pro Edition</string>
+			</dict>
+			<key>NSMessage</key>
+			<string>openDocumentFromURLOnPboard</string>
+			<key>NSPortName</key>
+			<string>PDF Reader Pro Edition</string>
+			<key>NSRequiredContext</key>
+			<dict>
+				<key>NSTextContent</key>
+				<string>URL</string>
+			</dict>
+			<key>NSSendFileTypes</key>
+			<array>
+				<string>com.adobe.pdf</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.pdfd</string>
+				<string>net.sourceforge.skim-app.skimnotes</string>
+			</array>
+			<key>NSSendTypes</key>
+			<array>
+				<string>public.url</string>
+				<string>public.plain-text</string>
+			</array>
+		</dict>
+		<dict>
+			<key>NSMenuItem</key>
+			<dict>
+				<key>default</key>
+				<string>Open Selected PDF</string>
+			</dict>
+			<key>NSMessage</key>
+			<string>openDocumentFromDataOnPboard</string>
+			<key>NSPortName</key>
+			<string>PDF Reader Pro Edition</string>
+			<key>NSSendTypes</key>
+			<array>
+				<string>com.adobe.pdf</string>
+				<string>com.adobe.encapsulated-postscript</string>
+				<string>public.tiff</string>
+			</array>
+		</dict>
+		<dict>
+			<key>NSMenuItem</key>
+			<dict>
+				<key>default</key>
+				<string>Show PDF Reader Pro Edition Notes</string>
+			</dict>
+			<key>NSMessage</key>
+			<string>openNotesDocumentFromURLOnPboard</string>
+			<key>NSPortName</key>
+			<string>PDF Reader Pro Edition</string>
+			<key>NSRequiredContext</key>
+			<dict>
+				<key>NSTextContent</key>
+				<string>FilePath</string>
+			</dict>
+			<key>NSSendFileTypes</key>
+			<array>
+				<string>com.adobe.pdf</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.pdfd</string>
+				<string>net.sourceforge.skim-app.skimnotes</string>
+			</array>
+			<key>NSSendTypes</key>
+			<array>
+				<string>public.url</string>
+				<string>public.file-url</string>
+				<string>public.plain-text</string>
+			</array>
+		</dict>
+	</array>
 </dict>
 </plist>