自学内容网 自学内容网

WKWebView打开pdf文件乱码?各种方案整理。

近期有用户反馈使用我们FinClip SDK运行的小程序,在iOS18.0.1的系统上打开部分pdf文件的时候出现了乱码的现象, 低版本的系统打开没有出现乱码的现象,用电脑打开这个pdf文件也是正常的。经过排查,可能是iOS18的系统对WKWebView进行了调整处理,导致了WKWebView对pdf文件的兼容性没有处理好。随后调研了打开pdf的几套方案,最终选择了系统的PDFKit中的PDFView来打开pdf文件的方案,替换掉了原本WKWebView打开pdf文件的方案。

FinClip

FinClip是一个小程序容器解决方案,让原生App能够运行小程序,实现"一次开发,多端运行"。

使用FinClip SDK,你可以

  • 将微信小程序直接运行在你自己的App上。
  • 可以将微信小程序直接生成 iOS App、安卓 App、鸿蒙App。可以直接上架。

iOS PDF文件查看方案总结

一、系统原生方案

1. UIDocumentInteractionController

UIDocumentInteractionController *documentController = [UIDocumentInteractionController interactionControllerWithURL:pdfURL]; 
documentController.delegate = self;
[documentController presentPreviewAnimated:YES];

优点:

  • 系统原生支持,稳定性好
  • 支持多种文件格式,不限于PDF
  • 提供分享、打印等系统功能
  • 实现简单,代码量少

缺点:

  • 界面定制性差
  • 无法控制PDF阅读进度
  • iOS13之后在某些情况下可能出现兼容性问题
  • 必须将文件保存到本地才能打开

2. QLPreviewController

QLPreviewController *previewController = [[QLPreviewController alloc] init]; 
previewController.dataSource = self; 
previewController.delegate = self;
[self presentViewController:previewController animated:YES completion:nil];

优点:

  • 系统原生控件,性能好
  • 支持多种文件预览
  • 提供基本的缩放、滚动功能
  • 实现相对简单

缺点:

  • 界面定制受限
  • 无法实现复杂的交互功能
  • 不支持文档编辑
  • 同样需要本地文件

二、WebView方案

1. WKWebView

WKWebView *webView = [[WKWebView alloc] initWithFrame:self.view.bounds]; 
NSURLRequest *request = [NSURLRequest requestWithURL:pdfURL]; 
[webView loadRequest:request];

优点:

  • 实现简单
  • 支持在线PDF预览
  • 可以加载网络PDF
  • 内存占用相对较小

缺点:

  • PDF渲染质量一般
  • 缩放体验不如原生控件
  • 功能较为基础

三、PDFKit方案

1. PDFKit(iOS 11+)

PDFView *pdfView = [[PDFView alloc] initWithFrame:self.view.bounds]; 
PDFDocument *document = [[PDFDocument alloc] initWithURL:pdfURL]; 
pdfView.document = document;

优点:

  • 苹果官方框架
  • 性能好
  • 支持基本的PDF操作
  • 免费使用

缺点:

  • 只支持iOS 11以上系统
  • 功能相对基础

四、第三方框架

1. PSPDFKit(收费)

PSPDFDocument *document = [[PSPDFDocument alloc] initWithURL:pdfURL]; 
PSPDFViewController *pdfController = [[PSPDFViewController alloc] initWithDocument:document];
[self presentViewController:pdfController animated:YES completion:nil];

优点:

  • 功能非常强大
  • 支持注释、标注、表单
  • 性能优秀
  • 文档完善,技术支持好

缺点:

  • 收费

五、选择建议

  1. 简单预览需求:
  • 推荐使用QLPreviewControllerPDFKit
  • 适合只需要基础预览功能的场景
  1. 完整功能需求:
  • 推荐使用PSPDFKit或其他商业解决方案
  • 适合需要专业PDF处理功能的场景

六、代码示例

PDFKit完整示例

#import <PDFKit/PDFKit.h>

@interface PDFViewController : UIViewController
@property (nonatomic, strong) PDFView *pdfView;
@property (nonatomic, strong) PDFDocument *document;
@end

@implementation PDFViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 创建PDFView
    self.pdfView = [[PDFView alloc] initWithFrame:self.view.bounds];
    self.pdfView.autoScales = YES;
    [self.view addSubview:self.pdfView];
    
    // 加载PDF文件
    NSURL *pdfURL = [[NSBundle mainBundle] URLForResource:@"sample" withExtension:@"pdf"];
    self.document = [[PDFDocument alloc] initWithURL:pdfURL];
    self.pdfView.document = self.document;
}

@end

原文地址:https://blog.csdn.net/ikj1235/article/details/144819129

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!