iOS:quartz2D绘图(显示绘制在PDF上的图片)

简介:
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,如需转载请自行联系原作者
相关文章
|
20天前
|
文字识别 BI
【工具教程】批量PDF和图片OCR识别指定区域文字自动改图片名字,多个区域一次性批量识别改名批量重命名
本内容介绍了一款用于企业档案、医院病历及办公文件管理的图片和PDF文字识别工具。通过框选识别区域,软件可批量提取关键信息,实现文件重命名或导出为表格,极大提升管理效率。支持图片与PDF两种模式,操作简单,适用于合同、病历、报告等场景。提供详细步骤指导,包含区域设置、文件导入、批量处理及结果校验等功能。
108 8
|
1月前
|
人工智能 文字识别 自然语言处理
1.6K star!这个开源文本提取神器,5分钟搞定PDF/图片/Office文档!
Kreuzberg 是一个基于 Python 的文本提取库,支持从 PDF、图像、Office 文档等 20+ 格式中提取文本内容。采用 MIT 开源协议,具备本地处理、异步架构、智能 OCR 等特性,特别适合需要隐私保护的文档处理场景。
|
1月前
|
文字识别 UED Python
对双栏 | 单双栏混合 | 图表文字混合的复杂布局的图片OCR识别(对布局复杂的整个pdf进行OCR识别)
这个故事告诉我们要多尝试不同的库和引擎,尤其是需求比较偏门或者少见的时候。同一个方向不同的库所擅长的领域是不一样的。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
2月前
|
文字识别 BI
【图片型PDF】批量识别扫描件PDF指定区域局部位置内容,将识别内容导出Excel表格或批量改名文件,基于阿里云OCR对图片型PDF识别改名案例实现
在医疗和政务等领域,图片型PDF文件(如病历、报告、公文扫描件)的处理需求广泛。通过OCR技术识别这些文件中的文字信息,提取关键内容并保存为表格,极大提高了信息管理和利用效率。本文介绍一款工具——咕嘎批量OCR系统,帮助用户快速处理图片型PDF文件,支持区域识别、内容提取、导出表格及批量改名等功能。下载工具后,按步骤选择处理模式、进行区域采样、批量处理文件,几分钟内即可高效完成数百个文件的处理。
264 8
|
3月前
|
机器学习/深度学习 人工智能 文字识别
Zerox:AI驱动的万能OCR工具,精准识别复杂布局并输出Markdown格式,支持PDF、DOCX、图片等多种文件格式
Zerox 是一款开源的本地化高精度OCR工具,基于GPT-4o-mini模型,支持PDF、DOCX、图片等多种格式文件,能够零样本识别复杂布局文档,输出Markdown格式结果。
319 4
Zerox:AI驱动的万能OCR工具,精准识别复杂布局并输出Markdown格式,支持PDF、DOCX、图片等多种文件格式
|
8月前
|
XML 缓存 JSON
为什么浏览器中有些图片、PDF等文件点击后有些是预览,有些是下载
为什么浏览器中有些图片、PDF等文件点击后有些是预览,有些是下载
389 0
|
4月前
|
JavaScript
jquery图片和pdf文件预览插件
EZView.js是一款jquery图片和pdf文件预览插件。EZView.js可以为图片和pdf格式文件生成在线预览效果。支持的文件格式有pdf、jpg、 png、jpeg、gif。
133 16
|
4月前
|
编解码 人工智能 文字识别
用PDF转换图片的方式弥补通义千问在扫描版PDF支持方面的缺失
当前通义千问Web版和本地版qwen-VL在处理扫描版PDF时均无法直接识别,导致实际应用中处理大量扫描PDF的需求难以满足。为此,通过使用Python的pdf2image库,可将PDF文件转换为图片,再进行OCR处理,实现解决方案。文中提供了具体的代码示例,展示了如何将PDF文件的每一页转换成图片,并保存至指定文件夹,为后续的OCR处理做好准备。
|
7月前
|
Python
Python办公自动化:提取pdf文件中的图片
Python办公自动化:提取pdf文件中的图片
115 0
|
8月前
|
数据安全/隐私保护 Python Windows
三种方法,Python轻松提取PDF中全部图片
三种方法,Python轻松提取PDF中全部图片
278 3

热门文章

最新文章

下一篇
oss创建bucket