iOS开发---PDF文档详解

来源:互联网 发布:mac双系统安装教程win7 编辑:程序博客网 时间:2024/05/01 19:21

概述

PDF文档是“便携式文档”的简称,它与操作系统无关,也就是说PDF文件不管是在Windows,Unix还是在苹果公司的Mac OS操作系统中都是通用的,而且可以将文字、字型、格式、颜色及独立于设备和分辨率的图形图像等封装在一个文件中。该格式文件还可以包含超文本链接、声音和动态影像等电子信息,支持特长文件,集成度和安全可靠性都较高。PDF文件使用了工业标准的压缩算法,通常比PostScript文件小,易于传输与储存。

在iOS中显示PDF

使用UIWebView显示PDF

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Reader" ofType:@"pdf"];    NSURL *fileURL = [NSURL fileURLWithPath:filePath];    [self.webView loadRequest:[NSURLRequest requestWithURL:fileURL]];


iOS的内置浏览器是支持直接读取PDF的,可以直接显示PDF中的内容,但是缺点是所有内容一次性加载,只能通过滚动条乡下滑动页面,无法做出翻页效果和跟踪浏览记录。

通过CoreGraphics.framework框架显示PDF

CoreGraphics.framework框架提供了对于PDF文档的封装,它是采用C函数接口的形式封装了对PDF格式文档的各种操作。先定义UIView的子类,重写DrawRect方法,CGContextDrawPDFPage将pdf指定的页面绘制于视图中,由于QuartZ的坐标系统和和UIView的坐标系统不一样,所以绘制之前还要转换坐标系统。

// --下面是PDF页面没有铺满的算法

- (void)drawRect:(CGRect)rect{    // Drawing code    CGPDFDocumentRef document = NULL;    CGPDFPageRef     page = NULL;        document = GetPDFDocumentRef(self.filePath);    page = CGPDFDocumentGetPage (document, self.pageNumber);        CGContextRef context = UIGraphicsGetCurrentContext();    CGContextScaleCTM(context, 1, -1);    CGContextTranslateCTM(context, 0, -rect.size.height);    CGContextConcatCTM(context, CGPDFPageGetDrawingTransform(page, kCGPDFCropBox, rect, 0, true));        CGContextDrawPDFPage(context, page);    CGPDFDocumentRelease (document);}
图片未铺满


// --铺满的算法

-(void)drawRect:(CGRect)rect{    if(self.filePath == nil) //如果没被初始化的话,就初始化{self.pageNumber = self.pageNumber;   //这个其实应该由外部函数控制,不过谁让这个程序特别简单呢self.filePath = [[NSBundle mainBundle] pathForResource:@"Effective Objective-C 2.0" ofType:@"pdf"];}        CGContextRef context = UIGraphicsGetCurrentContext();    [[UIColor whiteColor] set];    CGContextFillRect(context, rect);        // --将UIKit的坐标系转换为QuartZ的坐标系    CGContextScaleCTM(context, 1, -1);    CGContextTranslateCTM(context, 0, -rect.size.height);        CGPDFDocumentRef document;    CGPDFPageRef page;        // --读取PDF文档及对应的页数    document = GetPDFDocumentRef (self.filePath);    page = CGPDFDocumentGetPage (document, self.pageNumber);    // --缩放后以正常比例显示PDF文档,且铺满整个屏幕    CGRect mediaRect = CGPDFPageGetBoxRect(page, kCGPDFCropBox);    CGContextScaleCTM(context, rect.size.width / mediaRect.size.width, rect.size.height / mediaRect.size.height);    CGContextTranslateCTM(context, -mediaRect.origin.x, -mediaRect.origin.y);        // --将PDF的该页显示    CGContextDrawPDFPage(context, page);    CGPDFDocumentRelease (document);    //    DisplayPDFPage(context, self.pageNumber, self.filePath);}
图片铺满




0 0
原创粉丝点击