Khan's Notebook GCC/GNU/Linux Delphi/Window Java/Anywhere

路漫漫,长修远,我们不能没有钱

IOS 绘制PDF


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


1 - (void)viewDidLoad
2 {
3     [super viewDidLoad];
4     // Do any additional setup after loading the view, typically from a nib.
5     
6     //调用方法
7     [self createPdf:[UIImage imageNamed:@"aa"] andText:@"汉字"];
8  
9 }


没注释掉的代码 每一行都有其意义. 注意步骤, 仔细阅读注释

posted on 2013-03-18 23:10 Khan 阅读(3572) 评论(0)  编辑 收藏 引用 所属分类: GCC/G++跨平台开发


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2013年3月>
242526272812
3456789
10111213141516
17181920212223
24252627282930
31123456

导航

统计

常用链接

留言簿(33)

随笔分类(225)

随笔档案(169)

相册

技术

友情链接

最新随笔

搜索

积分与排名

最新随笔

最新评论

阅读排行榜

评论排行榜