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;

目录
相关文章
|
3月前
|
搜索推荐 数据管理 定位技术
iOS应用开发中有多种主流框架
iOS应用开发中有多种主流框架
303 60
|
12天前
|
人工智能 编解码 文字识别
OCRmyPDF:16.5K Star!快速将 PDF 文件转换为可搜索、可复制的文档的命令行工具
OCRmyPDF 是一款开源命令行工具,专为将扫描的 PDF 文件转换为可搜索、可复制的文档。支持多语言、图像优化和多核处理。
140 17
OCRmyPDF:16.5K Star!快速将 PDF 文件转换为可搜索、可复制的文档的命令行工具
|
7天前
|
文字识别 BI
【图片型PDF】批量识别扫描件PDF指定区域局部位置内容,将识别内容导出Excel表格或批量改名文件,基于阿里云OCR对图片型PDF识别改名案例实现
在医疗和政务等领域,图片型PDF文件(如病历、报告、公文扫描件)的处理需求广泛。通过OCR技术识别这些文件中的文字信息,提取关键内容并保存为表格,极大提高了信息管理和利用效率。本文介绍一款工具——咕嘎批量OCR系统,帮助用户快速处理图片型PDF文件,支持区域识别、内容提取、导出表格及批量改名等功能。下载工具后,按步骤选择处理模式、进行区域采样、批量处理文件,几分钟内即可高效完成数百个文件的处理。
49 8
|
28天前
|
机器学习/深度学习 人工智能 文字识别
Zerox:AI驱动的万能OCR工具,精准识别复杂布局并输出Markdown格式,支持PDF、DOCX、图片等多种文件格式
Zerox 是一款开源的本地化高精度OCR工具,基于GPT-4o-mini模型,支持PDF、DOCX、图片等多种格式文件,能够零样本识别复杂布局文档,输出Markdown格式结果。
113 4
Zerox:AI驱动的万能OCR工具,精准识别复杂布局并输出Markdown格式,支持PDF、DOCX、图片等多种文件格式
|
2月前
|
iOS开发 开发者 MacOS
深入探索iOS开发中的SwiftUI框架
【10月更文挑战第21天】 本文将带领读者深入了解Apple最新推出的SwiftUI框架,这一革命性的用户界面构建工具为iOS开发者提供了一种声明式、高效且直观的方式来创建复杂的用户界面。通过分析SwiftUI的核心概念、主要特性以及在实际项目中的应用示例,我们将展示如何利用SwiftUI简化UI代码,提高开发效率,并保持应用程序的高性能和响应性。无论你是iOS开发的新手还是有经验的开发者,本文都将为你提供宝贵的见解和实用的指导。
145 66
|
2月前
|
人工智能 文字识别 数据挖掘
MarkItDown:微软开源的多格式转Markdown工具,支持将PDF、Word、图像和音频等文件转换为Markdown格式
MarkItDown 是微软开源的多功能文档转换工具,支持将 PDF、PPT、Word、Excel、图像、音频等多种格式的文件转换为 Markdown 格式,具备 OCR 文字识别、语音转文字和元数据提取等功能。
335 9
MarkItDown:微软开源的多格式转Markdown工具,支持将PDF、Word、图像和音频等文件转换为Markdown格式
|
2月前
|
JavaScript
jquery图片和pdf文件预览插件
EZView.js是一款jquery图片和pdf文件预览插件。EZView.js可以为图片和pdf格式文件生成在线预览效果。支持的文件格式有pdf、jpg、 png、jpeg、gif。
75 16
|
3月前
|
开发框架 Dart Android开发
安卓与iOS的跨平台开发:Flutter框架深度解析
在移动应用开发的海洋中,Flutter作为一艘灵活的帆船,正引领着开发者们驶向跨平台开发的新纪元。本文将揭开Flutter神秘的面纱,从其架构到核心特性,再到实际应用案例,我们将一同探索这个由谷歌打造的开源UI工具包如何让安卓与iOS应用开发变得更加高效而统一。你将看到,借助Flutter,打造精美、高性能的应用不再是难题,而是变成了一场创造性的旅程。
|
4月前
|
Java Apache Maven
将word文档转换成pdf文件方法
在Java中,将Word文档转换为PDF文件可采用多种方法:1) 使用Apache POI和iText库,适合处理基本转换需求;2) Aspose.Words for Java,提供更高级的功能和性能;3) 利用LibreOffice命令行工具,适用于需要开源解决方案的场景。每种方法都有其适用范围,可根据具体需求选择。
|
4月前
|
Java Apache Maven
Java将word文档转换成pdf文件的方法?
【10月更文挑战第13天】Java将word文档转换成pdf文件的方法?
1277 1

热门文章

最新文章

  • 1
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 2
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 3
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
  • 4
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
  • 5
    OCRmyPDF:16.5K Star!快速将 PDF 文件转换为可搜索、可复制的文档的命令行工具
  • 6
    Zerox:AI驱动的万能OCR工具,精准识别复杂布局并输出Markdown格式,支持PDF、DOCX、图片等多种文件格式
  • 7
    猫步简历 - 开源免费AI简历生成器 | 一键导出PDF/JSON
  • 8
    PDF to Podcast:英伟达开源黑科技!PDF 秒转播客/有声书,告别阅读疲劳轻松学习!
  • 9
    【图片型PDF】批量识别扫描件PDF指定区域局部位置内容,将识别内容导出Excel表格或批量改名文件,基于阿里云OCR对图片型PDF识别改名案例实现
  • 10
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了