ios - UIPasteboard 不适用于 PDF 文件
问题描述
我有两个应用程序,我正在尝试将 PDF 文件从一个传递到另一个。
我们将这两个应用程序视为 App1 和 App2。我正在从 App1 打开 App2。
所以我在 App2 的 info plist 中配置了 URLTypes。
单击 App1 中的“打开 App2”按钮时,我正在创建一个粘贴板,并为其分配一个位于项目目录中的 pdf 文件,如下所示:
在 App1 'openApp2' 操作方法中:
//pdf copying to pasteboard
NSString *pdfPath = [[NSBundle mainBundle] pathForResource:@"thenativescriptbook" ofType:@"pdf"];
NSURL *pdfURL = [NSURL fileURLWithPath:pdfPath];
NSData *data = [NSData dataWithContentsOfURL:pdfURL];
[[UIPasteboard generalPasteboard] setData:data forPasteboardType:(NSString *)kUTTypePDF];
//code to launch app2
NSString *customAppURL = @"Example://";
NSMutableDictionary *options;
[[UIApplication sharedApplication] openURL:[NSURL
URLWithString:customAppURL] options:options completionHandler:^(BOOL
success) {
NSLog(@"**************Launch Success*************");
}];
它正在启动 App2。
现在我正在尝试从 App2 中的粘贴板获取 PDF 文件,如下所示:
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
NSData *data = [pasteboard dataForPasteboardType:(NSString *)kUTTypePDF];
NSURL *pdfURL = [NSURL URLWithDataRepresentation:data relativeToURL:nil];
self.pdfPath = [pdfURL path];
NSLog(@"PATH: %@",self.pdfPath);
但它给出了一些我无法在任何 PDF 阅读器中打开的错误。
解决方案
当您尝试重新加载 PDF 文件时,问题似乎出在您的 App2 中。当您第一次在 App1 中设置数据时,您会检索 PDF 文件的 DATA,并将此数据放在粘贴板上。
然后在 App2 中,您检索 PDF 的数据,但不是将其保存到新文件,而是尝试从 PDF 数据创建一个 URL,然后......失败了。
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
NSData *data = [pasteboard dataForPasteboardType:(NSString *)kUTTypePDF];
到目前为止,这部分有效,但随后......
NSURL *pdfURL = [NSURL URLWithDataRepresentation:data relativeToURL:nil];
self.pdfPath = [pdfURL path];
NSLog(@"PATH: %@",self.pdfPath);
您尝试使用检索到的 PDF 数据创建 URL。这是有关如何创建文件的粗略示例:
NSString *cachesFolder = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
NSString *file = [cachesFolder stringByAppendingPathComponent:@"testfile.pdf"];
[data writeToFile:file options:NSDataWritingAtomic error:nil];
推荐阅读
- android - 如何创建具有自定义 id 值的微调器?
- python-3.x - 单击使用 Python 和 Selenium 打开嵌套的无序列 HTML 列表(下拉菜单)
- android - 将我的 localhost 网站转换为 android 应用程序
- java - 是/否带扫描仪的循环
- select - 如何将单列显示为与其他列值有某种关系的行
- android - 如何添加这个 google play 更新对话框?
- python - 如何正确缓存 Python 依赖项
- jquery - 如何使用ajax将多个数据从控制器发送到页面html
- amazon-web-services - 如何将 AWS Secret Manager 与 Spring Boot 应用程序集成
- java - 如何创建使用另一个通用 Java 接口键入的通用 Java 接口?