// // CPDFViewController.m // PDFViewer // // Created by kdan on 2022/11/15. // #import #import #import "CPDFViewController.h" #import "CPDFHeaderFooterAddController.h" #import "CPDFHeaderFooterDeleteController.h" #import "CPDFBatesDeleteViewController.h" #import "CPDFBatesAddViewController.h" #import "CPDFBatesModel.h" @interface CPDFViewController () @property (nonatomic,strong) CPDFKitPlatformImage *image; @property (nonatomic,assign) CGSize size; @property (nonatomic,strong) CPDFDocument *document; @property (nonatomic,strong) CPDFView *pdfView; @property (nonatomic,strong) CPDFHeaderFooterModel *modelData; @property (nonatomic,strong) CPDFBatesModel *modelBatesData; @end @implementation CPDFViewController - (instancetype)initWithPath:(NSString *)inPath { if (self = [super init]) { _path = inPath; } return self; } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. // Add UIBarButtonItem in Navigation self.navigationController.toolbarHidden = YES; UIImage *btnMore = [UIImage imageNamed:@"btn_more"]; UIBarButtonItem *ringhtBarItem = [[UIBarButtonItem alloc] initWithImage:btnMore style:UIBarButtonItemStylePlain target:self action:@selector(onClickedOkbtn)]; self.navigationItem.rightBarButtonItem = ringhtBarItem; // Setting URL NSURL *url = [NSURL fileURLWithPath:_path]; _document = [[CPDFDocument alloc] initWithURL:url]; // Get document frist image CPDFPage *page = [_document pageAtIndex:0]; _size = [_document pageSizeAtIndex:0]; _image = [page thumbnailOfSize:_size]; // Get document view _pdfView = [[CPDFView alloc] initWithFrame:self.view.bounds]; _pdfView.document = _document; _pdfView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; [self.view addSubview:_pdfView]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getHeaderFooterModel:) name:@"getAddHeaderFooterModel" object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deleteHeaderFooter:) name:@"deleteHeaderFooter" object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getBatesMdel:) name:@"getAddBatesModel" object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deleteBates:) name:@"deleteBatesModel" object:nil]; } #pragma mark - Actions - (void)onClickedOkbtn { UIAlertController *alertController = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet]; // Add watermark action UIAlertAction *addWatermarkAction = [UIAlertAction actionWithTitle:@"Add Watermark" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { NSLog(@"addWatermarkAction"); }]; // Setting headerfooter action UIAlertAction *settingHeaderFooter = [UIAlertAction actionWithTitle:@"Setting Headerfooter" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { UIAlertController *alertController = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet]; // Add headerfooter action UIAlertAction *addHeaderfooterAction = [UIAlertAction actionWithTitle:@"Add Headerfooter" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { CPDFHeaderFooterAddController *headerFooterControl = [[CPDFHeaderFooterAddController alloc] initWithIamge:self.image WithSize:self.size]; [self.navigationController pushViewController:headerFooterControl animated:NO]; }]; // Delete headerfooter action UIAlertAction *deleteHeaderfooterAction = [UIAlertAction actionWithTitle:@"Delete Headerfooter" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { CPDFHeaderFooterDeleteController *headerFooterDeleteControl = [[CPDFHeaderFooterDeleteController alloc] init]; [self addChildViewController:headerFooterDeleteControl]; [self.view addSubview:headerFooterDeleteControl.view]; }]; // Cancel Action UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { NSLog(@"Cancel Action"); }]; [alertController addAction:addHeaderfooterAction]; [alertController addAction:deleteHeaderfooterAction]; [alertController addAction:cancelAction]; [self presentViewController:alertController animated:YES completion:nil]; }]; // Seeting bates action UIAlertAction *settingBatesAction = [UIAlertAction actionWithTitle:@"Setting Bates" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { UIAlertController *alertController = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet]; UIAlertAction *addBatesAction = [UIAlertAction actionWithTitle:@"Add Bates" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { CPDFBatesAddViewController *batesAddControl = [[CPDFBatesAddViewController alloc] initWithIamge:self.image WithSize:self.size]; [self.navigationController pushViewController:batesAddControl animated:NO]; }]; UIAlertAction *delereBatesAction = [UIAlertAction actionWithTitle:@"Delete Bates" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { CPDFBatesDeleteViewController *batesDeleteControl = [[CPDFBatesDeleteViewController alloc] init]; [self addChildViewController:batesDeleteControl]; [self.view addSubview:batesDeleteControl.view]; }]; UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { NSLog(@"Cancel Action"); }]; [alertController addAction:addBatesAction]; [alertController addAction:delereBatesAction]; [alertController addAction:cancelAction]; [self presentViewController:alertController animated:YES completion:nil]; }]; // Cancel action UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { NSLog(@"Cancel Action"); }]; // Add controller [alertController addAction:addWatermarkAction]; [alertController addAction:settingHeaderFooter]; [alertController addAction:settingBatesAction]; [alertController addAction:cancelAction]; [self presentViewController:alertController animated:YES completion:nil]; } #pragma mark - Function // Get headerfooter' model to setting page headerfooter's add functional property - (void)getHeaderFooterModel:(NSNotification *)addSign { _modelData = addSign.userInfo[@"model"]; CPDFHeaderFooter *headerFooter = [self.document headerFooter]; NSString *pageIndex = [NSString stringWithFormat:@"0-%lu",self.document.pageCount - 1]; NSString *text = [[NSString alloc] init]; switch (_modelData.fontSelcet) { case 0: text = [NSString stringWithFormat:@"<<%@>>",self.modelData.pageStart]; break; case 1: text = [NSString stringWithFormat:@"page <<%@>>",self.modelData.pageStart]; break; case 2: text = [NSString stringWithFormat:@"<<%@>>/%lu",self.modelData.pageStart,self.document.pageCount]; break; case 3: text = [NSString stringWithFormat:@"<<%@>> of %lu",self.modelData.pageStart,self.document.pageCount]; break; case 4: text = [NSString stringWithFormat:@"page <<%@>> of %lu",self.modelData.pageStart,self.document.pageCount]; break; default: break; } headerFooter.pageString = pageIndex; [headerFooter setText:text atIndex:self.modelData.fontPosition]; [headerFooter setFontSize:self.modelData.fontSize atIndex:self.modelData.fontPosition]; [headerFooter setTextColor:self.modelData.fontColor atIndex:self.modelData.fontPosition]; [headerFooter update]; NSURL *url = [NSURL fileURLWithPath:self.path]; [self.document writeToURL:url]; _document = [[CPDFDocument alloc] initWithURL:url]; _pdfView = [[CPDFView alloc] initWithFrame:self.view.bounds]; _pdfView.document = _document; _pdfView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; [self.view addSubview:_pdfView]; } // Get bates' model to setting page bates's add functional property - (void)getBatesMdel:(NSNotification *)addBatesSign { _modelBatesData = addBatesSign.userInfo[@"batesModel"]; CPDFBates *bates = [self.document bates]; NSString *pageIndex = [NSString stringWithFormat:@"%@-%lu",self.modelBatesData.pageStart,self.document.pageCount - 1]; bates.pageString = pageIndex; NSString *text = [NSString stringWithFormat:@"<<%@>>",self.modelBatesData.fontText]; [bates setText:text atIndex:self.modelBatesData.fontPosition]; [bates setFontName:self.modelBatesData.fontName atIndex:self.modelBatesData.fontPosition]; [bates setFontSize:15.0 atIndex:self.modelBatesData.fontPosition]; [bates setTextColor:self.modelBatesData.fontColor atIndex:self.modelBatesData.fontPosition]; [bates update]; NSURL *url = [NSURL fileURLWithPath:self.path]; [self.document writeToURL:url]; _document = [[CPDFDocument alloc] initWithURL:url]; _pdfView = [[CPDFView alloc] initWithFrame:self.view.bounds]; _pdfView.document = _document; _pdfView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; [self.view addSubview:_pdfView]; } // Get headerfooter' model to setting page headerfooter's delete functional property - (void)deleteHeaderFooter:(NSNotification *)deleteSign { CPDFHeaderFooter *headerFooter = [self.document headerFooter]; [headerFooter clear]; NSURL *url = [NSURL fileURLWithPath:self.path]; [self.document writeToURL:url]; _document = [[CPDFDocument alloc] initWithURL:url]; _pdfView = [[CPDFView alloc] initWithFrame:self.view.bounds]; _pdfView.document = _document; _pdfView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; [self.view addSubview:_pdfView]; } // Get bates' model to setting page bates's delete functional property - (void)deleteBates:(NSNotification *)deleteBates { CPDFBates *bates = [self.document bates]; [bates clear]; NSURL *url = [NSURL fileURLWithPath:self.path]; [self.document writeToURL:url]; _document = [[CPDFDocument alloc] initWithURL:url]; _pdfView = [[CPDFView alloc] initWithFrame:self.view.bounds]; _pdfView.document = _document; _pdfView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; [self.view addSubview:_pdfView]; } @end