Przeglądaj źródła

【2025】【Edit 】
1、网页创建PDF完善
2、图片编辑完善

niehaoyu 3 dni temu
rodzic
commit
c7ca7a5a0e

+ 5 - 8
PDF Office/PDF Master/Class/PDFWindowController/PDFListView/CPDFListViewExtension/CPDFListView+Edit.swift

@@ -219,22 +219,17 @@ extension CPDFListView {
     
     func fontBoldAction() {
         let areas = self.km_editingTextAreas()
-        var needTip = false
         for area in areas {
             let data = self.isBoldCurrentSelection(byRangeEdit: area)
-            let result = self.setCurrentSelectionIsBold(!data, with: area)
+            _ = self.setCurrentSelectionIsBold(!data, with: area)
         }
     }
     
     func fontItalicAction() {
         let areas = self.km_editingTextAreas()
-        var needTip = false
         for area in areas {
             let data = self.isItalicCurrentSelection(byRangeEdit: area)
-            let result = self.setCurrentSelectionIsItalic(!data, with: area)
-            if (result == nil || result == false) && needTip == false {
-                needTip = true
-            }
+            _ = self.setCurrentSelectionIsItalic(!data, with: area)
         }
     }
     
@@ -417,7 +412,9 @@ extension CPDFListView {
             self.cropCancelAction()
             return
         }
-        self.cropEditImageArea(selectImageAreas.first, withBounds: self.cropAreas.cropRect ?? .zero)
+        if let cropArea = self.cropAreas {
+            self.cropEditImageArea(selectImageAreas.first, withBounds: cropArea.cropRect)
+        }
         self.cropCancelAction()
     }
 }

+ 14 - 6
PDF Office/PDF Master/KMClass/KMHomeViewController/KMURLCreatePDFWindowController/KMURLCreatePDFWindowController.swift

@@ -77,13 +77,13 @@ class KMURLCreatePDFWindowController: NSWindowController {
         
         urlRadio.properties = ComponentCheckBoxProperty(size: .s,
                                                         state: .normal,
-                                                        text: NSLocalizedString("URL", comment: ""),
+                                                        text: KMLocalizedString("URL"),
                                                         checkboxType: .normal)
         urlRadio.setTarget(self, action: #selector(typeRadioChanged(_:)))
         
         fileRadio.properties = ComponentCheckBoxProperty(size: .s,
                                                          state: .normal,
-                                                         text: NSLocalizedString("File", comment: ""),
+                                                         text: KMLocalizedString("File"),
                                                          checkboxType: .normal)
         fileRadio.setTarget(self, action: #selector(typeRadioChanged(_:)))
         
@@ -91,14 +91,14 @@ class KMURLCreatePDFWindowController: NSWindowController {
                                                       state: .normal,
                                                       isError: false,
                                                       isDisabled: false,
-                                                      placeholder: NSLocalizedString("https://pdfreaderpro.com", comment: ""))
+                                                      placeholder: KMLocalizedString("https://pdfreaderpro.com"))
         inputView.delegate = self
         
         fileInputView.properties = ComponentInputProperty(size: .s,
                                                           state: .normal,
                                                           isError: false,
                                                           isDisabled: false,
-                                                          placeholder: NSLocalizedString("Select File...", comment: ""),
+                                                          placeholder: KMLocalizedString("Select File..."),
                                                           creatable: false)
         fileInputView.properties.propertyInfo.cornerRadius_topRight = 0
         fileInputView.properties.propertyInfo.cornerRadius_bottomRight = 0
@@ -115,13 +115,15 @@ class KMURLCreatePDFWindowController: NSWindowController {
         cancelButton.properties = ComponentButtonProperty(type: .default_tertiary,
                                                           size: .s,
                                                           state: .normal,
-                                                          buttonText: NSLocalizedString("Cancel", comment: ""))
+                                                          buttonText: KMLocalizedString("Cancel"),
+                                                          keepPressState: false)
         cancelButton.setTarget(self, action: #selector(cancelButtonClicked(_ :)))
         
         openButton.properties = ComponentButtonProperty(type: .primary,
                                                         size: .s,
                                                         state: .normal,
-                                                        buttonText: NSLocalizedString("Open", comment: ""))
+                                                        buttonText: KMLocalizedString("Open"),
+                                                        keepPressState: false)
         openButton.setTarget(self, action: #selector(openButtonClicked(_ :)))
         
     }
@@ -243,6 +245,9 @@ class KMURLCreatePDFWindowController: NSWindowController {
         }
         
         if let url = url {
+            inputView.properties.text = url.absoluteString
+            inputView.reloadData()
+            
             showWaitting()
             
             let outPutPath = kUrlToPDFFolderPath
@@ -265,6 +270,9 @@ class KMURLCreatePDFWindowController: NSWindowController {
                             let alert = NSAlert()
                             alert.alertStyle = .critical
                             alert.messageText = NSLocalizedString("Conversion Failed", comment: "")
+                            if let description = error?.localizedDescription {
+                                alert.messageText = description
+                            }
                             alert.beginSheetModal(for: window) { [weak self] result in
                                 
                             }

+ 20 - 10
PDF Office/PDF Master/KMClass/KMHomeViewController/KMURLCreatePDFWindowController/KMURLToPDF.swift

@@ -12,13 +12,13 @@ import PDFKit
 class KMURLToPDF: NSObject, WKNavigationDelegate {
     
     @objc public static let shareInstance = KMURLToPDF()
-     
+    
     var webView: WKWebView!
     var completion: ((URL?, Error?) -> Void)?
     
     var savePath: String = ""
     var saveName: String = ""
-
+    
     func convertHtmlFileToPDF(fromPath: String, toPath: String, completion: @escaping (URL?, Error?) -> Void) {
         
         self.completion = completion
@@ -32,7 +32,7 @@ class KMURLToPDF: NSObject, WKNavigationDelegate {
         webView.loadFileURL(fileURL, allowingReadAccessTo: readAccessURL)
         
         saveName = fromPath.deletingPathExtension.lastPathComponent + ".pdf"
-
+        
     }
     
     func convertLinkString(string: String, toPath: String, completion: @escaping (URL?, Error?) -> Void) {
@@ -51,7 +51,7 @@ class KMURLToPDF: NSObject, WKNavigationDelegate {
     func stopLoading() {
         webView?.stopLoading()
     }
-     
+    
     
     //MARK: - WKNavigationDelegate
     func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
@@ -74,18 +74,14 @@ class KMURLToPDF: NSObject, WKNavigationDelegate {
                     if let height = height as? CGFloat {
                         contentHeight = height
                     }
-                    
                     if contentWidth > 0 && contentHeight > 0 {
-                        
                         configuration.rect = CGRectMake(0, 0, contentWidth, contentHeight)
-                        
                         webView.createPDF(configuration: configuration) { result in
                             switch result {
                             case .success(let pdfData):
                                 // PDF successfully created, handle the PDF data
                                 
                                 let filePath = URL(fileURLWithPath: self.savePath.stringByAppendingPathComponent(self.saveName))
-
                                 if FileManager.default.fileExists(atPath: filePath.path) {
                                     try?FileManager.default.removeItem(atPath: filePath.path)
                                 }
@@ -103,7 +99,6 @@ class KMURLToPDF: NSObject, WKNavigationDelegate {
                                 callBack(filePath, nil)
                                 
                             case .failure(let error):
-                                
                                 guard let callBack = self.completion else {
                                     return
                                 }
@@ -119,9 +114,24 @@ class KMURLToPDF: NSObject, WKNavigationDelegate {
                 }
             }
         }
+    }
+    
+    func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {
+        webView.stopLoading()
         
+        guard let callBack = self.completion else {
+            return
+        }
+        callBack(nil, error)
+    }
+    
+    func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {
+        webView.stopLoading()
         
+        guard let callBack = self.completion else {
+            return
+        }
+        callBack(nil, error)
         
     }
-     
 }

+ 43 - 17
PDF Office/PDF Master/KMClass/KMPDFViewController/KMMainViewController.swift

@@ -1975,6 +1975,7 @@ extension KMMainViewController: CPDFViewDelegate,CPDFListViewDelegate {
         return NSImage(named: "KMImageNameBookmarkIcon")!
     }
     
+    //MARK: -编辑模块
     func pdfViewEditingSelectionDidChanged(_ pdfView: CPDFView!) {
         // 文本区块 选中文本已经变化
         self.editPDFHanddler?.pdfViewEditingSelectionDidChanged(pdfView)
@@ -1990,7 +1991,9 @@ extension KMMainViewController: CPDFViewDelegate,CPDFListViewDelegate {
     }
     
     func pdfViewEditingCropBoundsDidChanged(_ pdfView: CPDFView!, editing editArea: CPDFEditArea!) {
-
+        if editArea != nil && (editArea is CPDFEditImageArea){
+            self.listView.cropAreas = editArea as? CPDFEditImageArea
+        }
     }
     
     //编辑PDF 创建图片区域回调
@@ -2003,23 +2006,41 @@ extension KMMainViewController: CPDFViewDelegate,CPDFListViewDelegate {
     }
     
     func pdfViewMobileEditingBegan(_ point: CGPoint, for pdfView: CPDFView!, forEditing editingAreas: [CPDFEditArea]!) {
-
+        rightSideController?.reloadEditingAreas()
     }
     
     func pdfViewMobileEditingMove(_ point: CGPoint, for pdfView: CPDFView!, forEditing editingAreas: [CPDFEditArea]!) {
-
+        rightSideController?.reloadEditingAreas()
     }
     
     func pdfViewMobileEditingEnd(_ point: CGPoint, for pdfView: CPDFView!, forEditing editingAreas: [CPDFEditArea]!) {
-
+        rightSideController?.reloadEditingAreas()
+        
     }
     
     func pdfViewEditingSelectCharDidChanged(_ pdfView: CPDFView!) {
-    
+        rightSideController?.reloadEditingAreas()
     }
     
     func pdfViewEditingExitCropMode(_ pdfView: CPDFView!, forEditing editingArea: CPDFEditImageArea!) {
-
+        rightSideController?.reloadEditingAreas()
+    }
+    
+    func pdfViewEditingOperationDidChanged(_ pdfView: CPDFView!) {
+        let areas = self.listView.km_editingImageAreas()
+        if areas.count == 1 {
+            if let data = areas.first as? CPDFEditImageArea {
+                let updating = self.listView.editAreaBoundUpdating
+                if updating {
+                    self.listView.editAreaBoundUpdating = false
+                }
+            }
+        }
+        
+    }
+    
+    func pdfViewEditingDoubleClick(_ pdfView: CPDFView!, imageArea editArea: CPDFEditArea!) {
+        self.editPDFHanddler?.pdfViewEditingDoubleClick(pdfView, imageArea: editArea)
     }
     
     func pdfListViewKeyDownIsContinue(_ pdfListView: CPDFListView!, theEvent: NSEvent!) -> Bool {
@@ -2029,14 +2050,27 @@ extension KMMainViewController: CPDFViewDelegate,CPDFListViewDelegate {
         KMPrint(theEvent.keyCode)
         if self.listView.isEditing() == true {
             if control && theEvent.keyCode == 11 { // ctr + b
-                self.editPDFHanddler?.fontBoldAction()
+                self.listView.fontBoldAction()
+                rightSideController?.reloadEditingAreas()
+                
                 return false
             } else if control && theEvent.keyCode == 34 { // ctr +i
-                self.editPDFHanddler?.fontItalicAction()
+                self.listView.fontItalicAction()
+                rightSideController?.reloadEditingAreas()
+                
                 return false
             } else if theEvent.keyCode == 36 { // enter
                 if self.listView.isCropMode {
-                    self.editPDFHanddler?.cropComfirmAction()
+                    self.listView.cropComfirmAction()
+                    rightSideController?.reloadEditingAreas()
+                    
+                    return false
+                }
+            } else if theEvent.keyCode == 53 { // Cancel
+                if self.listView.isCropMode {
+                    self.listView.cropCancelAction()
+                    rightSideController?.reloadEditingAreas()
+                    
                     return false
                 }
             }
@@ -2137,14 +2171,6 @@ extension KMMainViewController: CPDFViewDelegate,CPDFListViewDelegate {
         return false
     }
     
-    func pdfViewEditingOperationDidChanged(_ pdfView: CPDFView!) {
-        self.editPDFHanddler?.pdfViewEditingOperationDidChanged(pdfView)
-    }
-    
-    func pdfViewEditingDoubleClick(_ pdfView: CPDFView!, imageArea editArea: CPDFEditArea!) {
-        self.editPDFHanddler?.pdfViewEditingDoubleClick(pdfView, imageArea: editArea)
-    }
-    
     //MARK: - CPDFListViewDelegate
     func cPDFListView(_ pdfListView: CPDFListView, didDelete annotation: CPDFAnnotation, in pdfPage: CPDFPage) {
         self.leftSideViewController.updateThumbnail(at: Int(pdfPage.pageIndex()))

+ 9 - 0
PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/KMRightSideController.swift

@@ -180,4 +180,13 @@ class KMRightSideController: NSViewController {
          
     }
     
+    //重新刷新编辑中内容
+    public func reloadEditingAreas() {
+        if contentViewController is KMEditPDFTextPropertyViewController {
+            (contentViewController as! KMEditPDFTextPropertyViewController).reloadData()
+        } else if contentViewController is KMEditImageController {
+            (contentViewController as! KMEditImageController).reloadData()
+        }
+    }
+    
 }

+ 124 - 37
PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/KMEditImageController.swift

@@ -9,7 +9,7 @@ import Cocoa
 import KMComponentLibrary
 
 class KMEditImageController: NSViewController {
-  
+    
     @IBOutlet var scrollView: NSScrollView!
     @IBOutlet var contendView: NSView!
     
@@ -27,7 +27,7 @@ class KMEditImageController: NSViewController {
     @IBOutlet var rotateRightButton: ComponentButton!
     @IBOutlet var flipVerticalButton: ComponentButton!
     @IBOutlet var flipHorizontalButton: ComponentButton!
-
+    
     @IBOutlet var opacityBGView: NSView!
     @IBOutlet var opacityLabel: NSTextField!
     @IBOutlet var opacitySlider: ComponentSlider!
@@ -37,6 +37,8 @@ class KMEditImageController: NSViewController {
     @IBOutlet var replaceButton: ComponentButton!
     @IBOutlet var ExtrackButton: ComponentButton!
     
+    private var syncChangeBounds: Bool = true //同步修改宽高
+    
     private var groupView: ComponentGroup!
     
     var pdfView: CPDFListView? {
@@ -44,20 +46,20 @@ class KMEditImageController: NSViewController {
             reloadData()
         }
     }
-     
+    
     var currentArea: CPDFEditImageArea?
     
     //MARK: - func
     override func viewDidAppear() {
         super.viewDidAppear()
-         
+        
         opacitySlider.reloadData()
         
     }
     
     override func viewDidLoad() {
         super.viewDidLoad()
-      
+        
         setupProperty()
     }
     
@@ -67,38 +69,34 @@ class KMEditImageController: NSViewController {
         sizeLabel.stringValue = KMLocalizedString("Size")
         sizeLabel.textColor = ComponentLibrary.shared.getComponentColorFromKey("colorText/2")
         sizeLabel.font = ComponentLibrary.shared.getFontFromKey("mac/body-s-medium")
-
+        
         sizeSyncButton.properties = ComponentButtonProperty(type: .text_gray, size: .xxs, onlyIcon: true, icon: NSImage(named: "sync_Change_unlock"), keepPressState: true)
-        sizeSyncButton.properties.propertyInfo.rightIcon_press = NSImage(named: "sync_Change_lock")
-        sizeSyncButton.setTarget(self, action: #selector(buttonClicked(_:)))
+        sizeSyncButton.properties.propertyInfo.leftIcon_press = NSImage(named: "sync_Change_lock")
+        sizeSyncButton.setTarget(self, action: #selector(sizeSyncButtonClicked(_:)))
         sizeSyncButton.reloadData()
         
         sizeWidthInput.properties = ComponentInputNumberProperty(alignment: .center,
                                                                  size: .s,
                                                                  state: .normal,
-                                                                 isError: false,
-                                                                 showErrorInfo: false,
-                                                                 isDisabled: true,
                                                                  showPrefix: true,
                                                                  leftIcon: NSImage(named: "w_icon"),
                                                                  showSuffix: false,
                                                                  minSize: 1,
                                                                  maxSize: 1000,
                                                                  text:"100")
+        sizeWidthInput.delegate = self
         
         sizeHeightInput.properties = ComponentInputNumberProperty(alignment: .center,
-                                                                 size: .s,
-                                                                 state: .normal,
-                                                                 isError: false,
-                                                                 showErrorInfo: false,
-                                                                 isDisabled: true,
-                                                                 showPrefix: true,
-                                                                 leftIcon: NSImage(named: "h_icon"),
-                                                                 showSuffix: false,
-                                                                 minSize: 1,
-                                                                 maxSize: 1000,
-                                                                 text:"100")
-
+                                                                  size: .s,
+                                                                  state: .normal,
+                                                                  showPrefix: true,
+                                                                  leftIcon: NSImage(named: "h_icon"),
+                                                                  showSuffix: false,
+                                                                  minSize: 1,
+                                                                  maxSize: 1000,
+                                                                  text:"100")
+        sizeHeightInput.delegate = self
+        
         //Rotate
         rotateLabel.stringValue = KMLocalizedString("Rotate & Flip")
         rotateLabel.textColor = ComponentLibrary.shared.getComponentColorFromKey("colorText/2")
@@ -158,7 +156,7 @@ class KMEditImageController: NSViewController {
         
         cropButton.properties = ComponentButtonProperty(type: .default_tertiary, size: .s, buttonText: KMLocalizedString("Crop"), keepPressState: false)
         cropButton.setTarget(self, action: #selector(buttonClicked(_:)))
-
+        
         replaceButton.properties = ComponentButtonProperty(type: .default_tertiary, size: .s, buttonText: KMLocalizedString("Replace"), keepPressState: false)
         replaceButton.setTarget(self, action: #selector(buttonClicked(_:)))
         
@@ -180,8 +178,33 @@ class KMEditImageController: NSViewController {
         }
         
         if let area = currentArea {
+            //Size
+            if syncChangeBounds {
+                sizeSyncButton.properties.state = .pressed
+            } else {
+                sizeSyncButton.properties.state = .normal
+            }
+            sizeSyncButton.reloadData()
             
+            let areaFrame = area.bounds
+            sizeWidthInput.properties.text = String(format: "%.1f", areaFrame.size.width)
+            sizeWidthInput.reloadData()
             
+            sizeHeightInput.properties.text = String(format: "%.1f", areaFrame.size.height)
+            sizeHeightInput.reloadData()
+            
+            //Rotate
+            if let rotates = pdfView?.km_editAreasRotates([area]) {
+                if rotates.count > 0 {
+                    var rotate = rotates.first ?? 1
+                    
+                    rotateSelect.properties.text = String(format: "%.0f%@", rotate, "°")
+                    rotateSelect.reloadData()
+                    
+                }
+            }
+            
+            //Opacity
             if let opacitys = pdfView?.km_editAreasOpacitys([area]) {
                 if opacitys.count > 0 {
                     var opacity = opacitys.first ?? 1
@@ -196,15 +219,6 @@ class KMEditImageController: NSViewController {
                 }
             }
             
-            if let rotates = pdfView?.km_editAreasRotates([area]) {
-                if rotates.count > 0 {
-                    var rotate = rotates.first ?? 1
-                    
-                    rotateSelect.properties.text = String(format: "%.0f%@", rotate, "°")
-                    rotateSelect.reloadData()
-                     
-                }
-            }
             
             if pdfView?.isEditImage == true {
                 cropButton.properties.buttonText = KMLocalizedString("Cancel Crop")
@@ -219,10 +233,19 @@ class KMEditImageController: NSViewController {
     }
     
     //MARK: - Action
+    @objc func sizeSyncButtonClicked(_ sender: ComponentButton) {
+        syncChangeBounds = !syncChangeBounds
+        
+        if syncChangeBounds {
+            sizeSyncButton.properties.state = .pressed
+        } else {
+            sizeSyncButton.properties.state = .normal
+        }
+        sizeSyncButton.reloadData()
+    }
+    
     @objc func buttonClicked(_ sender: ComponentButton) {
-        if sender == sizeSyncButton {
-            
-        } else if sender == rotateLeftButton {
+        if sender == rotateLeftButton {
             self.pdfView?.leftRotateAction()
         } else if sender == rotateRightButton {
             self.pdfView?.rightRotateAction()
@@ -294,6 +317,70 @@ class KMEditImageController: NSViewController {
     
 }
 
+extension KMEditImageController: ComponentInputNumberDelegate {
+    func componentInputNumberDidValueChanged(inputNumber: ComponentInputNumber?) {
+        if inputNumber == sizeWidthInput {
+            let areas = self.pdfView?.km_editingImageAreas() ?? []
+            self.pdfView?.editAreaBoundUpdating = true
+            for area in areas {
+                var bounds = area.bounds
+                var width = inputNumber?.properties.text?.stringToCGFloat() ?? 0
+                if width == 0 {
+                    return
+                }
+                let pageBounds = area.page?.bounds ?? .zero
+                if width > NSWidth(pageBounds) {
+                    width = NSWidth(pageBounds)
+                    let value = String(format: "%.1f", width)
+                }
+                let wOffset = width-bounds.size.width
+                bounds.origin.x = max(0, bounds.origin.x-wOffset * 0.5)
+                bounds.origin.x = min(bounds.origin.x, pageBounds.size.width-width)
+                
+                if syncChangeBounds {
+                    var scale: CGFloat = 0
+                    if bounds.size.width != 0 {
+                        scale = width / bounds.size.width
+                    }
+                    bounds.size.height *= scale
+                    bounds.size.width = width
+                } else {
+                    bounds.size.width = width
+                }
+                self.pdfView?.setBoundsEditArea(area, withBounds: bounds)
+            }
+        } else if inputNumber == sizeHeightInput {
+            let areas = self.pdfView?.km_editingImageAreas() ?? []
+            self.pdfView?.editAreaBoundUpdating = true
+            for area in areas {
+                var bounds = area.bounds
+                var height = inputNumber?.properties.text?.stringToCGFloat() ?? 0
+                if height == 0 {
+                    return
+                }
+                let pageBounds = area.page?.bounds ?? .zero
+                if height > NSHeight(pageBounds) {
+                    height = NSHeight(pageBounds)
+                }
+                let hOffset = height-bounds.size.height
+                bounds.origin.y = max(0, bounds.origin.y-hOffset * 0.5)
+                bounds.origin.y = min(bounds.origin.y, pageBounds.size.height-height)
+                if syncChangeBounds { // 寛高约束
+                    var scale: CGFloat = 0
+                    if bounds.size.height != 0 {
+                        scale = height / bounds.size.height
+                    }
+                    bounds.size.width *= scale
+                    bounds.size.height = height
+                } else {
+                    bounds.size.height = height
+                }
+                self.pdfView?.setBoundsEditArea(area, withBounds: bounds)
+            }
+        }
+        reloadData()
+    }
+}
 
 //MARK: - ComponentSelectDelegate
 extension KMEditImageController: ComponentSelectDelegate {
@@ -344,7 +431,7 @@ extension KMEditImageController: ComponentSelectDelegate {
 
 //MARK: - ComponentCColorDelegate
 extension KMEditImageController: ComponentCColorDelegate {
- 
+    
 }
 
 //MARK: - ComponentSliderDelegate

+ 1 - 2
PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/Manager/KMEditPDfHanddler.swift

@@ -1452,8 +1452,7 @@ extension KMEditPDfHanddler: CPDFViewDelegate {
                 let updating = self.listView?.editAreaBoundUpdating ?? false
                 if updating {
                     self.listView?.editAreaBoundUpdating = false
-                } else {
-                 }
+                }
             }
         }
     }

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

@@ -3268,5 +3268,101 @@
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "114441E8-9DF0-4170-86DF-2C5DF1C20897"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/Manager/KMEditPDfHanddler.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "1449"
+            endingLineNumber = "1449"
+            landmarkName = "pdfViewEditingOperationDidChanged(_:)"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "BACB85CB-4643-458B-8AE5-1F468C92C60D"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Master/KMClass/KMPDFViewController/KMMainViewController.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "2043"
+            endingLineNumber = "2043"
+            landmarkName = "KMMainViewController"
+            landmarkType = "21">
+            <Locations>
+               <Location
+                  uuid = "BACB85CB-4643-458B-8AE5-1F468C92C60D - 680781a5883eb184"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "PDF_Reader_Pro.KMMainViewController.pdfListViewKeyDownIsContinue(_: Swift.Optional&lt;__C.CPDFListView&gt;, theEvent: Swift.Optional&lt;__C.NSEvent&gt;) -&gt; Swift.Bool"
+                  moduleName = "PDF Reader Pro"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMMainViewController.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "2044"
+                  endingLineNumber = "2044"
+                  offsetFromSymbolStart = "176">
+               </Location>
+               <Location
+                  uuid = "BACB85CB-4643-458B-8AE5-1F468C92C60D - e2025f40cf5bd635"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "PDF_Reader_Pro.KMMainViewController.pdfViewEditingDoubleClick(_: Swift.Optional&lt;__C.CPDFView&gt;, imageArea: Swift.Optional&lt;__C.CPDFEditArea&gt;) -&gt; ()"
+                  moduleName = "PDF Reader Pro"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMMainViewController.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "2043"
+                  endingLineNumber = "2043"
+                  offsetFromSymbolStart = "64">
+               </Location>
+            </Locations>
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "0AC8459B-171D-4BAD-824D-4B2F6D9C84FB"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/Manager/KMEditPDfHanddler.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "837"
+            endingLineNumber = "837"
+            landmarkName = "cropCancelAction()"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "32DA0514-DAF0-4092-95CB-BBDEA54524EB"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/Manager/KMEditPDfHanddler.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "1285"
+            endingLineNumber = "1285"
+            landmarkName = "pdfViewEditingCropBoundsDidChanged(_:editing:)"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
    </Breakpoints>
 </Bucket>