iOS开发——图片转PDF的实现方法
来源:互联网 发布:阿里云elb 编辑:程序博客网 时间:2024/04/30 13:50
图片转PDF的实现方法
Quartz 2D概述
Quartz 2D是Core Grapgics下的2D绘图引擎,适用于iOS和Mac OS X。 它具有强大的绘图功能,提供视角效果渲染,反锯齿渲染,颜色管理,绘制PDF等等。
开发者无需考虑不同设备不同分别率的显示效果,因为这一切适配操作Quartz 全都自己包了。
具体Quartz可以做些什么,下图给出了最佳答案:
图片转PDF的工具类
利用Quartz 2D将图片数据转换成图片不失真的PDF,方法我已经封装好:
(PDF部分属性未列出,如果有额外需要,需要另行提出赋值)
//// WQPDFManager.h// wqphototopdf//// Created by Wu Qian on 12-10-22.////#import <Foundation/Foundation.h>@interface WQPDFManager : NSObject/** *@brief创建PDF文件 * *@param imgData NSData型 照片数据 *@param destFileName NSString型 生成的PDF文件名 *@param pw NSString型 要设定的密码 */+ (void)WQCreatePDFFileWithSrc:(NSData *)imgData toDestFile:(NSString *)destFileName withPassword:(NSString *)pw;/** *@brief抛出pdf文件存放地址 * *@param filename NSString型 文件名 * *@returnNSString型 地址 */+ (NSString *)pdfDestPath:(NSString *)filename;@end
//// WQPDFManager.m// wqphototopdf//// Created by Wu Qian on 12-10-22.////#import "WQPDFManager.h"#import "WQPathUtilities.h"@implementation WQPDFManagervoid WQDrawContent(CGContextRef myContext, CFDataRef data, CGRect rect){ CGDataProviderRef dataProvider = CGDataProviderCreateWithCFData(data); CGImageRef image = CGImageCreateWithJPEGDataProvider(dataProvider, NULL, NO, kCGRenderingIntentDefault); CGContextDrawImage(myContext, rect, image); CGDataProviderRelease(dataProvider); CGImageRelease(image);}void MyCreatePDFFile (CFDataRef data, CGRect pageRect, const char *filepath, CFStringRef password){ CGContextRef pdfContext; CFStringRef path; CFURLRef url; CFDataRef boxData = NULL; CFMutableDictionaryRef myDictionary = NULL; CFMutableDictionaryRef pageDictionary = NULL; path = CFStringCreateWithCString (NULL, filepath, kCFStringEncodingUTF8); url = CFURLCreateWithFileSystemPath (NULL, path, kCFURLPOSIXPathStyle, 0); CFRelease (path); myDictionary = CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); CFDictionarySetValue(myDictionary, kCGPDFContextTitle, CFSTR("Photo from iPrivate Album")); CFDictionarySetValue(myDictionary, kCGPDFContextCreator, CFSTR("iPrivate Album")); if (password) { CFDictionarySetValue(myDictionary, kCGPDFContextUserPassword, password); CFDictionarySetValue(myDictionary, kCGPDFContextOwnerPassword, password); } 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); WQDrawContent(pdfContext,data,pageRect); CGPDFContextEndPage (pdfContext); CGContextRelease (pdfContext); CFRelease(pageDictionary); CFRelease(boxData);}+ (NSString *)pdfDestPath:(NSString *)filename{ return [[WQPathUtilities tmpDirectory]stringByAppendingPathComponent:filename];}+ (void)WQCreatePDFFileWithSrc:(NSData *)imgData toDestFile:(NSString *)destFileName withPassword:(NSString *)pw{ NSString *fileFullPath = [self pdfDestPath:destFileName]; const char *path = [fileFullPath UTF8String]; CFDataRef data = (__bridge CFDataRef)imgData; UIImage *image = [UIImage imageWithData:imgData]; CGRect rect = CGRectMake(0, 0, image.size.width, image.size.height); CFStringRef password = (__bridge CFStringRef)pw; MyCreatePDFFile(data,rect, path, password);}@end
调用方法
NSData *data = [NSData dataWithContentsOfFile:your_image_path]; NSString *pdfname = @"photoToPDF.pdf"; [WQPDFManager WQCreatePDFFileWithSrc:data toDestFile:pdfname withPassword:nil];
如果需要创建带密码保护的PDF,第三个参数传入密码即可。
效果图
以 【私人相册】 中的截图示意一下...
将照片转换为密码保护的PDF,并发送EMail ,接收者需键入密码才可查看照片:
P.S. : 下次分享下大数据高速读取、显示的处理吧~ ^_^
- iOS开发——图片转PDF的实现方法
- iOS开发——图片转PDF的实现方法
- iOS开发——图片转PDF的实现方法
- iOS开发——图片转PDF的实现方法
- iOS开发——图片转PDF的实现方法
- iOS开发——图片转PDF的实现方法
- iOS开发——图片转PDF的实现方法
- iOS开发——图片转PDF的实现方法
- iOS...图片转PDF的实现方法
- ios--图片转PDF的实现方法
- 图片转PDF的实现方法
- 图片转PDF的实现方法
- 开发笔记 那些年追过的图片(九)图片转PDF的实现方法
- iOS开发中实现显示gif图片的方法
- pdf转jpg及pdf图片获取的方法
- JAVA的pdf转图片方法
- iOS开发笔记——PDF的显示和浏览
- iOS开发笔记——PDF的显示和浏览
- pureMVC相关
- hibernate执行完查询操作后又执行许多更新操作
- struts使用默认action时与通配符的冲突!
- dig理解DNS的解析过程
- Android 4.0 Launcher源码分析系列
- iOS开发——图片转PDF的实现方法
- 一个简单的wifi状态提示广播
- POJ 1018 Communication System (枚举)
- 友坚Android210支持LVDS 1024*600 10.1寸高清屏
- zoj - 1203 - Swordfish
- 备注sql
- 程序员能力矩阵(转)_找到自我定位和缺点
- poj 1459Power Network_ http://poj.org/problem?id=1459
- 一款不错的护眼软件