|
@@ -51,7 +51,7 @@ class KMPrintPresenter: NSObject {
|
|
}
|
|
}
|
|
|
|
|
|
protocol KMPrintPresenterDeleage: NSObject {
|
|
protocol KMPrintPresenterDeleage: NSObject {
|
|
- func showData(presenter: KMPrintPresenter, document: CPDFDocument)
|
|
|
|
|
|
+ func showData(presenter: KMPrintPresenter, document: PDFDocument)
|
|
}
|
|
}
|
|
|
|
|
|
protocol KMPrintPresenterDocument: NSObject {}
|
|
protocol KMPrintPresenterDocument: NSObject {}
|
|
@@ -62,20 +62,20 @@ extension KMPrintPresenter: KMPrintPresenterDocument {
|
|
@param data 数据
|
|
@param data 数据
|
|
@retrun document
|
|
@retrun document
|
|
*/
|
|
*/
|
|
- func updatePrintDocument(documentURL: URL, data: KMPrintModel) -> CPDFDocument {
|
|
|
|
|
|
+ func updatePrintDocument(documentURL: URL, data: KMPrintModel) -> PDFDocument {
|
|
// 获取基本参数
|
|
// 获取基本参数
|
|
let printModel: KMPrintModel = data
|
|
let printModel: KMPrintModel = data
|
|
//获取总page
|
|
//获取总page
|
|
let pages = self.fetchPages(documentURL, printModel.page)
|
|
let pages = self.fetchPages(documentURL, printModel.page)
|
|
//绘制PDF
|
|
//绘制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 {
|
|
if self.delegate != nil {
|
|
self.delegate?.showData(presenter: self, document: result)
|
|
self.delegate?.showData(presenter: self, document: result)
|
|
}
|
|
}
|
|
- KMPrint("保存地址" + filePath)
|
|
|
|
|
|
+// KMPrint("保存地址" + filePath)
|
|
return result
|
|
return result
|
|
}
|
|
}
|
|
|
|
|
|
@@ -87,7 +87,7 @@ extension KMPrintPresenter: KMPrintPresenterDocument {
|
|
*/
|
|
*/
|
|
func drawPages(_ toFilePath: String?,
|
|
func drawPages(_ toFilePath: String?,
|
|
_ printModel: KMPrintModel,
|
|
_ printModel: KMPrintModel,
|
|
- _ pages: [KMPrintDrawPage]) -> String {
|
|
|
|
|
|
+ _ pages: [KMPrintDrawPage]) -> PDFDocument {
|
|
/**
|
|
/**
|
|
参数
|
|
参数
|
|
*/
|
|
*/
|
|
@@ -98,23 +98,45 @@ extension KMPrintPresenter: KMPrintPresenterDocument {
|
|
//每页page数
|
|
//每页page数
|
|
let pageOfPaperCount: Int = self.fetchPageOfPaper(printModel.page)
|
|
let pageOfPaperCount: Int = self.fetchPageOfPaper(printModel.page)
|
|
//获取每张纸的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 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 pageOfPaperCount 每张纸的page数量
|
|
@param pages 所有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 {
|
|
guard pages.count != 0 else {
|
|
return []
|
|
return []
|
|
}
|
|
}
|
|
@@ -140,7 +162,7 @@ extension KMPrintPresenter: KMPrintPresenterDocument {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- var drawPages:[[KMPrintDrawPage]] = []
|
|
|
|
|
|
+ var drawPages:[KMPrintDrawPage] = []
|
|
for i in 0..<paperCount {
|
|
for i in 0..<paperCount {
|
|
//获取多页page
|
|
//获取多页page
|
|
var tempPags: [KMPrintDrawPage] = []
|
|
var tempPags: [KMPrintDrawPage] = []
|
|
@@ -200,7 +222,9 @@ extension KMPrintPresenter: KMPrintPresenterDocument {
|
|
page2.showRect = pageShowRect2
|
|
page2.showRect = pageShowRect2
|
|
tempPags.append(page2)
|
|
tempPags.append(page2)
|
|
|
|
|
|
- drawPages.append(tempPags)
|
|
|
|
|
|
+ let drawPage = KMPrintDrawPage()
|
|
|
|
+ drawPage.pages = tempPags
|
|
|
|
+ drawPages.append(drawPage)
|
|
} else {
|
|
} else {
|
|
for j in 0..<pageOfPaperCount {
|
|
for j in 0..<pageOfPaperCount {
|
|
let pageIndex = i / pageRepetitionCount
|
|
let pageIndex = i / pageRepetitionCount
|
|
@@ -222,7 +246,9 @@ extension KMPrintPresenter: KMPrintPresenterDocument {
|
|
tempPags.append(drawPage)
|
|
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的下标
|
|
@param selectPages 当type 为custom时 传入选中page的下标
|
|
*/
|
|
*/
|
|
static func creatDocument(_ url: URL) -> CPDFDocument {
|
|
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)!
|
|
let document = CPDFDocument(url: url)!
|
|
// document.importPages(IndexSet(integer: 0), from: document, at: 0)
|
|
// document.importPages(IndexSet(integer: 0), from: document, at: 0)
|
|
let count = document.pageCount
|
|
let count = document.pageCount
|
|
- for _ in 0...(count - 1) {
|
|
|
|
|
|
+ for _ in 0..<count {
|
|
document.removePage(at: 0)
|
|
document.removePage(at: 0)
|
|
}
|
|
}
|
|
return document
|
|
return document
|
|
@@ -281,6 +307,7 @@ extension KMPrintPresenter: KMPrintPresenterDocument {
|
|
@param selectPages 当type 为custom时 传入选中page的下标
|
|
@param selectPages 当type 为custom时 传入选中page的下标
|
|
*/
|
|
*/
|
|
func fetchPages(_ documentURL: URL, _ pageModel: KMPrintPageModel) -> [KMPrintDrawPage] {
|
|
func fetchPages(_ documentURL: URL, _ pageModel: KMPrintPageModel) -> [KMPrintDrawPage] {
|
|
|
|
+// let document = CPDFDocument.init(url: documentURL)!
|
|
let document = PDFDocument.init(url: documentURL)!
|
|
let document = PDFDocument.init(url: documentURL)!
|
|
document.unlock(withPassword: password)
|
|
document.unlock(withPassword: password)
|
|
var pageIndexs: [Int] = []
|
|
var pageIndexs: [Int] = []
|
|
@@ -291,20 +318,20 @@ extension KMPrintPresenter: KMPrintPresenterDocument {
|
|
switch range.type {
|
|
switch range.type {
|
|
case .allPage:
|
|
case .allPage:
|
|
for index in 0...document.pageCount - 1 {
|
|
for index in 0...document.pageCount - 1 {
|
|
- pageIndexs.append(index)
|
|
|
|
|
|
+ pageIndexs.append(Int(index))
|
|
}
|
|
}
|
|
|
|
|
|
case .evenPage:
|
|
case .evenPage:
|
|
for index in 0...document.pageCount - 1 {
|
|
for index in 0...document.pageCount - 1 {
|
|
if index % 2 == 0 {
|
|
if index % 2 == 0 {
|
|
- pageIndexs.append(index)
|
|
|
|
|
|
+ pageIndexs.append(Int(index))
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
case .oddPage:
|
|
case .oddPage:
|
|
for index in 0...document.pageCount - 1 {
|
|
for index in 0...document.pageCount - 1 {
|
|
if index % 2 != 0 {
|
|
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 {
|
|
func dealPageContent (_ contentType: KMPrintContentType, _ pages: [KMPrintDrawPage]) -> Void {
|
|
for page in pages {
|
|
for page in pages {
|
|
|
|
+// let annoations: [CPDFAnnotation] = page.page.annotations
|
|
let annoations: [PDFAnnotation] = page.page.annotations
|
|
let annoations: [PDFAnnotation] = page.page.annotations
|
|
//内容处理
|
|
//内容处理
|
|
switch contentType {
|
|
switch contentType {
|
|
@@ -389,7 +417,7 @@ extension KMPrintPresenter: KMPrintPresenterDocument {
|
|
@param context
|
|
@param context
|
|
@pages page数组 [CPDFPage]
|
|
@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
|
|
paper
|
|
@@ -415,9 +443,9 @@ extension KMPrintPresenter: KMPrintPresenterDocument {
|
|
for i in 0..<Int(columnAndRow.x) {
|
|
for i in 0..<Int(columnAndRow.x) {
|
|
for j in 0..<(Int(columnAndRow.y)) {
|
|
for j in 0..<(Int(columnAndRow.y)) {
|
|
let index = j + i * 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
|
|
let rect = page.showRect
|
|
//裁剪当前Page
|
|
//裁剪当前Page
|
|
page.page.setBounds(page.cropRect, for: .cropBox)
|
|
page.page.setBounds(page.cropRect, for: .cropBox)
|
|
@@ -474,6 +502,8 @@ extension KMPrintPresenter: KMPrintPresenterDocument {
|
|
//缩放
|
|
//缩放
|
|
context.scaleBy(x: CGFloat(scale), y: CGFloat(scale))
|
|
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.draw(with: PDFDisplayBox.cropBox, to: context)
|
|
page.page.transform(context, for: PDFDisplayBox.cropBox)
|
|
page.page.transform(context, for: PDFDisplayBox.cropBox)
|
|
if border {
|
|
if border {
|
|
@@ -1135,13 +1165,13 @@ protocol KMPrintPresenterProtocol: NSObject {
|
|
//MARK: 渲染单页
|
|
//MARK: 渲染单页
|
|
extension KMPrintPresenter {
|
|
extension KMPrintPresenter {
|
|
static func drawPage(context: CGContext, page: PDFPage, model: KMPrintModel) {
|
|
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,
|
|
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)
|
|
}
|
|
}
|
|
}
|
|
}
|