CSignatureManager.swift 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. //
  2. // CSignatureManager.swift
  3. // ComPDFKit_Tools
  4. //
  5. // Copyright © 2014-2024 PDF Technologies, Inc. All Rights Reserved.
  6. //
  7. // THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
  8. // AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE ComPDFKit LICENSE AGREEMENT.
  9. // UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
  10. // This notice may not be removed from this file.
  11. //
  12. import UIKit
  13. let kPDFSignatureDataFileName = "PDFKitResources/Signature/PDFSignatureData.plist"
  14. let kPDFSignatureImageFolder = "PDFKitResources/Signature/PDFSignatureImageFolder"
  15. class CSignatureManager {
  16. var signatures: [String] = []
  17. static let sharedManager = CSignatureManager()
  18. private init() {
  19. let library = NSSearchPathForDirectoriesInDomains(.libraryDirectory, .userDomainMask, true).first ?? ""
  20. let filePath = (library as NSString).appendingPathComponent(kPDFSignatureDataFileName)
  21. let folderPath = (library as NSString).appendingPathComponent(kPDFSignatureImageFolder)
  22. if FileManager.default.fileExists(atPath: filePath) {
  23. var signatures = [String]()
  24. if let fileNames = NSArray(contentsOfFile: filePath) as? [String] {
  25. for fileName in fileNames {
  26. signatures.append((folderPath as NSString).appendingPathComponent(fileName))
  27. }
  28. }
  29. self.signatures = signatures
  30. } else {
  31. self.signatures = []
  32. }
  33. }
  34. func randomString() -> String {
  35. let cfuuid = CFUUIDCreate(kCFAllocatorDefault)
  36. let cfstring = CFUUIDCreateString(kCFAllocatorDefault, cfuuid) as String
  37. return cfstring
  38. }
  39. func save() {
  40. let library = FileManager.default.urls(for: .libraryDirectory, in: .userDomainMask).first ?? URL(fileURLWithPath: "")
  41. let filePath = library.appendingPathComponent(kPDFSignatureDataFileName).path
  42. if FileManager.default.fileExists(atPath: filePath) {
  43. try? FileManager.default.removeItem(atPath: filePath)
  44. }
  45. var fileNames = [String]()
  46. for filePath in signatures {
  47. fileNames.append(URL(fileURLWithPath: filePath).lastPathComponent)
  48. }
  49. if fileNames.count > 0 {
  50. (fileNames as NSArray).write(toFile: filePath, atomically: true)
  51. }
  52. }
  53. func addImageSignature(_ image: UIImage?) {
  54. let library = FileManager.default.urls(for: .libraryDirectory, in: .userDomainMask).first ?? URL(fileURLWithPath: "")
  55. let folderPath = library.appendingPathComponent(kPDFSignatureImageFolder).path
  56. let randomStr = self.randomString()
  57. if let image = image {
  58. if !FileManager.default.fileExists(atPath: folderPath) {
  59. try? FileManager.default.createDirectory(atPath: folderPath, withIntermediateDirectories: true, attributes: nil)
  60. }
  61. let imageName = randomStr.appending(".png")
  62. let imagePath = (folderPath as NSString).appendingPathComponent(imageName)
  63. if let imageData = image.pngData() {
  64. if (try? imageData.write(to: URL(fileURLWithPath: imagePath))) != nil {
  65. var array = self.signatures
  66. array.insert(imagePath, at: 0)
  67. self.signatures = array
  68. self.save()
  69. }
  70. }
  71. }
  72. }
  73. func addTextSignature(_ text: String) {
  74. var array = self.signatures
  75. array.insert(text, at: 0)
  76. self.signatures = array
  77. self.save()
  78. }
  79. func removeSignatures(at indexes: IndexSet) {
  80. let signaturesToRemove = self.signatures.enumerated().filter { indexes.contains($0.offset) }.map { $0.element }
  81. for filePath in signaturesToRemove {
  82. try? FileManager.default.removeItem(atPath: filePath)
  83. }
  84. var array = NSMutableArray(array: self.signatures)
  85. let indexesToRemove = IndexSet(indexes)
  86. array.removeObjects(at: indexesToRemove)
  87. self.signatures = array as? [String] ?? []
  88. self.save()
  89. }
  90. func removeSignature(at row: Int) {
  91. var array = self.signatures
  92. array.remove(at: row)
  93. self.signatures = array
  94. self.save()
  95. }
  96. }