标签:
quart2D既可以用来绘制图像到pdf上,也可以从pdf上读取图像并显示出来。在使用这种方式之前,还有一种方式可以用来读取显示pdf上的图像,即使用UIWebView网页视图控件- (void)loadRequest:(NSURLRequest *)request方法加载绘制到视图上显示,这里我将会将这两种方式都演示一遍。
具体的实例如下:
方式一:采用网页视图控件UIWebView的方式显示在pdf上的绘图
1、在故事板视图中拖入两个子控件,分别是网页视图控件webView和显示按钮
2、将网页视图控件webView IBOutLet关联到控制器类中,为显示按钮添加显示事件IBAction
3、写按钮事件代码显示pdf上绘制的图片
#param mark -使用网页视图控件显示PDF内容
- (IBAction)showPDF:(UIButton *)sender { //设置pdf文件的路径 NSArray *documents = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); //文档目录 NSString *document = [documents lastObject]; //NSLog(@"%@",document); //拼接pdf路径 NSString *PDFpath = [document stringByAppendingPathComponent:@"img.pdf"]; //创建URL NSURL *url = [NSURL URLWithString:PDFpath]; //创建request NSURLRequest *request = [NSURLRequest requestWithURL:url]; //在网页中显示 [self.webView loadRequest:request]; }
点击按钮后,显示的pdf上的绘图截图为:
方式二:采用quartz2D的方式用其封装好的函数显示在pdf上的绘图
1.在故事板视图中拖入两个按钮控件,分别命名为上一页和下一页,用来翻看前面和后面的绘图。
2、自定义一个视图类PDFView,并将控制器视图关联此类,同时将之前创建保存在沙盒目录下的pdf文件imageBook.pdf拖入文件
3、在自定义的PDFView类中为两个按钮添加事件IBAction
4、再就是具体的代码了,如下:
在PDFView类中:
//PDFView.h文件中声明打开pdf文件方法和绘制图片显示方法
@interface PDFView : UIView //打开pdf文件 -(void)openPDF:(NSURL *)url; //绘制图片显示在视图上 -(void)drawPDFWithPage:(size_t)page andContext:(CGContextRef) context; @end
//PDFView.m文件中说明pdf一些属性
@implementation PDFView { //pdf文档 CGPDFDocumentRef _pdfDoc; //当前页 size_t _currentPageNum; //总页数 size_t _totalPageNums; }
//打开PDF文件
-(void)openPDF:(NSURL *)url { //创建pdfDoc _pdfDoc = CGPDFDocumentCreateWithURL((__bridge CFURLRef)url); //总页数 _totalPageNums = CGPDFDocumentGetNumberOfPages(_pdfDoc); //第一页 _currentPageNum = 1; }
//上一页
- (IBAction)pagePrev:(UIButton *)sender { if (_currentPageNum >1) { _currentPageNum--; [self setNeedsDisplay]; } }
//下一页
- (IBAction)pageNext:(UIButton *)sender { if (_currentPageNum < _totalPageNums) { _currentPageNum++; [self setNeedsDisplay]; } }
//显示PDF
-(void)drawPDFWithPage:(size_t)page andContext:(CGContextRef) context { //获取页 CGPDFPageRef pdfPage = CGPDFDocumentGetPage(_pdfDoc, page); //画pdf页面 CGContextDrawPDFPage(context, pdfPage); }
//重写drawRect:(CGRect rect)方法绘制从pdf文件获取的图像(由于quartzD坐标系是反的,所以需要旋转坐标系)
- (void)drawRect:(CGRect)rect { CGContextRef context = UIGraphicsGetCurrentContext(); //旋转坐标系 CGContextTranslateCTM(context, 80, self.frame.size.height-60); CGContextScaleCTM(context, 1, -1); [self drawPDFWithPage:_currentPageNum andContext:context]; }
在控制器ViewController类中:
//调用执行
- (void)viewDidLoad { [super viewDidLoad]; //加载pdf文件 NSString *pdfFileName = [[NSBundle mainBundle]pathForResource:@"imageBook" ofType:@"pdf"]; NSURL *url = [NSURL fileURLWithPath:pdfFileName]; PDFView *pdfView = (PDFView*)self.view; [pdfView openPDF:url]; }
演示结果如下:
标签:
原文地址:http://www.cnblogs.com/XYQ-208910/p/4869576.html