Skip to content

打开文档

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:。推荐在 IDocEventListeneronDocOpened: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 会释放文档资源并触发 IDocEventListeneronDocWillClose:onDocClosed:error: 回调。

清理缓存

通过 URL 打开文档后,可通过以下方法清理缓存文件:

objc
// 清理指定 URL 的缓存
[pdfViewCtrl clearCacheFile:@"https://example.com/sample.pdf"];

// 清理所有 SDK 缓存
[pdfViewCtrl clearAllCacheFile];

API 参考

FSPDFDocFSPDFViewCtrl 的完整接口说明请参阅 API 手册