二、使用代码创建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文件如下图所示:
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;