How to send a PDF file using UIActivityViewController

前端 未结 8 1073
野趣味
野趣味 2020-12-13 13:57

I\'m trying to send a PDF using a UIActivityViewController. So far everything works fine using a fairly basic approach but the one issue I have is that when I s

8条回答
  •  温柔的废话
    2020-12-13 14:48

    For Objective-C tested code to share PDF

    - (void)downloadPDFfile:(NSString *)fileName withFileURL:(NSString *)shareURL {
        dispatch_async(dispatch_get_main_queue(), ^ {
            NSString *documentDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
            NSString *filePath = [documentDir stringByAppendingPathComponent:[NSString stringWithFormat:@"/%@",[self generateName:fileName withFiletype:@"pdf"]]];
            NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:shareURL]];
            NSURLSession *session = [NSURLSession sharedSession];
            NSURLSessionDataTask *task = [session dataTaskWithRequest:request
                                                    completionHandler:
                                          ^(NSData *data, NSURLResponse *response, NSError *error) {
                                              if (error) {
                                                  NSLog(@"Download Error:%@",error.description);
                                              } else if (data && error == nil) {
                                                  dispatch_async(dispatch_get_main_queue(), ^{
                                                      [data writeToFile:filePath atomically:YES];
                                                      [self shareFile:fileName withFilepath:filePath];
                                                  });
                                              }
                                          }];
    
            [task resume];
        });
    }
    
    -(void)shareFile:(NSString*)withfileName withFilepath:(NSString*)filePath {
        NSMutableArray *items = [NSMutableArray array];
    
        if (filePath) {
            [items addObject:[NSURL fileURLWithPath:filePath]];
        }
    
        UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:items applicationActivities:nil];
        [activityViewController setValue:withfileName forKey:@"subject"];
    
        if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
            activityViewController.modalPresentationStyle = UIModalPresentationPopover;
            UIPopoverPresentationController *popPC = activityViewController.popoverPresentationController;
            popPC.sourceView = self.view;
            CGRect sourceRext = CGRectZero;
            sourceRext.origin = CGPointMake(self.view.frame.size.width-30, 0);
            popPC.sourceRect = sourceRext;
            popPC.permittedArrowDirections = UIPopoverArrowDirectionDown;
        }
    
        [activityViewController setCompletionWithItemsHandler:
         ^(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *activityError) {
    
         }];
        [self presentViewController:activityViewController animated:YES completion:nil];
    }
    
    -(NSString*)generateName:(NSString*)title withFiletype:(NSString*)type {
        NSString *subject = [title stringByReplacingOccurrencesOfString:@" " withString:@"_"];
        subject = [NSString stringWithFormat:@"%@.%@",subject,type];
        return subject;
    }
    

    call function like below

    [self downloadPDFfile:@"yourFileName" withFileURL:shareURL];
    

提交回复
热议问题