1. -(void)createPdf:(UIImage *)img andText:(NSString *)text{
  2. NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  3. NSString *saveDirectory = [paths objectAtIndex:];
  4. NSString *saveFileName = @"myPDF.pdf";
  5. NSString *newFilePath = [saveDirectory stringByAppendingPathComponent:saveFileName];
  6. const char *filename = [newFilePath UTF8String];
  7. CGRect pageRect = CGRectMake(, , , );
  8. // This code block sets up our PDF Context so that we can draw to it
  9.  
  10. CGContextRef pdfContext;
  11. CFStringRef path;
  12. CFURLRef url;
  13. CFMutableDictionaryRef myDictionary = NULL;
  14. // Create a CFString from the filename we provide to this method when we call it
  15. path = CFStringCreateWithCString (NULL, filename, kCFStringEncodingUTF8);
  16. // Create a CFURL using the CFString we just defined
  17. url = CFURLCreateWithFileSystemPath (NULL, path, kCFURLPOSIXPathStyle, );
  18. CFRelease (path);
  19. // This dictionary contains extra options mostly for ‘signing’ the PDF
  20. myDictionary = CFDictionaryCreateMutable(NULL, , &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
  21. CFDictionarySetValue(myDictionary, kCGPDFContextTitle, CFSTR("My PDF File"));
  22. CFDictionarySetValue(myDictionary, kCGPDFContextCreator, CFSTR("My Name"));
  23. // Create our PDF Context with the CFURL, the CGRect we provide, and the above defined dictionary
  24. pdfContext = CGPDFContextCreateWithURL (url, &pageRect, myDictionary);
  25. // Cleanup our mess
  26. CFRelease(myDictionary);
  27. CFRelease(url);
  28.  
  29. // Done creating our PDF Context, now it’s time to draw to it
  30. // Starts our first page
  31. CGContextBeginPage (pdfContext, &pageRect);
  32.  
  33. UIImage* myUIImage = img;
  34. CGImageRef pageImage = [myUIImage CGImage];
  35. CGContextDrawImage(pdfContext, CGRectMake(,,([myUIImage size].width) , ([myUIImage size].height)), pageImage); //绘制图片
  36. // Draws a black rectangle around the page inset by 50 on all sides
  37. // CGContextStrokeRect(pdfContext, CGRectMake(50, 50, pageRect.size.width - 100, pageRect.size.height - 100));
  38.  
  39. // Adding some text on top of the image we just added
  40. // CGContextSelectFont (pdfContext, "Helvetica", 30, kCGEncodingMacRoman);
  41. CGContextSetTextDrawingMode (pdfContext, kCGTextFill);
  42. CGContextSetRGBFillColor (pdfContext, , , , );
  43.  
  44. UIGraphicsPushContext(pdfContext); //将需要绘制的层push
  45. CGContextTranslateCTM(pdfContext, , ); //转换Y轴坐标, 底层坐标与cocoa 组件不同 Y轴相反
  46. CGContextScaleCTM(pdfContext, , -);
  47.  
  48. // CGContextShowTextAtPoint (pdfContext, 260, 390, [text UTF8String], strlen([text UTF8String])); //汉字不正常
  49.  
  50. [text drawAtPoint:CGPointMake(, ) withFont:[UIFont systemFontOfSize:]]; //绘制汉字
  51.  
  52. // UIFont *font = [UIFont systemFontOfSize:15 ]; //自定义字体
  53. // CGContextSetFillColorWithColor(pdfContext, [UIColor blackColor].CGColor); //颜色
  54. // [text drawAtPoint:CGPointMake(260,390) forWidth:50 withFont:font minFontSize:8 actualFontSize:NULL lineBreakMode:UILineBreakModeTailTruncation baselineAdjustment:UIBaselineAdjustmentAlignCenters];
  55.  
  56. UIGraphicsPopContext();
  57.  
  58. CGContextStrokePath(pdfContext);
  59.  
  60. // End text
  61. // We are done drawing to this page, let’s end it
  62. // We could add as many pages as we wanted using CGContextBeginPage/CGContextEndPage
  63. CGContextEndPage (pdfContext);
  64. // We are done with our context now, so we release it
  65. CGContextRelease (pdfContext);
  66. }
  67.  
  68. - (void)viewDidLoad
  69. {
  70. [super viewDidLoad];
  71. // Do any additional setup after loading the view, typically from a nib.
  72.  
  73. //调用方法
  74. [self createPdf:[UIImage imageNamed:@"aa"] andText:@"汉字"];
  75.  
  76. }

转自:http://www.cppblog.com/Khan/archive/2013/03/18/198566.html

IOS 绘制PDF -转的更多相关文章

  1. Python绘制PDF文件~超简单的小程序

    Python绘制PDF文件 项目简介 这次项目很简单,本次项目课,代码不超过40行,主要是使用 urllib和reportlab模块,来生成一个pdf文件. reportlab官方文档 http:// ...

  2. C# 绘制PDF嵌套表格

    嵌套表格,即在一张表格中的特定单元格中再插入一个或者多个表格,使用嵌套表格的优点在于能够让内容的布局更加合理,同时也方便程序套用.下面的示例中,将介绍如何通过C#编程来演示如何插入嵌套表格到PDF文档 ...

  3. C# 绘制PDF图形——基本图形、自定义图形、色彩透明度

    引言 在PDF中我们可以通过C#程序代码来添加非常丰富的元素来呈现我们想要表达的内容,如绘制表格.文字,添加图形.图像等等.在本篇文章中,我将介绍如何在PDF中绘制图形,并设置图形属性的操作. 文章中 ...

  4. ios 绘制wav波形图

    最近研究了如何在iOS上绘制wav波形图.查了很多资料,都没能找到一个很完整的介绍,我这里总结一下一些经验. 首先需要了解wav的这3个重要指标:采样率.采样位数.声道数.下面以16KHz, 16Bi ...

  5. iOS绘制坐标图,折线图-Swift

    坐标图,经常会在各种各样的App中使用,最常用的一种坐标图就是折线图,根据给定的点绘制出对应的坐标图是最基本的需求.由于本人的项目需要使用折线图,第一反应就是搜索已经存在的解决方案,因为这种需求应该很 ...

  6. 转:iOS绘制一个UIView

    绘制一个UIView 绘制一个UIVIew最灵活的方式就是由它自己完成绘制.实际上你不是绘制一个UIView,你只是子类化了UIView并赋予子类绘制自己的能力.当一个UIVIew需要执行绘图操作的时 ...

  7. iOS 绘制1像素的线

    一.Point Vs Pixel iOS中当我们使用Quartz,UIKit,CoreAnimation等框架时,所有的坐标系统采用Point来衡量.系统在实际渲染到设置时会帮助我们处理Point到P ...

  8. iOS生成PDF的关键代码-备忘

    //此方法只是把当前页面的内容生成PDF并保存在沙盒中. //还需要做:把当前面没有显示的内容以分页的形式生成PDF,并把PDF读取并显示出来 //关于显示可以参考:念茜的博客 iOS开发笔记——PD ...

  9. IOS - 绘制文字 drawInRect: withFont: not working

    在图形绘制中,我们经常会需要绘制文本,但我在给PDF上绘制Text时,始终绘制不上, 使用过: [str drawInRect:cubeRect withAttributes:attrs]; CGCo ...

随机推荐

  1. Rust 1.7.0 匹配器 match 的简介和使用

    使用过正則表達式的人应该都知道 matcher ,通过 matcher 匹配器运算正則表達式,完毕一系列的匹配规则. 在Rust 中 没有 switch 语句.matcher 就是 switch 的一 ...

  2. ldd

    ldd命令用于判断某个可执行的 binary 档案含有什么动态函式库 [diego@localhost ~/work/branch_dispatch_201511/rtqa_center/source ...

  3. NYOJ 158 省赛来了

    省赛来了 时间限制:1000 ms  |  内存限制:65535 KB 难度: 描写叙述 一年一度的河南省程序设计大赛又要来了. 竞赛是要组队的,组队形式:三人为一队,设队长一名.队员两名. 如今问题 ...

  4. 软件质量之道:PCLint之中的一个

    故天将降大任于斯人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为,所以动心忍性,增益其所不能. 孟子 1引子 今天听老韩一席话,当真是感慨万千啊.心怀斗志昂扬.奋斗十年,到头来.却看到身 ...

  5. Android签名机制之---签名验证过程具体解释

    一.前言 今天是元旦,也是Single Dog的嚎叫之日,仅仅能写博客来祛除寂寞了,今天我们继续来看一下Android中的签名机制的姊妹篇:Android中是怎样验证一个Apk的签名. 在前一篇文章中 ...

  6. mysql学习笔记之mysql数据库的安装

    1.执行mysql安装包选择自己定义安装(安装路径不要带中文,否则安装会出错! ) 2.一个mysql想要操作成功须要有三部分:server端,数据段,数据. 3.server软件文件夹: 4.数据文 ...

  7. maven导入dom4j以及jaxen.jar报java.lang.UnsupportedOperationException:错误

    <dependency> <groupId>jaxen</groupId> <artifactId>jaxen</artifactId> & ...

  8. HDU 5302(Connect the Graph- 构造)

    Connect the Graph Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others ...

  9. Evaluate Reverse Polish Notation --leetcode

    原题链接:https://oj.leetcode.com/problems/evaluate-reverse-polish-notation/ 题目大意:给出逆波兰式,然后求其结果. 解题方法:单个栈 ...

  10. autofac如何注册静态方法里的接口对象

    标题可能是不准确的,因为我不知道如何描述.不知道的原因,是对依赖注入一知半解. Autofac可以自动注册对象实例到接口,人所尽知.而在asp.net mvc中,这个实例化的工作,通常在每个控制器的构 ...