【发布时间】:2010-04-16 06:57:51
【问题描述】:
是否可以在 Safari 中从网站打开 PDF 以将其保存到本地磁盘?
【问题讨论】:
标签: iphone objective-c cocoa-touch pdf
是否可以在 Safari 中从网站打开 PDF 以将其保存到本地磁盘?
【问题讨论】:
标签: iphone objective-c cocoa-touch pdf
您可以使用NSURL class 将 pdf 文件下载到您的文档目录,而无需在 Safari 中打开它(然后终止您自己的应用程序)。
UIWebView 让显示外部 PDF 和本地文件变得简单方便(只需将正确的文件路径指向它),因此您甚至可以将 PDF 下载到您的文档文件夹,然后从本地缓存中显示它以后的日子。
在下面添加了一些示例代码
举一个更简单的例子,您可能会发现这对您的应用来说是可以接受的;这会将文件下载到您的文档文件夹,但使用阻止功能 (initWithContentsOfURL),因此您可能会遇到大文件/连接速度慢的问题:
(此代码应该是您所需要的,但您可能希望创建一个函数来处理此步骤/处理内存/检查错误等)
//Grab the file from the URL
NSData *pdfData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://www.website.com/doc1.pdf"]];
// Put the data into a file in your Documents folder
NSString *docFolder = [[NSString alloc] initWithString:[[[[NSBundle mainBundle] resourcePath] stringByDeletingLastPathComponent] stringByAppendingPathComponent:@"Documents"]];
NSString *filePath = [resourceDocPath stringByAppendingPathComponent:@"doc1.pdf"];
[pdfData writeToFile:filePath atomically:YES];
为了给您一个基本的构建示例,以下代码足以在 web 视图中显示 Documents 文件夹中的 PDF 文件:
-(void)viewDidLoad
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *pdfPath = [documentsDirectory stringByAppendingPathComponent:@"doc.pdf"];
// ...
webView.scalesPageToFit = YES;
webView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:pdfPath isDirectory:NO]]];
}
如果您想直接从网站(而不是本地文件)显示 PDF,那么您可以让 pdfPath 包含文件的完整 URL。
【讨论】:
Safari 会打开 PDF,但不会保存以供日后检索。
【讨论】: