|
@@ -1,310 +0,0 @@
|
|
|
-//
|
|
|
-// KMSelfSignAnnotationFreeText.m
|
|
|
-// SignFlow
|
|
|
-//
|
|
|
-// Created by wanjun on 2021/6/24.
|
|
|
-//
|
|
|
-
|
|
|
-#import "KMSelfSignAnnotationFreeText.h"
|
|
|
-
|
|
|
-@interface KMSelfSignAnnotationFreeText ()
|
|
|
-
|
|
|
-@property (nonatomic, assign, readwrite) KMSelfSignAnnotationFreeTextSubType subType;
|
|
|
-@property (nonatomic, retain) NSDate *date;
|
|
|
-@property (nonatomic, retain) NSArray *includeTimeDateArray;
|
|
|
-@property (nonatomic, retain) NSArray *excludeTimeDateArray;
|
|
|
-
|
|
|
-@end
|
|
|
-
|
|
|
-@implementation KMSelfSignAnnotationFreeText
|
|
|
-
|
|
|
-
|
|
|
-+ (NSArray *)dateFormatterArray
|
|
|
-{
|
|
|
- return @[@"Default",
|
|
|
- @"m/d",
|
|
|
- @"m/d/yy",
|
|
|
- @"m/d/yyyy",
|
|
|
- @"mm/dd/yy",
|
|
|
- @"mm/dd/yyyy",
|
|
|
- @"d/m/yy",
|
|
|
- @"d/m/yyyy",
|
|
|
- @"dd/mm/yy",
|
|
|
- @"dd/mm/yyyy",
|
|
|
- @"mm/yy",
|
|
|
- @"mm/yyyy",
|
|
|
- @"m.d.yy",
|
|
|
- @"m.d.yyyy",
|
|
|
- @"mm.dd.yy",
|
|
|
- @"mm.dd.yyyy",
|
|
|
- @"mm.yy",
|
|
|
- @"mm.yyyy",
|
|
|
- @"d.m.yy",
|
|
|
- @"d.m.yyyy",
|
|
|
- @"dd.mm.yy",
|
|
|
- @"dd.mm.yyyy",
|
|
|
- @"yy-mm-dd",
|
|
|
- @"yyyy-mm-dd",
|
|
|
- ];
|
|
|
-}
|
|
|
-
|
|
|
-+ (NSString *)fetchDateStringWithIndex:(NSInteger)index includeTime:(BOOL)includeTime
|
|
|
-{
|
|
|
- NSArray *dateFormatterArray = [KMSelfSignAnnotationFreeText dateFormatterArray];
|
|
|
-
|
|
|
- NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
|
|
|
- if (index < 0 || index > dateFormatterArray.count - 1) {
|
|
|
- index = 0;
|
|
|
- }
|
|
|
-
|
|
|
- NSString *dateStyleString = [dateFormatterArray objectAtIndex:index];
|
|
|
- if ([dateStyleString isEqualToString:@"m/d"]) {
|
|
|
- if (includeTime) {
|
|
|
- formatter.dateFormat = @"M/dd HH:mm:ss";
|
|
|
- } else {
|
|
|
- formatter.dateFormat = @"M/dd";
|
|
|
- }
|
|
|
- }else if ([dateStyleString isEqualToString:@"m/d/yy"]){
|
|
|
- if (includeTime) {
|
|
|
- formatter.dateFormat = @"M/d/yy HH:mm:ss";
|
|
|
- } else {
|
|
|
- formatter.dateFormat = @"M/d/yy";
|
|
|
- }
|
|
|
- }else if ([dateStyleString isEqualToString:@"m/d/yyyy"]){
|
|
|
- if (includeTime) {
|
|
|
- formatter.dateFormat = @"M/d/yyyy HH:mm:ss";
|
|
|
- } else {
|
|
|
- formatter.dateFormat = @"M/d/yyyy";
|
|
|
- }
|
|
|
- }else if ([dateStyleString isEqualToString:@"mm/dd/yy"]){
|
|
|
- if (includeTime) {
|
|
|
- formatter.dateFormat = @"MM/dd/yy HH:mm:ss";
|
|
|
- } else {
|
|
|
- formatter.dateFormat = @"MM/dd/yy";
|
|
|
- }
|
|
|
- }else if ([dateStyleString isEqualToString:@"mm/dd/yyyy"]){
|
|
|
- if (includeTime) {
|
|
|
- formatter.dateFormat = @"MM/dd/yyyy HH:mm:ss";
|
|
|
- } else {
|
|
|
- formatter.dateFormat = @"MM/dd/yyyy";
|
|
|
- }
|
|
|
- }else if ([dateStyleString isEqualToString:@"d/m/yy"]){
|
|
|
- if (includeTime) {
|
|
|
- formatter.dateFormat = @"d/M/yy HH:mm:ss";
|
|
|
- } else {
|
|
|
- formatter.dateFormat = @"d/M/yy";
|
|
|
- }
|
|
|
- }else if ([dateStyleString isEqualToString:@"d/m/yyyy"]){
|
|
|
- if (includeTime) {
|
|
|
- formatter.dateFormat = @"d/M/yyyy HH:mm:ss";
|
|
|
- } else {
|
|
|
- formatter.dateFormat = @"d/M/yyyy";
|
|
|
- }
|
|
|
- }else if ([dateStyleString isEqualToString:@"dd/mm/yy"]){
|
|
|
- if (includeTime) {
|
|
|
- formatter.dateFormat = @"dd/MM/yy HH:mm:ss";
|
|
|
- } else {
|
|
|
- formatter.dateFormat = @"dd/MM/yy";
|
|
|
- }
|
|
|
-
|
|
|
- }else if ([dateStyleString isEqualToString:@"dd/mm/yyyy"]){
|
|
|
- if (includeTime) {
|
|
|
- formatter.dateFormat = @"dd/MM/yyyy HH:mm:ss";
|
|
|
- } else {
|
|
|
- formatter.dateFormat = @"dd/MM/yyyy";
|
|
|
- }
|
|
|
- }else if ([dateStyleString isEqualToString:@"mm/yy"]){
|
|
|
- if (includeTime) {
|
|
|
- formatter.dateFormat = @"MM/yy HH:mm:ss";
|
|
|
- } else {
|
|
|
- formatter.dateFormat = @"MM/yy";
|
|
|
- }
|
|
|
- }else if ([dateStyleString isEqualToString:@"mm/yyyy"]){
|
|
|
- if (includeTime) {
|
|
|
- formatter.dateFormat = @"MM/yyyy HH:mm:ss";
|
|
|
- } else {
|
|
|
- formatter.dateFormat = @"MM/yyyy";
|
|
|
- }
|
|
|
- }else if ([dateStyleString isEqualToString:@"m.d.yy"]){
|
|
|
- if (includeTime) {
|
|
|
- formatter.dateFormat = @"M.d.yy HH:mm:ss";
|
|
|
- } else {
|
|
|
- formatter.dateFormat = @"M.d.yy";
|
|
|
- }
|
|
|
- }else if ([dateStyleString isEqualToString:@"m.d.yyyy"]){
|
|
|
- if (includeTime) {
|
|
|
- formatter.dateFormat = @"M.d.yyyy HH:mm:ss";
|
|
|
- } else {
|
|
|
- formatter.dateFormat = @"M.d.yyyy";
|
|
|
- }
|
|
|
-
|
|
|
- }else if ([dateStyleString isEqualToString:@"mm.dd.yy"]){
|
|
|
- if (includeTime) {
|
|
|
- formatter.dateFormat = @"MM.dd.yy HH:mm:ss";
|
|
|
- } else {
|
|
|
- formatter.dateFormat = @"MM.dd.yy";
|
|
|
- }
|
|
|
- } else if ([dateStyleString isEqualToString:@"mm.dd.yyyy"]){
|
|
|
- if (includeTime) {
|
|
|
- formatter.dateFormat = @"MM.dd.yyyy HH:mm:ss";
|
|
|
- } else {
|
|
|
- formatter.dateFormat = @"MM.dd.yyyy";
|
|
|
- }
|
|
|
- } else if ([dateStyleString isEqualToString:@"mm.yy"]){
|
|
|
- if (includeTime) {
|
|
|
- formatter.dateFormat = @"MM.yy HH:mm:ss";
|
|
|
- } else {
|
|
|
- formatter.dateFormat = @"MM.yy";
|
|
|
- }
|
|
|
- } else if ([dateStyleString isEqualToString:@"mm.yyyy"]){
|
|
|
- if (includeTime) {
|
|
|
- formatter.dateFormat = @"MM.yyyy HH:mm:ss";
|
|
|
- } else {
|
|
|
- formatter.dateFormat = @"MM.yyyy";
|
|
|
- }
|
|
|
- } else if ([dateStyleString isEqualToString:@"d.m.yy"]){
|
|
|
- if (includeTime) {
|
|
|
- formatter.dateFormat = @"d.M.yy HH:mm:ss";
|
|
|
- } else {
|
|
|
- formatter.dateFormat = @"d.M.yy";
|
|
|
- }
|
|
|
- } else if ([dateStyleString isEqualToString:@"d.m.yyyy"]){
|
|
|
- if (includeTime) {
|
|
|
- formatter.dateFormat = @"d.M.yyyy HH:mm:ss";
|
|
|
- } else {
|
|
|
- formatter.dateFormat = @"d.M.yyyy";
|
|
|
- }
|
|
|
- } else if ([dateStyleString isEqualToString:@"dd.mm.yy"]){
|
|
|
- if (includeTime) {
|
|
|
- formatter.dateFormat = @"dd.MM.yy HH:mm:ss";
|
|
|
- } else {
|
|
|
- formatter.dateFormat = @"dd.MM.yy";
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- else if ([dateStyleString isEqualToString:@"dd.mm.yyyy"]){
|
|
|
- if (includeTime) {
|
|
|
- formatter.dateFormat = @"dd.MM.yyyy HH:mm:ss";
|
|
|
- } else {
|
|
|
- formatter.dateFormat = @"dd.MM.yyyy";
|
|
|
- }
|
|
|
-
|
|
|
- }else if ([dateStyleString isEqualToString:@"yy-mm-dd"]){
|
|
|
- if (includeTime) {
|
|
|
- formatter.dateFormat = @"yy-MM-dd HH:mm:ss";
|
|
|
- } else {
|
|
|
- formatter.dateFormat = @"yy-MM-dd";
|
|
|
- }
|
|
|
-
|
|
|
- } else if ([dateStyleString isEqualToString:@"yyyy-mm-dd"]){
|
|
|
- if (includeTime) {
|
|
|
- formatter.dateFormat = @"yyy-MM-dd HH:mm:ss";
|
|
|
- } else {
|
|
|
- formatter.dateFormat = @"yyy-MM-dd";
|
|
|
- }
|
|
|
- } else {
|
|
|
- formatter.dateStyle = kCFDateFormatterMediumStyle;
|
|
|
- if (includeTime) {
|
|
|
- formatter.timeStyle = kCFDateFormatterShortStyle;
|
|
|
- } else {
|
|
|
- formatter.timeStyle = kCFDateFormatterNoStyle;
|
|
|
- }
|
|
|
- }
|
|
|
- NSString *str = [formatter stringFromDate:[NSDate date]];
|
|
|
- return str;
|
|
|
-}
|
|
|
-
|
|
|
-#pragma mark - Getter & Setter
|
|
|
-
|
|
|
-- (void)setIncludeTime:(BOOL)includeTime {
|
|
|
- if (_includeTime != includeTime) {
|
|
|
- _includeTime = includeTime;
|
|
|
- self.contents = [KMSelfSignAnnotationFreeText fetchDateStringWithIndex:_dateFormatIndex includeTime:includeTime];
|
|
|
- [self updateBounds];
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-- (void)setDateFormatIndex:(NSInteger)dateForamtIndex {
|
|
|
- if (_dateFormatIndex != dateForamtIndex) {
|
|
|
- _dateFormatIndex = dateForamtIndex;
|
|
|
- self.contents = [KMSelfSignAnnotationFreeText fetchDateStringWithIndex:_dateFormatIndex includeTime:_includeTime];
|
|
|
- [self updateBounds];
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-#pragma mark - Init Methods
|
|
|
-
|
|
|
-- (id)initWithDocument:(CPDFDocument *)document subType:(KMSelfSignAnnotationFreeTextSubType)subType string:(nonnull NSString *)string bounds:(NSRect)bounds {
|
|
|
- self = [super initWithDocument:document];
|
|
|
- if (self) {
|
|
|
- CPDFAnnotationModel *annotationModel = nil;
|
|
|
- if(KMSelfSignAnnotationFreeTextSubType_Date == subType){
|
|
|
- annotationModel = [[CPDFAnnotationModel alloc] initWithAnnotationType:CAnnotationTypeSignDate];
|
|
|
- } else if (KMSelfSignAnnotationFreeTextSubType_Profile == subType) {
|
|
|
- annotationModel = [[CPDFAnnotationModel alloc] initWithAnnotationType:CAnnotationTypeSignText];
|
|
|
- } else {
|
|
|
- annotationModel = [[CPDFAnnotationModel alloc] initWithAnnotationType:CAnnotationTypeFreeText];
|
|
|
- }
|
|
|
- NSFont *font = [NSFont fontWithName:annotationModel.fontName size:annotationModel.fontSize] ? : [NSFont systemFontOfSize:13.0];
|
|
|
- if (font)
|
|
|
- [self setFont:font];
|
|
|
-
|
|
|
- [self setColor:annotationModel.color];
|
|
|
- [self setAlignment:annotationModel.alignment];
|
|
|
- CPDFBorder *border = [[CPDFBorder alloc] initWithStyle:annotationModel.style lineWidth:annotationModel.lineWidth dashPattern:annotationModel.dashPattern];
|
|
|
- if (!annotationModel.fontColor) {
|
|
|
- //设置字体颜色为透明度必须设一个颜色值,然后将透明度改为0
|
|
|
- [self setFontColor:[NSColor blackColor]];
|
|
|
- [self setOpacity:0];
|
|
|
- } else {
|
|
|
- [self setFontColor:annotationModel.fontColor];
|
|
|
- [self setOpacity:annotationModel.opacity];
|
|
|
- }
|
|
|
-
|
|
|
- if (subType == KMSelfSignAnnotationFreeTextSubType_FreeText) {
|
|
|
- } else if (subType == KMSelfSignAnnotationFreeTextSubType_Date) {
|
|
|
- NSInteger index = annotationModel.dateFormatIndex;
|
|
|
- BOOL includeTime = annotationModel.includeTime;
|
|
|
- _dateFormatIndex = index;
|
|
|
- _includeTime = includeTime;
|
|
|
- self.contents = [KMSelfSignAnnotationFreeText fetchDateStringWithIndex:index includeTime:includeTime];
|
|
|
- } else {
|
|
|
- self.contents = string?:@"";
|
|
|
- }
|
|
|
- [self setBounds:bounds];
|
|
|
- [self updateBounds];
|
|
|
- self.subType = subType;
|
|
|
- }
|
|
|
- return self;
|
|
|
-}
|
|
|
-
|
|
|
-#pragma mark - Public Methods
|
|
|
-
|
|
|
-+ (NSArray *_Nullable)fetchAllDateString:(BOOL)includeTime
|
|
|
-{
|
|
|
- NSMutableArray *rtnArray = [NSMutableArray array];
|
|
|
- for (NSInteger i = 0; i < [KMSelfSignAnnotationFreeText dateFormatterArray].count; i++) {
|
|
|
- [rtnArray addObject:[KMSelfSignAnnotationFreeText fetchDateStringWithIndex:i includeTime:includeTime]];
|
|
|
- }
|
|
|
- return [NSArray arrayWithArray:rtnArray];
|
|
|
-}
|
|
|
-
|
|
|
-- (void)updateBounds {
|
|
|
-
|
|
|
- CGRect tempBounds = self.bounds;
|
|
|
- NSDictionary *userAttributes = @{NSFontAttributeName: self.font};
|
|
|
- CGSize size = [self.contents sizeWithAttributes:userAttributes];
|
|
|
- CGFloat originalHeight = tempBounds.size.height;
|
|
|
- if (size.width < 10) {
|
|
|
- tempBounds.size.width = 130;
|
|
|
- tempBounds.size.height = size.height + 5;
|
|
|
- } else {
|
|
|
- tempBounds.size.width = size.width + 5;
|
|
|
- tempBounds.size.height = size.height + 5;
|
|
|
- }
|
|
|
- CGFloat gap = originalHeight - tempBounds.size.height;
|
|
|
- tempBounds.origin.y = tempBounds.origin.y + gap;
|
|
|
- self.bounds = tempBounds;
|
|
|
-}
|
|
|
-
|
|
|
-@end
|