|
@@ -24,8 +24,11 @@ class FileConverter : NSObject, CPDFConverterDelegate, CPDFConverterFPDelegate {
|
|
|
var fpConverter:CPDFConverterFP?
|
|
|
var options:CPDFConvertOptions?
|
|
|
|
|
|
- var _srcPath:String = ""
|
|
|
- var _desPath:String = ""
|
|
|
+ var srcPath:String = ""
|
|
|
+ var desPath:String = ""
|
|
|
+ var pages:[Int] = []
|
|
|
+ var pathExtension = ""
|
|
|
+ var convertQueue = DispatchQueue.main
|
|
|
|
|
|
var semaphore:DispatchSemaphore? = DispatchSemaphore.init(value: 0)
|
|
|
var accessSemaphore:DispatchSemaphore? = DispatchSemaphore.init(value: 1)
|
|
@@ -36,37 +39,30 @@ class FileConverter : NSObject, CPDFConverterDelegate, CPDFConverterFPDelegate {
|
|
|
return instance
|
|
|
}
|
|
|
|
|
|
- func converter(_ srcPath: String, desPath: String) -> Bool {
|
|
|
- _srcPath = srcPath
|
|
|
- _desPath = desPath
|
|
|
+ func converter(_ inSrcPath: String, inDesPath: String) -> Bool {
|
|
|
+ self.srcPath = inSrcPath
|
|
|
+ self.desPath = inDesPath
|
|
|
|
|
|
- if !FileManager.default.fileExists(atPath: _srcPath) {
|
|
|
+ if !FileManager.default.fileExists(atPath: srcPath) {
|
|
|
return false
|
|
|
}
|
|
|
|
|
|
accessSemaphore?.wait()
|
|
|
- if FileManager.default.fileExists(atPath: _desPath) {
|
|
|
- try! FileManager.default.removeItem(atPath: _desPath)
|
|
|
+ if FileManager.default.fileExists(atPath: self.desPath) {
|
|
|
+ try! FileManager.default.removeItem(atPath: self.desPath)
|
|
|
}
|
|
|
|
|
|
- let url = URL.init(fileURLWithPath: _srcPath, isDirectory: false)
|
|
|
- let pathExtension = NSString(string: _desPath).pathExtension
|
|
|
- let outputPath = NSString(string: _desPath).deletingPathExtension
|
|
|
- let output = _desPath
|
|
|
-
|
|
|
- DispatchQueue.global(qos:.default).async {
|
|
|
- self.fpConverter?.setDelegate(nil)
|
|
|
- self.fpConverter = nil
|
|
|
- self.pdfConverter?.delegate = nil
|
|
|
- self.pdfConverter = nil
|
|
|
+ let url = URL.init(fileURLWithPath: self.srcPath, isDirectory: false)
|
|
|
+ self.pathExtension = NSString(string: self.desPath).pathExtension
|
|
|
+// let outputPath = NSString(string: self.desPath).deletingPathExtension
|
|
|
+// let output = self.desPath
|
|
|
+ self.convertQueue.async {
|
|
|
let document = PDFDocument.init(url: url)
|
|
|
- let pages = document!.pageCount - 1
|
|
|
+ let pageCount = document!.pageCount
|
|
|
|
|
|
- var pagesArray = []
|
|
|
-// var i = 0
|
|
|
- for i in 0...pages {
|
|
|
- pagesArray.append(i)
|
|
|
-// i = i+1
|
|
|
+ self.pages = []
|
|
|
+ for i in 1...pageCount {
|
|
|
+ self.pages.append(i)
|
|
|
}
|
|
|
|
|
|
// if NSArray(array: ["ppt", "PPT", "PPTX", "pptx"]).contains(pathExtension) {
|
|
@@ -80,37 +76,44 @@ class FileConverter : NSObject, CPDFConverterDelegate, CPDFConverterFPDelegate {
|
|
|
// self.pdfConverter = CPDFConverterWord.init(url: url, password: nil)
|
|
|
// self.pdfConverter?.delegate = self
|
|
|
// self.options = CPDFConvertWordOptions()
|
|
|
-// self.pdfConverter?.convert(toFilePath: self._desPath,
|
|
|
+// self.pdfConverter?.convert(toFilePath: self.self.desPath,
|
|
|
// pageIndexs: pagesArray, options: nil)
|
|
|
// }else
|
|
|
// if NSArray(array: ["xls", "XLS", "xlsx", "XLSX"]).contains(pathExtension) {
|
|
|
// self.pdfConverter = CPDFConverterTable.init(url: url, password: nil)
|
|
|
// self.pdfConverter?.delegate = self
|
|
|
// self.options = CPDFConvertTableOptions()
|
|
|
-// self.pdfConverter?.convert(toFilePath: self._desPath,
|
|
|
+// self.pdfConverter?.convert(toFilePath: self.self.desPath,
|
|
|
// pageIndexs: pagesArray, options: nil)
|
|
|
// }else if NSArray(array: ["csv", "CSV"]).contains(pathExtension) {
|
|
|
// self.pdfConverter = CPDFConverterCsv.init(url: url, password: nil)
|
|
|
// self.pdfConverter?.delegate = self
|
|
|
// self.options = CPDFConvertCsvOptions()
|
|
|
-// self.pdfConverter?.convert(toFilePath: self._desPath,
|
|
|
+// self.pdfConverter?.convert(toFilePath: self.self.desPath,
|
|
|
// pageIndexs: pagesArray, options: nil)
|
|
|
// }else {
|
|
|
- self.fpConverter = CPDFConverterFP.init()
|
|
|
- self.fpConverter?.setDelegate(self)
|
|
|
+ if self.fpConverter == nil {
|
|
|
+ self.fpConverter = CPDFConverterFP.init()
|
|
|
+ self.fpConverter?.setDelegate(self)
|
|
|
+ }else {
|
|
|
+ self.fpConverter?.stopConvertsionIfNeed()
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
- let needMerge = NSArray(array: ["csv", "CSV"]).contains(pathExtension)
|
|
|
+ let needMerge = NSArray(array: ["csv", "CSV"]).contains(self.pathExtension)
|
|
|
// let allInOneSheetKey = String(CPDFConvertOptionsKey.allInOneSheet)
|
|
|
|
|
|
- self.fpConverter?.convertPDF(atPath: self._srcPath,
|
|
|
- pdfPassword: nil,
|
|
|
- pdfPageIndexs: pagesArray,
|
|
|
- destDocType: pathExtension,
|
|
|
- destDocPath: self._desPath,
|
|
|
+// Task.init {
|
|
|
+ self.fpConverter?.convertPDF(atPath: self.srcPath,
|
|
|
+ pdfPassword: nil,
|
|
|
+ pdfPageIndexs: self.pages,
|
|
|
+ destDocType: self.pathExtension,
|
|
|
+ destDocPath: self.desPath,
|
|
|
moreOptions: [
|
|
|
- "KMPDFConvertOptionsKeyImageDPI" : "72",
|
|
|
- "CPDFConvertOptionsKeyAllInOneSheet":NSNumber(booleanLiteral: needMerge)
|
|
|
- ])
|
|
|
+ "KMPDFConvertOptionsKeyImageDPI" : "72",
|
|
|
+ "CPDFConvertOptionsKeyAllInOneSheet":NSNumber(booleanLiteral: needMerge)
|
|
|
+ ])
|
|
|
+// }
|
|
|
// }
|
|
|
}
|
|
|
|
|
@@ -128,8 +131,13 @@ class FileConverter : NSObject, CPDFConverterDelegate, CPDFConverterFPDelegate {
|
|
|
func converter(_ converter: CPDFConverter!, didEndConvert error: Error!) {
|
|
|
didSuccess = nil == error
|
|
|
|
|
|
- sleep(1)
|
|
|
+ sleep(2)
|
|
|
|
|
|
+ if self.pdfConverter?.isConverting == true {
|
|
|
+ self.pdfConverter?.cancel()
|
|
|
+ }
|
|
|
+ self.pdfConverter?.delegate = nil
|
|
|
+ self.pdfConverter = nil
|
|
|
semaphore?.signal()
|
|
|
}
|
|
|
|
|
@@ -140,9 +148,14 @@ class FileConverter : NSObject, CPDFConverterDelegate, CPDFConverterFPDelegate {
|
|
|
/// CPDFConverterFPDelegate
|
|
|
func fppdfConverter(_ converter: Any!, didEndConversion error: Error!) {
|
|
|
didSuccess = nil == error
|
|
|
+ self.fpConverter?.stopConvertsionIfNeed()
|
|
|
|
|
|
- sleep(1)
|
|
|
+ sleep(2)
|
|
|
|
|
|
+// self.fpConverter?.stopConvertsionIfNeed()
|
|
|
+// self.fpConverter?.setDelegate(nil)
|
|
|
+// self.fpConverter = nil
|
|
|
+//
|
|
|
semaphore?.signal()
|
|
|
}
|
|
|
|