123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- //
- // FileConverter.swift
- // KdanAuto
- //
- // Created by 朱东勇 on 2022/12/21.
- //
- import Foundation
- import ComPDFKit_Conversion
- import PDFKit
- let KMComPDFKit_Conversion_FreeKey = "0GlqazsfP4IwQoWL/6baqg+CN7l67d9FF0N3U4bBSLhmvR60yAnkkBesqA8agcAaswc5ugjeuEvGnUqi7SLvz6k8f7LqcbDiVIQLTv57527J0AoKYSECIVvbiY9V1ITRv0GI+05iQtIRD9CPDVIoSf/TPiylxglXhnl6PeFazoA=";
- let KMComPDFKit_Conversion_FreeSecret = "mG0c3O3Mzeu5dkZJW3gpqqFRGIktEUTr3N7MWERzNh/7rDlDXAYp6ebnHnHEdcFleiP4OkM17dhQ9pWvnVPbJOIDC/XIeZ7j/POUbhtIPbOZ3pnCWorSKPeQWqupmvSjMv7C2jvq4o0q6sQtN3jR4897KG6mIUGJSRuOsvjYroXP4neJlIQii5tjFEKC59L5S32wgJX2ceb3xBQSCnO9vtnsa41fJuMqWbPW2c3qJUemdtKP7E4eFYSl6tjgcetK";
- let KMPDFConvertOptionsKeyImageDPI = "KMPDFConvertOptionsKeyImageDPI"
- let KMPDFConvertOptionsKeyImageWithAnnotation = "KMPDFConvertOptionsKeyImageWithAnnotation"
- let kDefaultPassword = "666666"
- class FileConverter : NSObject, CPDFConverterDelegate, CPDFConverterFPDelegate {
-
- var pdfConverter:CPDFConverter?
- var fpConverter:CPDFConverterFP?
- var options:CPDFConvertOptions?
-
- 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)
- var didSuccess:Bool = false
-
- static var instance = FileConverter()
- class func shared() -> FileConverter {
- return instance
- }
-
- func converter(_ inSrcPath: String, inDesPath: String) -> Bool {
- self.srcPath = inSrcPath
- self.desPath = inDesPath
-
- if !FileManager.default.fileExists(atPath: srcPath) {
- return false
- }
- if FileManager.default.fileExists(atPath: desPath) {
- try! FileManager.default.removeItem(atPath: desPath)
- }
- let attributy = try! FileManager.default.attributesOfItem(atPath: srcPath)
- let fileType = attributy[FileAttributeKey.type] as! FileAttributeType
- if NSString(string: FileAttributeType.typeSymbolicLink.rawValue).isEqual(to: fileType.rawValue) {
- let symbolicLink = try? FileManager.default.destinationOfSymbolicLink(atPath: self.srcPath)
- if nil != symbolicLink {
- self.srcPath = symbolicLink!
- }
- }
-
- accessSemaphore?.wait()
- if FileManager.default.fileExists(atPath: self.desPath) {
- try! FileManager.default.removeItem(atPath: self.desPath)
- }
-
- self.pathExtension = NSString(string: self.desPath).pathExtension
- // let outputPath = NSString(string: self.desPath).deletingPathExtension
- // let output = self.desPath
- self.convertQueue.async {
- let url = URL.init(fileURLWithPath: self.srcPath, isDirectory: false)
- let document = PDFDocument(url: url)
- if document == nil {
- self.accessSemaphore?.signal()
- return
- }
- let pageCount = document!.pageCount
-
- self.pages = []
- for i in 1...pageCount {
- self.pages.append(i)
- }
-
- // if NSArray(array: ["ppt", "PPT", "PPTX", "pptx"]).contains(pathExtension) {
- // self.pdfConverter = CPDFConverterPPT.init(url: url, password: kDefaultPassword)
- // self.pdfConverter?.delegate = self
- // self.options = CPDFConvertPPTOptions()
- // self.pdfConverter?.convert(toFilePath: outputPath,
- // pageIndexs: [], options: nil)
- // }else
- // if NSArray(array: ["doc", "DOC", "docx", "DOCX"]).contains(pathExtension) {
- // self.pdfConverter = CPDFConverterWord.init(url: url, password: nil)
- // self.pdfConverter?.delegate = self
- // self.options = CPDFConvertWordOptions()
- // 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.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.self.desPath,
- // pageIndexs: pagesArray, options: nil)
- // }else {
- if self.fpConverter == nil {
- self.fpConverter = CPDFConverterFP.init()
- self.fpConverter?.setDelegate(self)
- }else {
- self.fpConverter?.stopConvertsionIfNeed()
- }
-
-
- let needMerge = NSArray(array: ["csv", "CSV"]).contains(self.pathExtension)
- // let allInOneSheetKey = String(CPDFConvertOptionsKey.allInOneSheet)
-
- // 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)
- ])
- // }
- // }
- }
-
- semaphore?.wait()
- accessSemaphore?.signal()
-
- return didSuccess
- }
-
- /// CPDFConverterDelegate
- func converter(_ converter: CPDFConverter!, didStartConvert error: Error!) {
-
- }
-
- func converter(_ converter: CPDFConverter!, didEndConvert error: Error!) {
- didSuccess = nil == error
-
- sleep(2)
-
- if self.pdfConverter?.isConverting == true {
- self.pdfConverter?.cancel()
- }
- self.pdfConverter?.delegate = nil
- self.pdfConverter = nil
- semaphore?.signal()
- }
-
- func converter(_ converter: CPDFConverter!, pageIndex index: UInt, pageCount count: UInt) {
-
- }
-
- /// CPDFConverterFPDelegate
- func fppdfConverter(_ converter: Any!, didEndConversion error: Error!) {
- didSuccess = nil == error
- self.fpConverter?.stopConvertsionIfNeed()
-
- sleep(2)
-
- // self.fpConverter?.stopConvertsionIfNeed()
- // self.fpConverter?.setDelegate(nil)
- // self.fpConverter = nil
- //
- semaphore?.signal()
- }
-
- }
|