iOS开发CoreGraphics核心图形框架之九——PDF文件的渲染与创建(二)

简介: iOS开发CoreGraphics核心图形框架之九——PDF文件的渲染与创建

二、使用代码创建PDF文件


   如下示例代码演示了创建PDF文档的过程:


-(void)creatPDF{

   //绘图上下文

   CGContextRef pdfContext;

   CFStringRef path;

   CFURLRef url;

   CFDataRef boxData = NULL;

   CFMutableDictionaryRef myDictionary = NULL;

   CFMutableDictionaryRef pageDictionary = NULL;

   //文件存放的路径

   NSString * filePath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, true).firstObject;

   NSLog(@"%@",filePath);

   const char * filename = [[NSString stringWithFormat:@"%@/MyText",filePath] cStringUsingEncoding:kCFStringEncodingUTF8];

   path = CFStringCreateWithCString (NULL, filename,kCFStringEncodingUTF8);

   url = CFURLCreateWithFileSystemPath (NULL, path,kCFURLPOSIXPathStyle, 0);

   CFRelease (path);

   //文档信息字典

   myDictionary = CFDictionaryCreateMutable(NULL, 0,

                                            &kCFTypeDictionaryKeyCallBacks,

                                            &kCFTypeDictionaryValueCallBacks);

   //设置文档名称

   CFDictionarySetValue(myDictionary, kCGPDFContextTitle, CFSTR("My PDF File"));

   //设置创建者

   CFDictionarySetValue(myDictionary, kCGPDFContextCreator, CFSTR("My Name"));

   //设置文档尺寸

   CGRect pageRect = CGRectMake(0, 0, 200, 200);

   //创建文档

   pdfContext = CGPDFContextCreateWithURL (url, &pageRect, myDictionary);

   CFRelease(myDictionary);

   CFRelease(url);

   //设置内容信息字典

   pageDictionary = CFDictionaryCreateMutable(NULL, 0,

                                              &kCFTypeDictionaryKeyCallBacks,

                                              &kCFTypeDictionaryValueCallBacks);

   boxData = CFDataCreate(NULL,(const UInt8 *)&pageRect, sizeof (CGRect));

   CFDictionarySetValue(pageDictionary, kCGPDFContextMediaBox, boxData);

   //开始渲染一页

   CGPDFContextBeginPage (pdfContext, pageDictionary);

   CGFloat  colors[4] = {1,0,0,1};

   CGContextSetFillColorSpace(pdfContext, CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB));

   CGContextSetFillColor(pdfContext, colors);

   CGContextFillRect(pdfContext, CGRectMake(0, 0, 100, 100));

   //结束此页的渲染

   CGPDFContextEndPage (pdfContext);

   //开始新一页内容的渲染

   CGPDFContextBeginPage (pdfContext, pageDictionary);

   CGContextSetFillColorSpace(pdfContext, CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB));

   CGContextSetFillColor(pdfContext, colors);

   CGContextFillRect(pdfContext, CGRectMake(0, 0, 100, 100));

   CGPDFContextEndPage (pdfContext);

   CGContextRelease (pdfContext);

   CFRelease(pageDictionary);

   CFRelease(boxData);


}

上面代码创建出的PDF文件如下图所示:


image.png

iOS开发CoreGraphics核心图形框架之九——PDF文件的渲染与创建


在创建PDF文档时,开发者还可以使用如下列举的方法来对文档进行超链接添加,内容信息设置等:


//关闭文档上下文,关闭后将不能再次写入

void CGPDFContextClose(CGContextRef cg_nullable context);

//开启新一页内容的绘制

void CGPDFContextBeginPage(CGContextRef cg_nullable context, CFDictionaryRef __nullable pageInfo);

//结束当前页内容的绘制

void CGPDFContextEndPage(CGContextRef cg_nullable context);

//添加元数据

void CGPDFContextAddDocumentMetadata(CGContextRef cg_nullable context, CFDataRef __nullable metadata);

//为某个区域添加超链接

void CGPDFContextSetURLForRect(CGContextRef cg_nullable context, CFURLRef  url, CGRect rect);

//在文档的某个点添加一个目标

void CGPDFContextAddDestinationAtPoint(CGContextRef cg_nullable context, CFStringRef  name, CGPoint point);

//为某个区域添加跳转目标功能

void CGPDFContextSetDestinationForRect(CGContextRef cg_nullable context, CFStringRef  name, CGRect rect);

在设置文档信息字典时,支持的常用键如下:


//设置文档标题 可选设置

const CFStringRef  kCGPDFContextTitle;

//设置文档的作者 可选设置

const CFStringRef  kCGPDFContextAuthor;

//设置文档的副标题 可选设置

const CFStringRef  kCGPDFContextSubject;

//为文档设置关键字 可选设置 可以设置为一个数组 设置多个关键字

const CFStringRef  kCGPDFContextKeywords;

//设置文档的创建者

const CFStringRef  kCGPDFContextCreator;

//为文档设置所有者密码

const CFStringRef  kCGPDFContextOwnerPassword;

//为文档设置用户密码

const CFStringRef  kCGPDFContextUserPassword;

//设置加密密钥长度

const CFStringRef  kCGPDFContextEncryptionKeyLength;

//设置是否允许绘制

const CFStringRef  kCGPDFContextAllowsPrinting;

//设置是否允许复制

const CFStringRef  kCGPDFContextAllowsCopying;

目录
相关文章
|
搜索推荐 数据管理 定位技术
iOS应用开发中有多种主流框架
iOS应用开发中有多种主流框架
797 60
|
10月前
|
存储 JSON API
如何将 Swagger 文档导出为 PDF 文件
你会发现自己可能需要将 Swagger 文档导出为 PDF 或文件,以便于共享和存档。在这篇博文中,我们将指导你完成将 Swagger 文档导出为 PDF 格式的过程。
|
移动开发 网络协议 小程序
基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v10.0版已发布
RainbowChat是一套基于开源IM即时通讯聊天框架 MobileIMSDK 的产品级移动端IM系统。RainbowChat源于真实运营的产品,解决了大量的屏幕适配、细节优化、机器兼容问题。RainbowChat可能是市面上提供im即时通讯聊天源码的,唯一一款同时支持TCP、UDP两种通信协议的IM产品。与姊妹产品RainbowTalk和RainbowChat-Web 技术同源,历经考验。
403 0
基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v10.0版已发布
|
7月前
|
C#
【PDF提取内容改名】批量提取PDF指定区域内容重命名PDF文件,PDF自动提取内容命名的方案和详细步骤
本工具可批量提取PDF中的合同编号、日期、发票号等关键信息,支持PDF自定义区域提取并自动重命名文件,适用于合同管理、发票处理、文档归档和数据录入场景。基于iTextSharp库实现,提供完整代码示例与百度、腾讯网盘下载链接,助力高效处理PDF文档。
937 40
|
7月前
|
编译器 Python
如何利用Python批量重命名PDF文件
本文介绍了如何使用Python提取PDF内容并用于文件重命名。通过安装Python环境、PyCharm编译器及Jupyter Notebook,结合tabula库实现PDF数据读取与处理,并提供代码示例与参考文献。
|
9月前
|
人工智能 算法 安全
使用CodeBuddy实现批量转换PPT、Excel、Word为PDF文件工具
通过 CodeBuddy 实现本地批量转换工具,让复杂的文档处理需求转化为 “需求描述→代码生成→一键运行” 的极简流程,真正实现 “技术为效率服务” 的目标。感兴趣的快来体验下把
513 10
|
8月前
|
数据采集 存储 API
Python爬虫结合API接口批量获取PDF文件
Python爬虫结合API接口批量获取PDF文件
|
人工智能 编解码 文字识别
OCRmyPDF:16.5K Star!快速将 PDF 文件转换为可搜索、可复制的文档的命令行工具
OCRmyPDF 是一款开源命令行工具,专为将扫描的 PDF 文件转换为可搜索、可复制的文档。支持多语言、图像优化和多核处理。
1282 17
OCRmyPDF:16.5K Star!快速将 PDF 文件转换为可搜索、可复制的文档的命令行工具
|
iOS开发 开发者 MacOS
深入探索iOS开发中的SwiftUI框架
【10月更文挑战第21天】 本文将带领读者深入了解Apple最新推出的SwiftUI框架,这一革命性的用户界面构建工具为iOS开发者提供了一种声明式、高效且直观的方式来创建复杂的用户界面。通过分析SwiftUI的核心概念、主要特性以及在实际项目中的应用示例,我们将展示如何利用SwiftUI简化UI代码,提高开发效率,并保持应用程序的高性能和响应性。无论你是iOS开发的新手还是有经验的开发者,本文都将为你提供宝贵的见解和实用的指导。
404 66
|
机器学习/深度学习 人工智能 文字识别
Zerox:AI驱动的万能OCR工具,精准识别复杂布局并输出Markdown格式,支持PDF、DOCX、图片等多种文件格式
Zerox 是一款开源的本地化高精度OCR工具,基于GPT-4o-mini模型,支持PDF、DOCX、图片等多种格式文件,能够零样本识别复杂布局文档,输出Markdown格式结果。
1364 4
Zerox:AI驱动的万能OCR工具,精准识别复杂布局并输出Markdown格式,支持PDF、DOCX、图片等多种文件格式