打开文档
FSPDFViewCtrl 提供了多种打开 PDF 文档的方式,涵盖文件路径、内存 Buffer、网络 URL 和自定义数据源等场景。
从文件路径打开
最常见的方式,openDoc:password:completion: 内部会完成创建 FSPDFDoc、加载文档并设置到 FSPDFViewCtrl:
objc
NSString *path = [[NSBundle mainBundle] pathForResource:@"Sample" ofType:@"pdf"];
[pdfViewCtrl openDoc:path password:nil completion:^(FSErrorCode error) {
if (error != FSErrSuccess) {
NSLog(@"打开文档失败,错误码: %d", (int)error);
}
}];
也可以手动创建 FSPDFDoc 后通过 setDoc: 设置:
objc
FSPDFDoc *doc = [[FSPDFDoc alloc] initWithPath:path];
FSErrorCode error = [doc load:nil];
if (error == FSErrSuccess) {
[pdfViewCtrl setDoc:doc];
}
从内存 Buffer 打开
适用于文档数据已在内存中的场景(如解密后的字节数组):
objc
NSData *pdfData = [NSData dataWithContentsOfFile:path];
[pdfViewCtrl openDocFromMemory:pdfData password:nil completion:^(FSErrorCode error) {
if (error != FSErrSuccess) {
NSLog(@"打开文档失败");
}
}];
从自定义数据源打开
通过实现 FSFileReaderCallback 协议,支持自定义读取逻辑(如加密存储、网络流等):
objc
[pdfViewCtrl openDocFromFileReader:customFileReader password:nil completion:^(FSErrorCode error) {
if (error != FSErrSuccess) {
NSLog(@"打开文档失败");
}
}];
从 URL 打开
通过 openDocFromURL:password:cacheOption:httpRequestProperties:completion: 从网络 URL 打开 PDF,SDK 会自动处理下载和缓存:
objc
NSURL *url = [NSURL URLWithString:@"https://example.com/sample.pdf"];
CacheFileOption *cacheOption = [[CacheFileOption alloc] init];
cacheOption.cacheFilePath = @"/path/to/cache/sample.pdf";
[pdfViewCtrl openDocFromURL:url password:nil cacheOption:cacheOption
httpRequestProperties:nil completion:^(FSErrorCode error) {
if (error != FSErrSuccess) {
NSLog(@"打开文档失败");
}
}];
CacheFileOption 可指定本地缓存路径和是否需要完整下载后再打开;HttpRequestProperties 可设置自定义 HTTP 请求头。
打开后跳转到指定页面
SDK 使用多线程渲染,需确保文档已打开成功后再调用 gotoPage:animated:。推荐在 IDocEventListener 的 onDocOpened:error: 回调中跳转:
objc
// 注册文档事件监听
[pdfViewCtrl registerDocEventListener:self];
// IDocEventListener
- (void)onDocOpened:(FSPDFDoc *)document error:(int)error {
if (error == FSErrSuccess) {
[self.pdfViewCtrl gotoPage:2 animated:YES];
}
}
关闭文档
objc
[pdfViewCtrl closeDoc:^{
NSLog(@"文档已关闭,资源已释放");
}];
调用 closeDoc: 后,FSPDFViewCtrl 会释放文档资源并触发 IDocEventListener 的 onDocWillClose: 和 onDocClosed:error: 回调。
清理缓存
通过 URL 打开文档后,可通过以下方法清理缓存文件:
objc
// 清理指定 URL 的缓存
[pdfViewCtrl clearCacheFile:@"https://example.com/sample.pdf"];
// 清理所有 SDK 缓存
[pdfViewCtrl clearAllCacheFile];
API 参考
FSPDFDoc、FSPDFViewCtrl 的完整接口说明请参阅 API 手册。