Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to send a PDF file using UIActivityViewController

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 select the send by mail option, the PDF's file name is Attachment-1 rather than Calculation.PDF which is the name that I give the file.

I don't mind too much the change in title, but the lack of a .pdf extension does seem to cause a problem when sending the file to people with Windows PC's and I'd like to fix that.

I've had a look at: Control file name of UIImage send with UIActivityViewController

But can't see an equivalent method to:

[mailComposer addAttachmentData: UIImagePNGRepresentation(viewImage) mimeType:@"" fileName:@"myImage.png"];

that will work with a PDF file. Is this something that is not fixable without customization or is there a simple solution to this problem?

like image 937
Ian Turner Avatar asked Apr 03 '13 07:04

Ian Turner


3 Answers

try this

NSData *pdfData = [NSData dataWithContentsOfFile:pdfFilePath];
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[@"Test", pdfData] applicationActivities:nil];

[self presentViewController:activityViewController animated:YES completion:nil];

and also

NSString *str = [[NSBundle mainBundle] pathForResource:@"AppDistributionGuide" ofType:@"pdf"];   
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[@"Test", [NSURL fileURLWithPath:str]] applicationActivities:nil]; 
like image 197
Muruganandham K Avatar answered Nov 19 '22 20:11

Muruganandham K


Swift

let url = NSURL.fileURLWithPath(fileName)

let activityViewController = UIActivityViewController(activityItems: [url] , applicationActivities: nil)
        
presentViewController(activityViewController, animated: true, completion: nil)
like image 16
Roger Hjartholm Avatar answered Nov 19 '22 20:11

Roger Hjartholm


Swift 4.0

Here I attached code.I just added thread handling in to present "activityViewController" because of this viewcontroller present before load actual data.

let url = NSURLfileURL(withPath:fileName)

let activityViewController = UIActivityViewController(activityItems: [url] , applicationActivities: nil)

DispatchQueue.main.async {
            
    self.present(activityViewController, animated: true, completion: nil)
}
like image 12
V D Purohit Avatar answered Nov 19 '22 20:11

V D Purohit