CSignatureManager.m 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. //
  2. // CSignatureManager.m
  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 "CSignatureManager.h"
  13. #define kPDFSignatureDataFileName (@"PDFKitResources/Signature/PDFSignatureData.plist")
  14. #define kPDFSignatureImageFolder (@"PDFKitResources/Signature/PDFSignatureImageFolder")
  15. @implementation CSignatureManager
  16. static CSignatureManager *_sharedSignManager;
  17. + (CSignatureManager *)sharedManager {
  18. if (!_sharedSignManager)
  19. _sharedSignManager = [[CSignatureManager alloc] init];
  20. return _sharedSignManager;
  21. }
  22. - (instancetype)init {
  23. if (self = [super init]) {
  24. NSString *library = [NSHomeDirectory() stringByAppendingPathComponent:@"Library"];
  25. NSString *filePath = [library stringByAppendingPathComponent:kPDFSignatureDataFileName];
  26. NSString *folderPath = [library stringByAppendingPathComponent:kPDFSignatureImageFolder];
  27. if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
  28. NSMutableArray *signatures = [NSMutableArray array];
  29. NSArray *fileNames = [[NSArray alloc] initWithContentsOfFile:filePath];
  30. for (NSString *fileName in fileNames) {
  31. [signatures addObject:[folderPath stringByAppendingPathComponent:fileName]];
  32. }
  33. _signatures = signatures;
  34. } else {
  35. _signatures = [[NSArray alloc] init];
  36. }
  37. }
  38. return self;
  39. }
  40. - (NSString *)randomString {
  41. CFUUIDRef cfuuid = CFUUIDCreate(kCFAllocatorDefault);
  42. CFStringRef cfstring = CFUUIDCreateString(kCFAllocatorDefault, cfuuid);
  43. NSString *cfuuidString = [NSString stringWithString:(__bridge NSString *)cfstring];
  44. CFRelease(cfuuid);
  45. CFRelease(cfstring);
  46. return cfuuidString;
  47. }
  48. - (void)save {
  49. NSString *library = [NSHomeDirectory() stringByAppendingPathComponent:@"Library"];
  50. NSString *filePath = [library stringByAppendingPathComponent:kPDFSignatureDataFileName];
  51. if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
  52. [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil];
  53. }
  54. NSMutableArray *fileNames = [NSMutableArray array];
  55. for (NSString *filePath in self.signatures) {
  56. [fileNames addObject:filePath.lastPathComponent];
  57. }
  58. if (fileNames.count > 0) {
  59. [fileNames writeToFile:filePath atomically:YES];
  60. }
  61. }
  62. - (void)addImageSignature:(UIImage *)image {
  63. NSString *library = [NSHomeDirectory() stringByAppendingPathComponent:@"Library"];
  64. NSString *folderPath = [library stringByAppendingPathComponent:kPDFSignatureImageFolder];
  65. NSString *randomStr = [self randomString];
  66. if (image) {
  67. if (![[NSFileManager defaultManager] fileExistsAtPath:folderPath]) {
  68. [[NSFileManager defaultManager] createDirectoryAtPath:folderPath withIntermediateDirectories:YES attributes:nil error:nil];
  69. }
  70. NSString *imageName = [randomStr stringByAppendingPathExtension:@"png"];
  71. NSString *imagePath = [folderPath stringByAppendingPathComponent:imageName];
  72. if ([UIImagePNGRepresentation(image) writeToFile:imagePath atomically:YES]) {
  73. NSMutableArray *array = [NSMutableArray arrayWithArray:self.signatures];
  74. [array insertObject:imagePath atIndex:0];
  75. self.signatures = array;
  76. [self save];
  77. }
  78. }
  79. }
  80. - (void)addTextSignature:(NSString *)text {
  81. NSMutableArray *array = [NSMutableArray arrayWithArray:self.signatures];
  82. [array insertObject:text atIndex:0];
  83. self.signatures = array;
  84. [self save];
  85. }
  86. - (void)removeSignaturesAtIndexes:(NSIndexSet *)indexes {
  87. for (NSString *filePath in [self.signatures objectsAtIndexes:indexes]) {
  88. [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil];
  89. }
  90. NSMutableArray *array = [NSMutableArray arrayWithArray:self.signatures];
  91. [array removeObjectsAtIndexes:indexes];
  92. self.signatures = array;
  93. [self save];
  94. }
  95. - (void)removeSignaturesAtIndexe:(NSInteger)row {
  96. NSMutableArray *array = [NSMutableArray arrayWithArray:self.signatures];
  97. [array removeObjectAtIndex:row];
  98. self.signatures = array;
  99. [self save];
  100. }
  101. @end