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
- iOS开发---PDF文档详解
- iOS开发 pdf文档显示和预览
- ios上生成pdf文档
- iOS预览PDF文档 UIDocumentInteractionController
- 资源空间新添加《Visual C++ 游戏开发经典案例详解》PDF文档,单一PDF文件,带完整书签。
- iOS 开发之 pdf 文档的加载与浏览的 4 种方式
- iOS开发之pdf文档的加载与浏览的4种方式
- iOS开发之pdf文档的加载与浏览的4种方式
- IOS读取和显示PDF文档
- iOS读取和显示PDF文档
- iOS读取和显示PDF文档
- iOS读取和显示PDF文档
- PDF文档的矢量图提取详解
- PDF文档的矢量图提取详解
- 创建PDF文件 - iOS开发
- ios开发文档
- iOS开发官方文档
- ios官方开发文档
- ArcGIS中的三种查询
- 三分钟理解cocos2dx的内存管理
- Linux mysql-proxy负载均衡
- Mahout学习——Canopy Clustering[经典]
- 正则表达式笔记 1 基本的匹配
- iOS开发---PDF文档详解
- UVA - 127 "Accordian" Patience
- 被“玩坏”了的打车软件
- BlockingQueue详解
- 脱离繁杂的地图开发,寻找最简单快捷的地图应用
- ArcGIS API for Silverlight 之ElementLayer使用及TextSymbol的模板使用
- Oracle 如何修改列的数据类型 (不积跬步,无以至千里)
- 比较全面的gdb调试命令
- DateTime总结