Browse Source

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

tangchao 1 năm trước cách đây
mục cha
commit
7a02597d59

+ 4 - 1
PDF Office/PDF Master/Class/PDFTools/PageEdit/OCPart/CustomAlertView.swift

@@ -71,7 +71,7 @@ class CustomAlertView: NSView {
             } else {
                 view.layer?.backgroundColor = NSColor.black.withAlphaComponent(0.7).cgColor
             }
-            messageLabel = NSTextField(frame: NSRect(x: 15, y: 15, width: ceilSize.width + 30, height: ceilSize.height))
+            messageLabel = NSTextField(frame: NSRect(x: 15, y: 15, width: ceilSize.width + 30, height: ceilSize.height + 30))
         } else {
             view.layer?.cornerRadius = view.frame.size.height / 2
             if let color1 = color {
@@ -87,6 +87,9 @@ class CustomAlertView: NSView {
         messageLabel.backgroundColor = NSColor.clear
         messageLabel.isBordered = false
         messageLabel.isEditable = false
+        messageLabel.lineBreakMode = .byWordWrapping
+        messageLabel.usesSingleLineMode = false
+        messageLabel.cell?.wraps = true
         if #available(OSX 10.11, *) {
             messageLabel.lineBreakMode = .byWordWrapping
         }

+ 3 - 3
PDF Office/PDF Master/Class/PDFTools/Print/KMPrintWindowController.swift

@@ -74,7 +74,7 @@ class KMPrintWindowController: KMBaseWindowController, NetServiceBrowserDelegate
 //            self.chooseView.inputData = URL(string: "")
             
             if pdfDocument != nil {
-                self.preview.pdfDocument = pdfDocument
+                self.preview.pdfDocument = PDFDocument(url: pdfDocument!.documentURL)
                 self.presenter.initPresenter(delegate: self, data: self.chooseData, document: pdfDocument!)
             }
         }
@@ -472,11 +472,11 @@ extension KMPrintWindowController: KMPrintChooseViewDelegate {
 }
 
 extension KMPrintWindowController: KMPrintPresenterDeleage {
-    func showData(presenter: KMPrintPresenter, document: CPDFDocument) {
+    func showData(presenter: KMPrintPresenter, document: PDFDocument) {
         
         self.preview.model = self.chooseData
         if isPrintPreView && self.preview.model?.page.operation.type == .poster {
-            self.preview.pdfDocument = pdfDocument
+//            self.preview.pdfDocument = pdfDocument
         } else {
             self.preview.pdfDocument = document
         }

+ 7 - 7
PDF Office/PDF Master/Class/PDFTools/Print/KMPrintWindowController.xib

@@ -1,12 +1,12 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22155" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22505" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
     <dependencies>
         <deployment identifier="macosx"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22155"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22505"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
-        <customObject id="-2" userLabel="File's Owner" customClass="KMPrintWindowController" customModule="PDF_Master" customModuleProvider="target">
+        <customObject id="-2" userLabel="File's Owner" customClass="KMPrintWindowController" customModule="PDF_Reader_Pro" customModuleProvider="target">
             <connections>
                 <outlet property="bottomView" destination="hxi-EY-Feh" id="aVW-vl-lrU"/>
                 <outlet property="chooseView" destination="Poy-5w-166" id="Hdi-D7-rcw"/>
@@ -27,22 +27,22 @@
                 <rect key="frame" x="0.0" y="0.0" width="600" height="500"/>
                 <autoresizingMask key="autoresizingMask"/>
                 <subviews>
-                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="Zdp-be-ySe" customClass="KMPrintPreviewView" customModule="PDF_Master">
+                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="Zdp-be-ySe" customClass="KMPrintPreviewView" customModule="PDF_Reader_Pro" customModuleProvider="target">
                         <rect key="frame" x="0.0" y="48" width="228" height="402"/>
                         <constraints>
                             <constraint firstAttribute="width" constant="228" id="mvR-zb-2ve"/>
                         </constraints>
                     </customView>
-                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="hxi-EY-Feh" customClass="KMPrintBottomView" customModule="PDF_Master" customModuleProvider="target">
+                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="hxi-EY-Feh" customClass="KMPrintBottomView" customModule="PDF_Reader_Pro" customModuleProvider="target">
                         <rect key="frame" x="0.0" y="0.0" width="600" height="48"/>
                         <constraints>
                             <constraint firstAttribute="height" constant="48" id="Iml-W7-xkW"/>
                         </constraints>
                     </customView>
-                    <customView hidden="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Poy-5w-166" customClass="KMPrintChooseView" customModule="PDF_Master" customModuleProvider="target">
+                    <customView hidden="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Poy-5w-166" customClass="KMPrintChooseView" customModule="PDF_Reader_Pro" customModuleProvider="target">
                         <rect key="frame" x="228" y="48" width="372" height="402"/>
                     </customView>
-                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="Q4X-Su-GRe" customClass="KMPrintSettingView" customModule="PDF_Master" customModuleProvider="target">
+                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="Q4X-Su-GRe" customClass="KMPrintSettingView" customModule="PDF_Reader_Pro" customModuleProvider="target">
                         <rect key="frame" x="228" y="48" width="372" height="452"/>
                     </customView>
                     <customView translatesAutoresizingMaskIntoConstraints="NO" id="MIW-E0-38q">

+ 22 - 1
PDF Office/PDF Master/Class/PDFTools/Print/Model/KMPrintDrawPage.swift

@@ -7,10 +7,31 @@
 
 import Cocoa
 
-class KMPrintDrawPage: NSObject {
+//typealias KMPrintDrawPageBlock = (_ box: CPDFDisplayBox, _ context: CGContext, _ pages: [KMPrintDrawPage]) -> Void
+
+typealias KMPrintDrawPageBlock = (_ box: PDFDisplayBox, _ context: CGContext, _ pages: [KMPrintDrawPage]) -> Void
+
+
+class KMPrintDrawPage: PDFPage {
+//    var page: CPDFPage = CPDFPage()
     var page: PDFPage = PDFPage()
+    var pages: [KMPrintDrawPage] = []
+    
     var cropRect: CGRect = NSZeroRect
     var showRect: CGRect = NSZeroRect
     
     var point: CGPoint = NSMakePoint(1, 1)
+    
+    var drawPageBlock: KMPrintDrawPageBlock?
+    
+    
+    override func draw(with box: PDFDisplayBox, to context: CGContext) {
+        super.draw(with: box, to: context)
+        self.drawPageBlock?(box, context, pages)
+    }
+//    override func draw(with box: CPDFDisplayBox, to context: CGContext!) {
+//        super.draw(with: box, to: context)
+//        
+//        self.drawPageBlock?(box, context, pages)
+//    }
 }

+ 78 - 48
PDF Office/PDF Master/Class/PDFTools/Print/Presenter/KMPrintPresenter.swift

@@ -51,7 +51,7 @@ class KMPrintPresenter: NSObject {
 }
 
 protocol KMPrintPresenterDeleage: NSObject {
-    func showData(presenter: KMPrintPresenter, document: CPDFDocument)
+    func showData(presenter: KMPrintPresenter, document: PDFDocument)
 }
 
 protocol KMPrintPresenterDocument: NSObject {}
@@ -62,20 +62,20 @@ extension KMPrintPresenter: KMPrintPresenterDocument {
      @param data 数据
      @retrun document
      */
-    func updatePrintDocument(documentURL: URL, data: KMPrintModel) -> CPDFDocument {
+    func updatePrintDocument(documentURL: URL, data: KMPrintModel) -> PDFDocument {
         // 获取基本参数
         let printModel: KMPrintModel = data
         //获取总page
         let pages = self.fetchPages(documentURL, printModel.page)
         //绘制PDF
-        let filePath = self.drawPages(nil, printModel, pages)
+        let result = self.drawPages(nil, printModel, pages)
         
-        let result = CPDFDocument(url: URL(fileURLWithPath: filePath))!
+//        let result = CPDFDocument(url: URL(fileURLWithPath: filePath))!
         
         if self.delegate != nil {
             self.delegate?.showData(presenter: self, document: result)
         }
-        KMPrint("保存地址" + filePath)
+//        KMPrint("保存地址" + filePath)
         return result
      }
     
@@ -87,7 +87,7 @@ extension KMPrintPresenter: KMPrintPresenterDocument {
      */
     func drawPages(_ toFilePath: String?,
                    _ printModel: KMPrintModel,
-                   _ pages: [KMPrintDrawPage]) -> String {
+                   _ pages: [KMPrintDrawPage]) -> PDFDocument {
         /**
          参数
          */
@@ -98,23 +98,45 @@ extension KMPrintPresenter: KMPrintPresenterDocument {
         //每页page数
         let pageOfPaperCount: Int = self.fetchPageOfPaper(printModel.page)
         //获取每张纸的page
-        let drawPages: [[KMPrintDrawPage]] = self.fetchDrawPages(paperSize, printModel.page, paperCount, pageOfPaperCount, pages)
+        let drawPages: [KMPrintDrawPage] = self.fetchDrawPages(paperSize, printModel.page, paperCount, pageOfPaperCount, pages)
         //导出地址
         let filePath = KMPrintPresenter.fetchSaveFilePath(toFilePath)
         
+        
+        //方法一
+        let tempDocument = PDFDocument()
+        for i in 0..<drawPages.count {
+            let page = drawPages[i]
+            page.drawPageBlock = { [unowned self] box, context, pages in
+                self.drawPageToContext(context, page, printModel)
+            }
+            tempDocument.insert(page, at: i)
+        }
+        
+        return tempDocument
+//        let isSuccess = tempDocument.write(toFile: filePath)
+//        if isSuccess {
+//            print("保存成功")
+//        } else {
+//            print("保存失败")
+//        }
+        
         /**
-         绘制每张纸的内容
+         //方法二
+         /**
+          绘制每张纸的内容
+          */
+         //创建画布
+         let context: CGContext = self.createContext(filePath, paperSize)
+         for drawPage in drawPages {
+             context.beginPDFPage(nil)
+             self.drawPageToContext(context, drawPage, printModel)
+             context.endPDFPage()
+         }
+         context.closePDF()
          */
-        //创建画布
-        let context: CGContext = self.createContext(filePath, paperSize)
-        for drawPage in drawPages {
-            context.beginPDFPage(nil)
-            self.drawPageToContext(context, drawPage, printModel)
-            context.endPDFPage()
-        }
-        context.closePDF()
         
-        return filePath
+//        return filePath
     }
     
     
@@ -125,7 +147,7 @@ extension KMPrintPresenter: KMPrintPresenterDocument {
      @param pageOfPaperCount 每张纸的page数量
      @param pages 所有page数量
      */
-    func fetchDrawPages(_ paperSize: CGSize, _ pageModel: KMPrintPageModel,_ paperCount: Int, _ pageOfPaperCount: Int, _ pages: [KMPrintDrawPage]) -> [[KMPrintDrawPage]] {
+    func fetchDrawPages(_ paperSize: CGSize, _ pageModel: KMPrintPageModel,_ paperCount: Int, _ pageOfPaperCount: Int, _ pages: [KMPrintDrawPage]) -> [KMPrintDrawPage] {
         guard pages.count != 0 else {
             return []
         }
@@ -140,7 +162,7 @@ extension KMPrintPresenter: KMPrintPresenterDocument {
             }
         }
         
-        var drawPages:[[KMPrintDrawPage]] = []
+        var drawPages:[KMPrintDrawPage] = []
         for i in 0..<paperCount {
             //获取多页page
             var tempPags: [KMPrintDrawPage] = []
@@ -200,7 +222,9 @@ extension KMPrintPresenter: KMPrintPresenterDocument {
                 page2.showRect = pageShowRect2
                 tempPags.append(page2)
                 
-                drawPages.append(tempPags)
+                let drawPage = KMPrintDrawPage()
+                drawPage.pages = tempPags
+                drawPages.append(drawPage)
             } else {
                 for j in 0..<pageOfPaperCount {
                     let pageIndex = i / pageRepetitionCount
@@ -222,7 +246,9 @@ extension KMPrintPresenter: KMPrintPresenterDocument {
                         tempPags.append(drawPage)
                     }
                 }
-                drawPages.append(tempPags)
+                let drawPage = KMPrintDrawPage()
+                drawPage.pages = tempPags
+                drawPages.append(drawPage)
             }
         }
         
@@ -259,15 +285,15 @@ extension KMPrintPresenter: KMPrintPresenterDocument {
      @param selectPages 当type 为custom时  传入选中page的下标
      */
     static func creatDocument(_ url: URL) -> CPDFDocument {
-        if FileManager.default.fileExists(atPath: NSTemporaryDirectory() + "/PDFReaderProTest") {
-            try?FileManager.default.createDirectory(atPath: NSTemporaryDirectory() + "/PDFReaderProTest", withIntermediateDirectories: true)
+        if !FileManager.default.fileExists(atPath: url.path) {
+            FileManager.default.createFile(atPath: url.path, contents: nil)
         }
         
         
         let document = CPDFDocument(url: url)!
 //        document.importPages(IndexSet(integer: 0), from: document, at: 0)
         let count = document.pageCount
-        for _ in 0...(count - 1) {
+        for _ in 0..<count {
             document.removePage(at: 0)
         }
         return document
@@ -281,6 +307,7 @@ extension KMPrintPresenter: KMPrintPresenterDocument {
      @param selectPages 当type 为custom时  传入选中page的下标
      */
     func fetchPages(_ documentURL: URL, _ pageModel: KMPrintPageModel) -> [KMPrintDrawPage] {
+//        let document = CPDFDocument.init(url: documentURL)!
         let document = PDFDocument.init(url: documentURL)!
         document.unlock(withPassword: password)
         var pageIndexs: [Int] = []
@@ -291,20 +318,20 @@ extension KMPrintPresenter: KMPrintPresenterDocument {
         switch range.type {
         case .allPage:
             for index in 0...document.pageCount - 1 {
-                pageIndexs.append(index)
+                pageIndexs.append(Int(index))
             }
     
         case .evenPage:
             for index in 0...document.pageCount - 1 {
                 if index % 2 == 0 {
-                    pageIndexs.append(index)
+                    pageIndexs.append(Int(index))
                 }
             }
             
         case .oddPage:
             for index in 0...document.pageCount - 1 {
                 if index % 2 != 0 {
-                    pageIndexs.append(index)
+                    pageIndexs.append(Int(index))
                 }
             }
             
@@ -341,6 +368,7 @@ extension KMPrintPresenter: KMPrintPresenterDocument {
      */
     func dealPageContent (_ contentType: KMPrintContentType, _ pages: [KMPrintDrawPage]) -> Void {
         for page in pages {
+//            let annoations: [CPDFAnnotation] = page.page.annotations
             let annoations: [PDFAnnotation] = page.page.annotations
             //内容处理
             switch contentType {
@@ -389,7 +417,7 @@ extension KMPrintPresenter: KMPrintPresenterDocument {
      @param context
      @pages page数组 [CPDFPage]
      */
-    func drawPageToContext(_ context: CGContext, _ pages: [KMPrintDrawPage], _ data: KMPrintModel, _ drawPageRect: CGRect = NSZeroRect) {
+    func drawPageToContext(_ context: CGContext, _ drawPage: KMPrintDrawPage, _ data: KMPrintModel, _ drawPageRect: CGRect = NSZeroRect) {
         //左下角有坐标系原点
         /**
          paper
@@ -415,9 +443,9 @@ extension KMPrintPresenter: KMPrintPresenterDocument {
         for i in 0..<Int(columnAndRow.x) {
             for j in 0..<(Int(columnAndRow.y)) {
                 let index = j + i * Int(columnAndRow.y)
-                if index < pages.count {
+                if index < drawPage.pages.count {
                     //参数
-                    let page: KMPrintDrawPage = pages[index]
+                    let page: KMPrintDrawPage = drawPage.pages[index]
                     let rect = page.showRect
                     //裁剪当前Page
                     page.page.setBounds(page.cropRect, for: .cropBox)
@@ -474,6 +502,8 @@ extension KMPrintPresenter: KMPrintPresenterDocument {
                     //缩放
                     context.scaleBy(x: CGFloat(scale), y: CGFloat(scale))
                     
+//                    page.page.draw(with: CPDFDisplayBox.cropBox, to: context)
+//                    page.page.transform(context, for: CPDFDisplayBox.cropBox)
                     page.page.draw(with: PDFDisplayBox.cropBox, to: context)
                     page.page.transform(context, for: PDFDisplayBox.cropBox)
                     if border {
@@ -1135,13 +1165,13 @@ protocol KMPrintPresenterProtocol: NSObject {
 //MARK: 渲染单页
 extension KMPrintPresenter {
     static func drawPage(context: CGContext, page: PDFPage, model: KMPrintModel) {
-        let drawPage = KMPrintDrawPage()
-        drawPage.page = page
-        drawPage.cropRect = page.bounds(for: .cropBox)
-        drawPage.showRect = page.bounds(for: .cropBox)
-        let prinsenter = KMPrintPresenter()
-        prinsenter.printData = model
-        prinsenter.drawTestPage(context, model, [drawPage])
+//        let drawPage = KMPrintDrawPage()
+//        drawPage.page = page
+//        drawPage.cropRect = page.bounds(for: .cropBox)
+//        drawPage.showRect = page.bounds(for: .cropBox)
+//        let prinsenter = KMPrintPresenter()
+//        prinsenter.printData = model
+//        prinsenter.drawTestPage(context, model, [drawPage])
     }
     
     func drawTestPage(_ context: CGContext,
@@ -1150,16 +1180,16 @@ extension KMPrintPresenter {
         /**
          参数
          */
-        //纸张大小
-        let paperSize: CGSize = self.fetchPaperSize(printModel.paper)
-        //总页数
-        let paperCount: Int = self.fetchTotalPaperCount(paperSize, pages, printModel.page)
-        //每页page数
-        let pageOfPaperCount: Int = self.fetchPageOfPaper(printModel.page)
-        //获取每张纸的page
-        let drawPages: [[KMPrintDrawPage]] = self.fetchDrawPages(paperSize, printModel.page, paperCount, pageOfPaperCount, pages)
-        
-        
-        self.drawPageToContext(context, drawPages.first!, printModel)
+//        //纸张大小
+//        let paperSize: CGSize = self.fetchPaperSize(printModel.paper)
+//        //总页数
+//        let paperCount: Int = self.fetchTotalPaperCount(paperSize, pages, printModel.page)
+//        //每页page数
+//        let pageOfPaperCount: Int = self.fetchPageOfPaper(printModel.page)
+//        //获取每张纸的page
+//        let drawPages: [[KMPrintDrawPage]] = self.fetchDrawPages(paperSize, printModel.page, paperCount, pageOfPaperCount, pages)
+//        
+//        
+//        self.drawPageToContext(context, drawPages.first!, printModel)
     }
 }

+ 2 - 2
PDF Office/PDF Master/Class/PDFTools/Print/View/Preview/KMPrintPreviewView.swift

@@ -31,9 +31,9 @@ class KMPrintPreviewView: KMBaseXibView {
     }
     
     private lazy var presenter: KMPrintPreviewPresenter = KMPrintPreviewPresenter()
-    var pdfDocument: CPDFDocument? {
+    var pdfDocument: PDFDocument? {
         didSet {
-            self.previewView.document = PDFDocument(url: pdfDocument!.documentURL)
+            self.previewView.document = pdfDocument //PDFDocument(url: pdfDocument!.documentURL)
             self.previewView.document?.unlock(withPassword: password)
             self.previewView.autoScales = true
             self.previewView.displayMode = .singlePage