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 = ;
}

//上一页

- (IBAction)pagePrev:(UIButton *)sender
{
if (_currentPageNum >)
{
_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, , self.frame.size.height-);
CGContextScaleCTM(context, , -); [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];
}

演示结果如下:
  

iOS:quartz2D绘图(显示绘制在PDF上的图片)的更多相关文章

  1. iOS:quartz2D绘图(绘制渐变图形)

    quartzD可以用来绘制渐变图形,即图形向外或向内发散,会变得越来越模糊. 渐变分为线性渐变和径向渐变,所谓线性渐变,就是图形以线的方式发散,发散后一般呈现出矩形的样子:而径向渐变,就是以半径的大小 ...

  2. iOS:quartz2D绘图 (动画)

    quartz2D可以用来绘制自己需要的图形,它们绘制出来的是一个静态的图形,那么如何绘制一个动态的图形呢?动态的图形就是动画,所谓动画,其实就是很多张图片在短时间内不停的切换所产生的一种视觉效果.qu ...

  3. ios 从网络上获取图片并在UIImageView中显示

    ios 从网络上获取图片   -(UIImage *) getImageFromURL:(NSString *)fileURL { NSLog(@"执行图片下载函数"); UIIm ...

  4. iOS:quartz2D绘图(在PDF文件上绘制图片)

    quartz2D还可以在PDF文件上绘制图片,它有自己的PDF Graphics Context上下文,通过UIGraphicsBeginPDFContextToFile方法开始上下文后就可以绘制图片 ...

  5. iOS:quartz2D绘图(给图形绘制阴影)

    quartz2D既可以绘制原始图形,也可以给原始图形绘制阴影. 绘制阴影时,需要的一些参数:上下文.阴影偏移量.阴影模糊系数 注意:在drawRect:方法中同时调用绘制同一个图形时,在对绘制的图形做 ...

  6. iOS开发UI篇—Quartz2D使用(绘制基本图形)

    iOS开发UI篇—Quartz2D使用(绘制基本图形) 一.简单说明 图形上下文(Graphics Context):是一个CGContextRef类型的数据 图形上下文的作用:保存绘图信息.绘图状态 ...

  7. iOS开发UI之Quartz2D使用(绘制基本图形)

    iOS开发UI篇—Quartz2D使用(绘制基本图形) 一.简单说明 图形上下文(Graphics Context):是一个CGContextRef类型的数据 图形上下文的作用:保存绘图信息.绘图状态 ...

  8. iOS:quartz2D绘图

    Quartz-2D:绘图 一.介绍: •Quartz 2D是一个二维图形绘制引擎,支持iOS环境和Mac OS X环境   •Quartz 2D API可以实现许多功能,如基于路径的绘图.透明度.阴影 ...

  9. iOS:实现MKAnnotation协议,在地图上设置大头针,点击显示具体的位置信息

    如何添加大头针(地标): 通过MapView的addAnnotation方法可以添加一个大头针到地图上 通过MapView的addAnnotations方法可以添加多个大头针到地图上 –(void)a ...

随机推荐

  1. linux系统下部署war包

    http://blog.csdn.net/hellowangchaochao/article/details/73223773

  2. Binary Tree Level Order Traversal&&II

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...

  3. Excel Sheet Column Title&&Excel Sheet Column Number

    Excel Sheet Column Title Given a positive integer, return its corresponding column title as appear i ...

  4. HTTP资源合集

    (1)MoZILLA开发者web技术文档之HTTP 未完待续...

  5. TP-LINK路由器设置内网的一台电脑在外网可以远程操控

    1.[IP和MAC绑定]--[静态ARP绑定设置]对MAC和IP进行绑定 2.[转发规则]--[DMZ主机],选择启用并把刚才设置的内网IP填入 3.直接访问路由器的外网IP就可以直接访问绑定的MAC ...

  6. head first (三):装饰者模式

    看到别人写的,都看不进去,算了还是自己手写一遍吧,算是帮助自己理解了.写的比较简单,例子也比较好懂,什么时候使用自己看着办. 1.定义 装饰者模式:动态地将职责附加到对象上.若要扩展功能,装饰者提供比 ...

  7. LeetCode 461 汉明距离/LintCode 365 统计二进制中1的个数

    LeetCode 461. 汉明距离 or LintCode 365. 二进制中有多少个1 题目一:LeetCode 461. 汉明距离 LeetCode 461.明距离(Hamming Distan ...

  8. .net反射详解 原文://http://blog.csdn.net/wenyan07/article/details/27882363

    概述反射 通过反射可以提供类型信息,从而使得我们开发人员在运行时能够利用这些信息构造和使用对象. 反射机制允许程序在执行过程中动态地添加各种功能. 运行时类型标识 运行时类型标识(RTTI),可以在程 ...

  9. PTA L2-023 图着色问题-前向星建图 团体程序设计天梯赛-练习集

    L2-023 图着色问题 (25 分)   图着色问题是一个著名的NP完全问题.给定无向图,,问可否用K种颜色为V中的每一个顶点分配一种颜色,使得不会有两个相邻顶点具有同一种颜色? 但本题并不是要你解 ...

  10. phpstorm中Xdebug的使用

    目 录 1.Xdebug简介 2.Xdebug的安装.操作   2.1环境搭建 2.2配置php.ini 2.3配置PhpStorm 2.4配置PHP Debug 2.5进行调试 1.Xdebug简介 ...