Prechádzať zdrojové kódy

【打印】渲染效果调试

lizhe 1 rok pred
rodič
commit
996b6be4ca

+ 9 - 2
PDF Office/PDF Master/Class/PDFTools/Print/Category/KMPrintPage.swift

@@ -8,19 +8,26 @@
 import Cocoa
 import PDFKit
 
-typealias KMPrintPageDraw = (_ box: PDFDisplayBox, _ context: CGContext, _ pages: [PDFPage], _ data: KMPrintModel) -> Void
+typealias KMPrintPageDraw = (_ box: PDFDisplayBox, _ context: CGContext, _ pages: [PDFPage], _ page: PDFPage, _ data: KMPrintModel) -> Void
 class KMPrintPage: PDFPage {
     var drawBlock: KMPrintPageDraw?
     var pages: [PDFPage]?
+    var page: PDFPage?
     var data: KMPrintModel?
     
     override func draw(with box: PDFDisplayBox, to context: CGContext) {
         super.draw(with: box, to: context)
+        print("draw(with box: PDFDisplayBox, to context: CGContext)")
         
         NSGraphicsContext.current = NSGraphicsContext(cgContext: context, flipped: false)
         
         if self.drawBlock != nil {
-            self.drawBlock!(box, context, self.pages!, self.data!)
+            self.drawBlock!(box, context, self.pages!, self.page!, self.data!)
         }
     }
+    
+    override func draw(with box: PDFDisplayBox) {
+        super.draw(with: box)
+        print("draw(with box: PDFDisplayBox)")
+    }
 }

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

@@ -100,12 +100,12 @@ class KMPrintWindowController: NSWindowController, NetServiceBrowserDelegate {
         
         self.settingView.pageSettingChange = { [unowned self] view, model in
             self.chooseData = model
-            self.presenter.printData = model
+//            self.presenter.printData = model
         }
         
         self.settingView.printSettingChange = { [unowned self] view, model in
             self.chooseData = model
-            self.presenter.printData = model
+//            self.presenter.printData = model
         }
     }
     

+ 32 - 0
PDF Office/PDF Master/Class/PDFTools/Print/Presenter/KMPrintPresenter.swift

@@ -1129,3 +1129,35 @@ protocol KMPrintPresenterProtocol: NSObject {
 //    let context: CGContext = NSGraphicsContext.init(bitmapImageRep: rep)!.cgContext
 //    return context
 //}
+
+//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])
+    }
+    
+    func drawTestPage(_ context: CGContext,
+                   _ printModel: KMPrintModel,
+                   _ pages: [KMPrintDrawPage]) {
+        /**
+         参数
+         */
+        //纸张大小
+        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)
+    }
+}

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

@@ -32,16 +32,47 @@ class KMPrintPreviewView: KMBaseXibView {
     private lazy var presenter: KMPrintPreviewPresenter = KMPrintPreviewPresenter()
     var pdfDocument: CPDFDocument? {
         didSet {
-            self.previewView.document = PDFDocument(url: pdfDocument!.documentURL)
-            self.previewView.autoScales = true
-            self.previewView.displayMode = .singlePage
-            self.previewView.documentView?.enclosingScrollView?.scrollerStyle = .overlay
-            if model?.page.operation.type == .poster {
-                
+            
+            if self.previewView.document != nil {
+                self.previewView.needsDisplay = true
+                self.reloadData()
             } else {
-                self.presenter.initPresenter(delegate: self, view: self.previewView)
+                
+                var pdfDocument2 = PDFDocument(url: pdfDocument!.documentURL)
+                var tempDocument = PDFDocument()
+                
+                var pages: [PDFPage] = []
+                for i in 0..<pdfDocument2!.pageCount {
+                    let page: PDFPage = (pdfDocument2?.page(at: i))!
+                    pages.append(page)
+                }
+                
+                for i in 0..<pdfDocument2!.pageCount {
+                    let tempPage: PDFPage = pages[i]
+                    let page = KMPrintPage()
+                    page.pages = pages
+                    page.page = pages[i]
+                    page.data = model
+                    page.drawBlock = { box, context, pages, page, data in
+                        KMPrintPresenter.drawPage(context: context, page: page, model: data)
+                    }
+                    page.setBounds(tempPage.bounds(for: .cropBox), for: .cropBox)
+                    tempDocument.insert(page, at: Int(i))
+                }
+                
+                
+                self.previewView.document = tempDocument
+                self.previewView.autoScales = true
+                self.previewView.displayMode = .singlePage
+                self.previewView.documentView?.enclosingScrollView?.scrollerStyle = .overlay
+                if model?.page.operation.type == .poster {
+                    
+                } else {
+                    self.presenter.initPresenter(delegate: self, view: self.previewView)
+                }
+                self.previewView.needsDisplay = true
+                self.reloadData()
             }
-            self.reloadData()
         }
     }