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;

目录
相关文章
|
7天前
|
移动开发 网络协议 小程序
基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v9.1版已发布
RainbowChat是一套基于开源IM聊天框架 MobileIMSDK 的产品级移动端IM系统。RainbowChat源于真实运营的产品,解决了大量的屏幕适配、细节优化、机器兼容问题
23 5
|
5天前
|
Swift iOS开发 开发者
探索iOS开发中的SwiftUI框架
【10月更文挑战第21天】在苹果生态系统中,SwiftUI的引入无疑为iOS应用开发带来了革命性的变化。本文将通过深入浅出的方式,带领读者了解SwiftUI的基本概念、核心优势以及如何在实际项目中运用这一框架。我们将从一个简单的例子开始,逐步深入到更复杂的应用场景,让初学者能够快速上手,同时也为有经验的开发者提供一些深度使用的技巧和策略。
19 1
|
12天前
|
Java Apache Maven
将word文档转换成pdf文件方法
在Java中,将Word文档转换为PDF文件可采用多种方法:1) 使用Apache POI和iText库,适合处理基本转换需求;2) Aspose.Words for Java,提供更高级的功能和性能;3) 利用LibreOffice命令行工具,适用于需要开源解决方案的场景。每种方法都有其适用范围,可根据具体需求选择。
|
13天前
|
Java Apache Maven
Java将word文档转换成pdf文件的方法?
【10月更文挑战第13天】Java将word文档转换成pdf文件的方法?
34 1
|
23天前
|
索引 Python
PDF文件页面提取操作小指南
PDF文件页面提取操作小指南
45 4
|
23天前
|
Python
Python对PDF文件页面的旋转和切割
Python对PDF文件页面的旋转和切割
35 3
|
22天前
|
计算机视觉 Python
Python操作PDF文件
Python操作PDF文件
25 1
|
14天前
|
JavaScript 前端开发 容器
Vue生成PDF文件攻略:html2canvas与jspdf联手,中文乱码与自动换行难题攻克
Vue生成PDF文件攻略:html2canvas与jspdf联手,中文乱码与自动换行难题攻克
23 0
|
Web App开发 存储 JSON
iOS 创建 Universal Links【修订】
iOS 创建 Universal Links【修订】
272 0
iOS 创建 Universal Links【修订】
|
Web App开发 存储 JSON
iOS 创建 Universal Links
iOS 创建 Universal Links
179 0
iOS 创建 Universal Links