// // PDFViewController.m // RedAnt ERP Mobile // // Created by Ray on 14-8-7. // Copyright (c) 2014年 United Software Applications, Inc. All rights reserved. // #import "PDFViewController.h" #import "RAUtils.h" #import "const.h" #import "AppDelegate.h" @interface PDFViewController () @end @implementation PDFViewController - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. UIRefreshControl *ref = [[UIRefreshControl alloc]init]; ref.tag = 200 ; ref.attributedTitle = [[NSAttributedString alloc]initWithString:@"drag to refresh"]; ref.tintColor = [UIColor colorWithRed:0.10 green:0.68 blue:0.94 alpha:0.7]; // ref.hidden = true; [ref addTarget:self action:@selector(changeCell) forControlEvents:UIControlEventValueChanged]; [self.webView.scrollView addSubview:ref]; self.webView.dataDetectorTypes=UIDataDetectorTypeAll; UIBarButtonItem *closeButton = [[UIBarButtonItem alloc] initWithImage:[[UIImage imageNamed:@"back"] imageWithRenderingMode:UIImageRenderingModeAutomatic] style:UIBarButtonItemStylePlain target:self action:@selector( onBackClick:)]; //[[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Close", nil) style:UIBarButtonItemStylePlain target:self action:@selector(onCloseClick:)]; // closeButton.title = @"Close"; self.navigationItem.leftBarButtonItem = closeButton; self.btnshare = [[UIBarButtonItem alloc] initWithImage:[[UIImage imageNamed:@"share"] imageWithRenderingMode:UIImageRenderingModeAutomatic] style:UIBarButtonItemStylePlain target:self action:@selector(onActionClick:)];//[[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Edit", nil) style:UIBarButtonItemStylePlain target:self action:@selector(onOpenOrderClick:)]; // self.btnshare.tintColor = UIColorFromRGB(0x996633); self.btnemail =[[UIBarButtonItem alloc] initWithImage:[[UIImage imageNamed:@"mail"] imageWithRenderingMode:UIImageRenderingModeAutomatic] style:UIBarButtonItemStylePlain target:self action:@selector(onEmailClick:)];// [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Commit", nil) style:UIBarButtonItemStylePlain target:self action:@selector(onCommitOrderClick:)]; // self.btnemail.tintColor = UIColorFromRGB(0x996633); // self.btnSend = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Email", nil) style:UIBarButtonItemStylePlain target:self action:@selector(onSendMailClick:)]; self.btnsave = [[UIBarButtonItem alloc] initWithImage:[[UIImage imageNamed:@"save"] imageWithRenderingMode:UIImageRenderingModeAutomatic] style:UIBarButtonItemStylePlain target:self action:@selector(onSaveClick:)]; // self.btnsave.tintColor = UIColorFromRGB(0x996633); UIBarButtonItem *fixedItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; fixedItem.width = 20.0f; NSMutableArray * items = [[NSMutableArray alloc]init]; [items addObject:self.btnshare]; [items addObject:fixedItem]; [items addObject:self.btnemail]; if(self.canSave) { [items addObject:fixedItem]; [items addObject:self.btnsave]; } self.navigationItem.rightBarButtonItems=items; self.btnshare.enabled =false; self.btnemail.enabled =false; self.btnsave.enabled =false; // self.url=@"http://192.168.1.3:8080/npd/test.pdf"; // NSURL* url = [NSURL URLWithString:self.url]; // // NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:self.url] cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:2000]; // // // [self.webView loadRequest:request]; [self loadcontent]; } - (void)onBackClick:(UIButton *)sender { [self.navigationController popViewControllerAnimated:FALSE]; } -(void)ReloadData { // Count ++ ; // [mytabelview reloadData]; UIRefreshControl *reF = (UIRefreshControl *)[self.view viewWithTag:200]; [reF endRefreshing]; [self loadcontent]; } -(void) loadcontent { UIAlertView * waitalert = [RAUtils waiting_alert:@"Please wait..." title:@"Loading..."]; self.mum.hidden=false; if(self.isLocalfile) { /* NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); NSString *cachefolder = [paths objectAtIndex:0]; NSString *pdfFolder = [cachefolder stringByAppendingPathComponent:@"pdf_cache"]; self.url = [pdfFolder stringByAppendingPathComponent:self.url]; */ self.content= [NSData dataWithContentsOfFile:self.url]; [self.webView loadData:self.content MIMEType:@"application/pdf" textEncodingName:nil baseURL:nil]; [waitalert dismissWithClickedButtonIndex:0 animated:FALSE]; self.filename=[self.url lastPathComponent]; self.btnshare.enabled =true; self.btnemail.enabled =true; self.btnsave.enabled =true; if(self.onLoadSuccess) self.onLoadSuccess(self.url); if(self.autoPrint) [self startAirPrintWithData:self.content]; } else dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:self.url] cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60*5]; //设置请求方式为get [request setHTTPMethod:@"GET"]; //添加用户会话id [request addValue:@"text/html" forHTTPHeaderField:@"Content-Type"]; //连接发送请求 NSHTTPURLResponse* urlResponse = nil; NSError *error = nil; self.content= [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error]; self.filename = [urlResponse suggestedFilename]; dispatch_async(dispatch_get_main_queue(), ^{ [waitalert dismissWithClickedButtonIndex:0 animated:FALSE]; [[self navigationController] setNavigationBarHidden:self.hidenavi animated:NO]; self.navigationItem.title = self.save_name; UIRefreshControl *reF = (UIRefreshControl *)[self.view viewWithTag:200]; // self.content=nil; if(self.content!=nil&&self.content.length>0) { [reF removeFromSuperview]; // NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *path = NSTemporaryDirectory(); NSString *filePath = [path stringByAppendingPathComponent:self.filename]; // NSError *error = nil; // BOOL bo = [[NSFileManager defaultManager] createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:&error]; // NSAssert(bo,@"创建目录失败"); [self.content writeToFile:filePath atomically:YES]; self.btnshare.enabled =true; self.btnemail.enabled =true; self.btnsave.enabled =true; if(self.onLoadSuccess) self.onLoadSuccess(self.url); if(self.autoPrint) [self startAirPrintWithData:self.content]; // int a=0; } else { [RAUtils message_alert:nil title:@"Open PDF Failed" controller:self]; if(self.autoPrint) [self.navigationController popViewControllerAnimated:true]; // self.content = [self.url dataUsingEncoding:NSUTF8StringEncoding]; } ; // NSLog(@"%@",[[NSString alloc] initWithData:self.content encoding:NSASCIIStringEncoding]); // // NSLog(urlResponse.MIMEType); [self.webView loadData:self.content MIMEType:urlResponse.MIMEType textEncodingName:nil baseURL:nil]; }); }); } -(void)changeCell { UIRefreshControl *reF = (UIRefreshControl *)[self.view viewWithTag:200]; reF.attributedTitle = [[NSAttributedString alloc]initWithString:@"refreshing"]; if ([self respondsToSelector:@selector(ReloadData)]) [self performSelector:@selector(ReloadData) withObject:nil afterDelay:1]; // DebugLog(@"refresh!!!!!!!!"); } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } -(void) viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [[self navigationController] setNavigationBarHidden:self.hidenavi animated:NO]; } - (IBAction)onActionClick:(id)sender { //NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *path = NSTemporaryDirectory(); NSString* filename =self.filename; NSString *filePath = [path stringByAppendingPathComponent:filename]; [self openFile:filePath]; } - (IBAction)onSaveClick:(id)sender { //UIAlertControllerStyle两种类型UIAlertControllerStyleAlert类似UIAlertView //UIAlertControllerStyleActionSheet类似UIActionSheet UIAlertController *alertControl = [UIAlertController alertControllerWithTitle:@"Save pdf" message:nil preferredStyle:UIAlertControllerStyleAlert]; //block代码块取代了delegate [alertControl addTextFieldWithConfigurationHandler:^(UITextField *textField) { textField.text = self.save_name; }]; UIAlertAction *actionOne = [UIAlertAction actionWithTitle:@"Save" style:UIAlertActionStyleDestructive handler:^(UIAlertAction *action) { UITextField *name = alertControl.textFields.firstObject; if(name.text.length==0) { [RAUtils message_alert:@"Cannot save without name. Save canceled." title:@"Name is missing" controller:self]; } else { self.save_name = name.text; self.btnsave.enabled =false; // NSMutableDictionary * info = if(self.onSavePDF) self.onSavePDF(self.save_name,self.filename); } }]; UIAlertAction *alertthree = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) { NSLog(@"Cancel"); }]; [alertControl addAction:actionOne]; [alertControl addAction:alertthree]; //UIAlertControllerStyle类型为UIAlertControllerStyleAlert可以添加addTextFieldWithConfigurationHandler:^(UITextField *textField) [self presentViewController:alertControl animated:YES completion:nil]; } - (IBAction)onEmailClick:(id)sender { //NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *path = NSTemporaryDirectory(); NSString* filename =self.filename; NSString *filePath = [path stringByAppendingPathComponent:filename]; MFMailComposeViewController *mc = [[MFMailComposeViewController alloc] init]; if(mc==nil) { //[RAUtils message_alert:@"You must create an email account first." title:@"Send Email" controller:self]; return; } mc.mailComposeDelegate = self; [mc setSubject:self.mail_subject]; [mc setToRecipients:self.mail_to]; if(self.mail_content==nil) self.mail_content=@""; NSString* htmlbody = [NSString stringWithFormat:@"

%@

",self.mail_content]; [mc setMessageBody:htmlbody isHTML:YES]; NSData *data = [NSData dataWithContentsOfFile:filePath]; if(self.attachment_name.length>0) filename = self.attachment_name; [mc addAttachmentData:data mimeType:@"application/pdf" fileName:filename]; [self presentModalViewController:mc animated:YES]; return; } -(void)openFile: (NSString *) file_url { NSURL *file_URL = [NSURL fileURLWithPath:file_url]; if (file_URL != nil) { if (self.fileInteractionController == nil) { //_fileInteractionController = [[UIDocumentInteractionController alloc] init]; _fileInteractionController = [UIDocumentInteractionController interactionControllerWithURL:file_URL]; _fileInteractionController.delegate = self; // [_fileInteractionController retain];//不适用ARC,记得RETAIN 使用ARC注释这一行 } else { self.fileInteractionController.URL = file_URL; } // [self.fileInteractionController presentOpenInMenuFromRect:self.view.frame inView:self.view animated:YES]; [self.fileInteractionController setName:self.mail_subject]; // [self.fileInteractionController setAnnotation:<#(id _Nullable)#>; [self.fileInteractionController presentOptionsMenuFromBarButtonItem:self.btnshare animated:YES]; // [self.fileInteractionController presentOptionsMenuFromRect:self.view.frame inView:self.view animated:YES]; // [self.fileInteractionController presentPreviewAnimated:YES]; } } //- (void) sendEmail:(NSString *)to cc:(NSString*)cc subject:(NSString*)subject body:(NSString*)body //{ // NSString* str = [NSString stringWithFormat:@"mailto:%@?cc=%@&subject=%@&body=%@", // to, cc, subject, body]; // str = [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; // // [[UIApplication sharedApplication] openURL:[NSURL URLWithString:str]]; // // //} #pragma mark methods for the UIDocumentInteractionControllerDelegate - (void)documentInteractionControllerDidDismissOptionsMenu:(UIDocumentInteractionController *)controller { // if (controller == self.fileInteractionController) { // self.fileInteractionController = nil; // } } - (void)previewDocumentWithURL:(NSURL*)url { UIDocumentInteractionController* preview = [UIDocumentInteractionController interactionControllerWithURL:url]; preview.delegate = self; [preview presentPreviewAnimated:YES]; } - (void)documentInteractionControllerDidEndPreview:(UIDocumentInteractionController *)controller { } - (UIViewController *)documentInteractionControllerViewControllerForPreview:(UIDocumentInteractionController *)controller{ return self; } - (CGRect)documentInteractionControllerRectForPreview:(UIDocumentInteractionController *)controller{ return self.view.frame; } - (UIView *)documentInteractionControllerViewForPreview:(UIDocumentInteractionController *)controller{ return self.view; } - (void)documentInteractionController:(UIDocumentInteractionController *)controller willBeginSendingToApplication:(nullable NSString *)application // bundle ID { } #pragma mark - web view delegate - (void)webViewDidFinishLoad:(UIWebView *)webView { self.mum.hidden=true; } #pragma mark -MFMailComposeViewControllerDelegate delegate - (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error { switch (result) { case MFMailComposeResultCancelled: NSLog(@"Mail send canceled..."); break; case MFMailComposeResultSaved: NSLog(@"Mail saved..."); break; case MFMailComposeResultSent: NSLog(@"Mail sent..."); break; case MFMailComposeResultFailed: NSLog(@"Mail send errored: %@...", [error localizedDescription]); break; default: break; } [self dismissModalViewControllerAnimated:YES]; } /* #pragma mark - Navigation In a storyboard-based application, you will often want to do a little preparation before navigation - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { Get the new view controller using [segue destinationViewController]. Pass the selected object to the new view controller. } */ - (void)startAirPrintWithData:(id )data { UIAlertView * waitalert = [RAUtils waiting_alert:@"Please wait..." title:@"preparing print..."]; UIPrintInteractionController* airPrinterController=[UIPrintInteractionController sharedPrintController]; UIPrintInfo *printInfo = [UIPrintInfo printInfo]; printInfo.outputType = UIPrintInfoOutputGeneral; printInfo.orientation = UIPrintInfoOrientationPortrait; printInfo.jobName = @"CoolVisitAirPrint"; airPrinterController.printInfo = printInfo; airPrinterController.printingItem = data; airPrinterController.delegate = self; airPrinterController.showsNumberOfCopies=true; airPrinterController.showsPageRange = true; airPrinterController.showsPaperSelectionForLoadedPapers=true; void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) = ^(UIPrintInteractionController *printController, BOOL completed, NSError *error) { if(completed && error) NSLog(@"Printing failed due to error in domain %@ with error code %lu. Localized description: %@, and failure reason: %@", error.domain, (long)error.code, error.localizedDescription, error.localizedFailureReason); }; AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate]; UIPrinter *airPrinter = [UIPrinter printerWithURL:[NSURL URLWithString:appDelegate.printerURL] ];///*self.printer;*/ [[UIPrinter printerWithURL:[NSURL URLWithString:appDelegate.printerURL]] contactPrinter:^(BOOL available) { [waitalert dismissWithClickedButtonIndex:0 animated:FALSE]; if (available&& appDelegate.printerURL.length>0) { [airPrinterController printToPrinter:airPrinter completionHandler:completionHandler]; NSLog(@"AIRPRINTER AVAILABLE"); } else { // [airPrinterController presentFromRect:CGRectMake(0, 0, 300, 500) inView:self.view animated:YES completionHandler: // // // // // [printPicker presentAnimated:YES completionHandler: // ^(UIPrintInteractionController *printerController, BOOL userDidSelect, NSError *error) // { // if (userDidSelect) // { // NSString* sid= printerController.printInfo.printerID; // UIPrintPaper*paper= printerController.printPaper; // // } // }]; NSLog(@"AIRPRINTER NOT AVAILABLE"); if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_7_1) { UIPrinterPickerController *printPicker = [UIPrinterPickerController printerPickerControllerWithInitiallySelectedPrinter:nil]; // [printPicker presentFromBarButtonItem:self.btnSubmitOrder animated:yes completionHandler: [ printPicker presentFromBarButtonItem:self.btnshare animated:YES completionHandler: // [printPicker presentFromRect:CGRectMake(0, 0, 300, 500) inView:self.view animated:YES completionHandler: // [printPicker presentAnimated:YES completionHandler: ^(UIPrinterPickerController *printerPicker, BOOL userDidSelect, NSError *error) { if (userDidSelect) { //User selected the item in the UIPrinterPickerController and got the printer details. [UIPrinterPickerController printerPickerControllerWithInitiallySelectedPrinter:printerPicker.selectedPrinter]; //Here you will get the printer and printer details.ie, // printerPicker.selectedPrinter, printerPicker.selectedPrinter.displayName, printerPicker.selectedPrinter.URL etc. So you can display the printer name in your label text or button title. appDelegate.printerURL =printerPicker.selectedPrinter.URL.absoluteString; [self startAirPrintWithData:data]; } else { // AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate]; // if([appDelegate.mode isEqualToString:@"Trade Show Mode"]&& appDelegate.submit_order_logout) // { // // [((MainViewController*)appDelegate.main_vc) Loginout:false]; // } // [self prepareReturn:nil]; //[self.navigationController popViewControllerAnimated:true]; } }]; } } }]; } #pragma mark - UIPrintInteractionControllerDelegate - (UIPrintPaper *)printInteractionController:(UIPrintInteractionController *)printInteractionController choosePaper:(NSArray *)paperList { ; // (int) width = 29700 // Printing description of (*( (int *)0x7caa3a40)): // (int) height = 42000 //设置纸张大小 for(UIPrintPaper* paper in paperList) { if (CGSizeEqualToSize(paper.paperSize, CGSizeMake(612, 792))) return paper; } CGSize paperSize = CGSizeMake(612, 792); UIPrintPaper * p=[UIPrintPaper bestPaperForPageSize:paperSize withPapersFromArray:paperList]; return p; } - (void)printInteractionControllerWillPresentPrinterOptions:(UIPrintInteractionController *)printInteractionController { } - (void)printInteractionControllerDidPresentPrinterOptions:(UIPrintInteractionController *)printInteractionController { } - (void)printInteractionControllerWillDismissPrinterOptions:(UIPrintInteractionController *)printInteractionController { } - (void)printInteractionControllerDidDismissPrinterOptions:(UIPrintInteractionController *)printInteractionController { } - (void)printInteractionControllerWillStartJob:(UIPrintInteractionController *)printInteractionController { } - (void)printInteractionControllerDidFinishJob:(UIPrintInteractionController *)printInteractionController { // AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate]; // if([appDelegate.mode isEqualToString:@"Trade Show Mode"]&& appDelegate.submit_order_logout) // { // // [((MainViewController*)appDelegate.main_vc) Loginout:false]; // } // // [self prepareReturn:nil]; if(self.autoPrint) [self.navigationController popViewControllerAnimated:true]; } @end