写这篇笔记的原因是之前的老项目遇到了一个问题:iOS9后PDF中文会显示乱码,而且试了各种方法都不行,还好最终找到了解决方法---MuPDF
所以在此总结一下解决该问题过程中使用过的方法:
1.使用UIWebView加载
//代码很简单
UIWebView *webView = [[UIWebView alloc] initWithFrame:self.view.bounds];
[self.view addSubview:webView];
NSString *path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"pdf"];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:path]];
[webView loadRequest:request];
2.使用QLPreviewController打开
//初始化QLPreviewController对象
QLPreviewController *previewController = [[QLPreviewController alloc] init];
previewController.dataSource = self;
[self.navigationController pushViewController:pageController animated:YES];
//再实现QLPreviewControllerDataSource的两个方法即可显示
//显示文件数量
- (NSInteger) numberOfPreviewItemsInPreviewController: (QLPreviewController *) controller;
//文件路径URL
- (id <QLPreviewItem>)previewController: (QLPreviewController *)controller previewItemAtIndex:(NSInteger)index;
3.使用CGContextDrawPDFPage绘制
在UIView
的- (void)drawRect:(CGRect)rect
方法中绘制PDF内容,代码如下:
/*
Quartz2D UIKit
y (0, 0)|----------x
| |
| |
| |
| |
(0, 0) |---------x y
*/
- (void)drawRect:(CGRect)rect {
// Drawing code
CGContextRef context = UIGraphicsGetCurrentContext();
//调整坐标系
CGContextTranslateCTM(context, 0.0, self.bounds.size.height);//先垂直下移height高度
CGContextScaleCTM(context, 1.0, -1.0);//再垂直向上翻转
//绘制pdf内容
CGPDFPageRef pageRef = CGPDFDocumentGetPage(pdfDocument, page);
CGContextSaveGState(context);
CGAffineTransform pdfTransform = CGPDFPageGetDrawingTransform(pageRef, kCGPDFCropBox, s