本方法为项目中画pdf的一个方法,画pdf,一共分为几步,1,获取地址,有两种获取地址方法,这是其中一种,2,关联上下文后开始绘画pdf,开始新的一页后必须用cgcontentbeginpage方法开始新的一页,从新设置坐标,等属性。3,释放。pdf就是个画布,我们是往上面画东西,而不是写东西,还有就是pdf用的坐标系是数学坐标,左下角为原点,而不是编程里常用的左上角为为坐标原点~一下是源码,重复的东西有点多,懒得整理了~关键的就那么几句~
-(void)MyPDFContextCreate{
//获取路径
NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);坐标
NSString *saveDirectory=[paths objectAtIndex:0];
NSString *saveFileName=@"myPDF.pdf";
NSString *newFilePath=[saveDirectory stringByAppendingPathComponent:saveFileName];
const char *filename=[newFilePath UTF8String];
//设置页面大小
CGRect pageRect=CGRectMake(0, 0, 612, 792);
//关联上下文的对象
CGContextRef pdfContext;
CFStringRef path;
CFURLRef url;
path=CFStringCreateWithCString(NULL, filename, kCFStringEncodingUTF8);
url=CFURLCreateWithFileSystemPath(NULL, path, kCFURLPOSIXPathStyle, 0);
CFRelease(path);
pdfContext=CGPDFContextCreateWithURL(url, &pageRect, nil);
CFRelease(url);
//开始画pdf
NSString *temtext=[[NSString alloc]init];
const char *text=(char *)[temtext UTF8String];
int width;
int height;
// 画推荐信
NSNumber *en=[self.fatherobject valueForKey:@"enabel"];
if(en.boolValue){
height=700;
//开始画pdf,开始新的一页
CGContextBeginPage(pdfContext, &pageRect);
//设置字体,字体大小等
CGContextSelectFont(pdfContext, "Helvetica", 30, kCGEncodingMacRoman);
CGContextSetTextDrawingMode(pdfContext, kCGTextFill);
CGContextSetRGBFillColor(pdfContext, 0, 0, 0, 1);
//画姓名
if(self.firstname!=nil||self.lastname!=nil){
if(self.firstname==nil){
self.firstname=@"";
}
if(self.lastname==nil){
self.lastname=@"";
}
temtext=[NSString stringWithFormat:@"%@ %@",self.firstname,self.lastname];
}
width=[self getfontwidth:temtext fontsize:30];
text=(char*)[temtext UTF8String];
CGContextSetFontSize(pdfContext, 30);
//关键方法,在指定位置画上text文字,文字必须为char类型
CGContextShowTextAtPoint(pdfContext, (612-width)/2, height, text, strlen(text));
height=height-30;
if((self.street!=nil&&![self.street isEqualToString:@""])||
(self.apt!=nil&&![self.apt isEqualToString:@""])||
(self.city!=nil&&![self.city isEqualToString:@""])||
(self.state!=nil&&![self.state isEqualToString:@""])||
(self.zip!=nil&&![self.zip isEqualToString:@""])){
if(self.street==nil){
self.street=@"";
}
if(self.apt==nil){
self.street=@"";
}
if(self.city==nil){
self.city=@"";
}
if(self.state==nil){
self.state=@"";
}
if(self.zip==nil){
self.zip=@"";
}
temtext=[NSString stringWithFormat:@"%@,%@,%@,%@,%@",self.street,self.apt,self.city,self.state,self.zip];
text=(char *)[temtext UTF8String];
width=[self getfontwidth:temtext fontsize:13];
CGContextSetFontSize(pdfContext, 13);
CGContextShowTextAtPoint(pdfContext, (612-width)/2, height, text, strlen(text));
height=height-13;
}
if(self.phone==nil){
self.phone=@"";
}
if(self.fax==nil){
self.fax=@"";
}
if(self.Email==nil){
self.Email=@"";
}
if(self.website==nil){
self.website=@"";
}
if(![self.phone isEqualToString:@""]||
![self.fax isEqualToString:@""]||
![self.Email isEqualToString:@""]||
![self.website isEqualToString:@""]){
temtext=[NSString stringWithFormat:@"Phone:%@, Fax:%@, Email:%@, Website:%@",self.phone,self.fax,self.Email,self.website];
text=(char *)[temtext UTF8String];
width=[self getfontwidth:temtext fontsize:13];
CGContextSetFontSize(pdfContext, 13);
CGContextShowTextAtPoint(pdfContext, (612-width)/2, height, text, strlen(text));
height=height-13;
}
//划线
CGContextMoveToPoint(pdfContext, 50, height);
CGContextAddLineToPoint(pdfContext, 612-50, height);
CGContextStrokePath(pdfContext);
height=height-20;
//画cotterletter内容
NSManagedObject *myobject=[DataController getcontactinfo:self.fatherid];
NSString *myapt=[myobject valueForKey:@"apt"];
NSString *mycity=[myobject valueForKey:@"city"];
NSString *mycompanyname=[myobject valueForKey:@"companyname"];
NSString *myfirstname=[myobject valueForKey:@"firstname"];
NSString *mylastname=[myobject valueForKey:@"lastname"];
NSString *myposition=[myobject valueForKey:@"postion"];
NSString *mystate=[myobject valueForKey:@"state"];
NSString *mystreet=[myobject valueForKey:@"street"];
NSString *mytitle=[myobject valueForKey:@"title"];
NSString *myzip=[myobject valueForKey:@"zip"];
NSDate *mydate=[myobject valueForKey:@"date"];
if(mydate!=nil){
NSDateFormatter *myformatter=[[NSDateFormatter alloc]init];
[myformatter setDateFormat:@"MMMM, yyyy"];
temtext=[NSString stringWithFormat:@"%@",[myformatter stringFromDate:mydate]];
[myformatter release];
text=(char *)[temtext UTF8String];
CGContextSetFontSize(pdfContext, 13);
CGContextShowTextAtPoint(pdfContext, 50, height, text, strlen(text));
height=height-30;
}
if((mytitle!=nil&&![mytitle isEqualToString:@""])||
(myfirstname!=nil&&![myfirstname isEqualToString:@""])||
(mylastname!=nil&&![mylastname isEqualToString:@""])){
temtext=[NSString stringWithFormat:@"%@ %@ %@",mytitle,myfirstname,mylastname];
height=[self plaintextatwith:50 width:450 text:temtext height:height fontsize:13 context:pdfContext];
height=height-14;
}
if(myposition!=nil&&![myposition isEqualToString:@""]){
temtext=[NSString stringWithFormat:@"%@",myposition];
height=[self plaintextatwith:50 width:450 text:temtext height:height fontsize:13 context:pdfContext];
height=height-14;
}
if(mycompanyname!=nil&&![mycompanyname isEqualToString:@""]){
temtext=[NSString stringWithFormat:@"%@",mycompanyname];
height=[self plaintextatwith:50 width:450 text:temtext height:height fontsize:13 context:pdfContext];
height=height-14;
}
if((![myapt isEqualToString:@""]&&myapt!=nil)||
(![mystreet isEqualToString:@""]&&mystreet!=nil)){
temtext=[NSString stringWithFormat:@"%@.,%@",myapt,mystreet];
height=[self plaintextatwith:50 width:450 text:temtext height:height fontsize:13 context:pdfContext];
height=height-14;
}
if((mycity!=nil&&![mycity isEqualToString:@""])||
(mystate!=nil&&![mystate isEqualToString:@""])||
(myzip!=nil&&![myzip isEqualToString:@""])){
temtext=[NSString stringWithFormat:@"%@,%@,%@",mycity,mystate,myzip];
height=[self plaintextatwith:50 width:450 text:temtext height:height fontsize:13 context:pdfContext];
height=height-14;
}
if((mytitle!=nil&&![mytitle isEqualToString:@""])||
(mylastname!=nil&&![mylastname isEqualToString:@""])){
height=height-15;
temtext=[NSString stringWithFormat:@"Dear %@.%@",mytitle,mylastname];
height=[self plaintextatwith:50 width:450 text:temtext height:height fontsize:13 context:pdfContext];
height=height-40;
}
if(self.coverletter!=nil&&![self.coverletter isEqualToString:@""]){
temtext=[NSString stringWithFormat:@"%@",self.coverletter];
height=[self plaintextatwith:50 width:450 text:temtext height:height fontsize:13 context:pdfContext];
}
//结束
CGContextEndPage(pdfContext);
}
if(YES){
//开始画resume内容
CGContextBeginPage(pdfContext, &pageRect);
CGContextSelectFont(pdfContext, "Helvetica", 30, kCGEncodingMacRoman);
CGContextSetTextDrawingMode(pdfContext, kCGTextFill);
CGContextSetRGBFillColor(pdfContext, 0, 0, 0, 1);
//显示first和lastname
if(self.firstname!=nil||self.lastname!=nil){
if(self.firstname==nil)
self.firstname=@"";
if(self.lastname==nil)
self.lastname=@"";
temtext=[NSString stringWithFormat:@"%@ %@",self.firstname,self.lastname];
width=[self getfontwidth:temtext fontsize:30];
height=700;
text=(char*)[temtext UTF8String];
CGContextShowTextAtPoint(pdfContext, (612-width)/2, height, text, strlen(text));
}
//显示street等basicinfo信息
//street,apt
if((self.street!=nil &&![self.street isEqualToString:@""])||(self.apt!=nil&&![self.apt isEqualToString:@""])){
if(self.street==nil){
self.street=@"";
}
if(self.apt==nil){
self.apt=@"";
}
height=[self getfontheight:temtext fontsize:10 height:height];
CGContextSelectFont(pdfContext, "Helvetica", 10, kCGEncodingMacRoman);
temtext=[NSString stringWithFormat:@"%@,%@",self.street,self.apt];
width=[self getfontwidth:temtext fontsize:10];
text=(char *)[temtext UTF8String];
CGContextShowTextAtPoint(pdfContext, (612-width)/2, height, text,strlen(text));
}
//city,state zip
if((self.city!=nil&&![self.city isEqualToString:@""])||
(self.state!=nil&&![self.state isEqualToString:@""])||
(self.zip!=nil&&![self.state isEqualToString:@""])){
if(self.city==nil){
self.city=@"";
}
if(self.state==nil){
self.state=@"";
}
if(self.zip==nil){
self.zip=@"";
}
height=[self getfontheight:temtext fontsize:10 height:height];
CGContextSelectFont(pdfContext, "Helvetica", 10,kCGEncodingMacRoman );
temtext=[NSString stringWithFormat:@"%@,%@,%@",self.city,self.state,self.zip];
width=[self getfontwidth:temtext fontsize:10];
text=(char *)[temtext UTF8String];
CGContextShowTextAtPoint(pdfContext, (612-width)/2, height, text, strlen(text));
}
//phone
if(self.phone!=nil&&![self.phone isEqualToString:@""]){
height=[self getfontheight:temtext fontsize:10 height:height];
CGContextSelectFont(pdfContext, "Helvetica", 10,kCGEncodingMacRoman );
temtext=[NSString stringWithFormat:@"Phone: %@",self.phone];
width=[self getfontwidth:temtext fontsize:10];
text=(char *)[temtext UTF8String];
CGContextShowTextAtPoint(pdfContext, (612-width)/2, height, text, strlen(text));
}
//fax
if(self.fax!=nil&&![self.fax isEqualToString:@""]){
height=[self getfontheight:temtext fontsize:10 height:height];
CGContextSelectFont(pdfContext, "Helvetica", 10,kCGEncodingMacRoman );
temtext=[NSString stringWithFormat:@"Fax: %@",self.fax];
width=[self getfontwidth:temtext fontsize:10];
text=(char *)[temtext UTF8String];
CGContextShowTextAtPoint(pdfContext, (612-width)/2, height, text, strlen(text));
}
if(self.Email!=nil&&![self.Email isEqualToString:@""]){
height=[self getfontheight:temtext fontsize:10 height:height];
temtext=[NSString stringWithFormat:@"Email: %@",self.Email];
width=[self getfontwidth:temtext fontsize:10];
text=(char *)[temtext UTF8String];
CGContextShowTextAtPoint(pdfContext, (612-width)/2, height, text, strlen(text));
}
//website
if(self.website!=nil&&![self.website isEqualToString:@""]){
height=[self getfontheight:temtext fontsize:10 height:height];
temtext=[NSString stringWithFormat:@"Website: %@",self.website];
width=[self getfontwidth:temtext fontsize:10];
text=(char *)[temtext UTF8String];
CGContextShowTextAtPoint(pdfContext, (612-width)/2, height, text, strlen(text));
}
//Objective
if(self.objective!=nil&&![self.objective isEqualToString:@""]){
//画线
height=[self getfontheight:temtext fontsize:10 height:height];
CGContextMoveToPoint(pdfContext, 50, height);
CGContextAddLineToPoint(pdfContext, 612-50, height);
CGContextStrokePath(pdfContext);
height=height-20;
text=(char *)[@"Objective" UTF8String];
CGContextSetFontSize(pdfContext, 15);
CGContextShowTextAtPoint(pdfContext, 55, height, text, strlen(text));
// CGContextSetFontSize(pdfContext, 10);
height=height+13;
temtext=[NSString stringWithFormat:@"%@",self.objective];
height=[self plaintextatwith:150 width:350 text:temtext height:height fontsize:13 context:pdfContext];
}
//5个可以排序的
for (int i=0;i<5;i++){
if([OrderData getskillnumber]==i){ //skill
if(self.skills!=nil&&[self.skills count]!=0){
// skill划线
height=[self getfontheight:temtext fontsize:15 height:height];
CGContextMoveToPoint(pdfContext, 50, height);
CGContextAddLineToPoint(pdfContext, 612-50, height);
CGContextStrokePath(pdfContext);
height=height-20;
text=(char *)[@"Skills" UTF8String];
CGContextSetFontSize(pdfContext, 15);
CGContextShowTextAtPoint(pdfContext, 55, height, text, strlen(text));
//skill内容
//height=height+13;
for(int i=0;i<[self.skills count];i++){
NSManagedObject *object=[self.skills objectAtIndex:i];
temtext=[NSString stringWithFormat:@"* %@",[object valueForKey:@"skill"]];
height=[self plaintextatwith:150 width:350 text:temtext height:height fontsize:13 context:pdfContext];
// height=height-13;
}
}
}else if([OrderData getothernumber]==i){ //other
if(self.others!=nil&&[self.others count]!=0){
// other划线
height=[self getfontheight:temtext fontsize:15 height:height];
CGContextMoveToPoint(pdfContext, 50, height);
CGContextAddLineToPoint(pdfContext, 612-50, height);
CGContextStrokePath(pdfContext);
height=height-20;
text=(char *)[@"Others" UTF8String];
CGContextSetFontSize(pdfContext, 15);
CGContextShowTextAtPoint(pdfContext, 55, height, text, strlen(text));
//other内容
for(int i=0;i<[self.others count];i++){
NSManagedObject *object=[self.others objectAtIndex:i];
temtext=[NSString stringWithFormat:@"* %@",[object valueForKey:@"other"]];
height=[self plaintextatwith:150 width:350 text:temtext height:height fontsize:13 context:pdfContext];
// height=height-13;
}
}
}else if([OrderData getexperiencenumber]==i){ //experience
if(self.experience!=nil&&[self.experience count]!=0){
//排序
NSSortDescriptor *descriptor=[NSSortDescriptor sortDescriptorWithKey:@"start" ascending:NO];
[self.experience setArray:[self.experience sortedArrayUsingDescriptors:[NSArray arrayWithObjects:descriptor, nil]]];
// other划线
height=[self getfontheight:temtext fontsize:15 height:height];
CGContextMoveToPoint(pdfContext, 50, height);
CGContextAddLineToPoint(pdfContext, 612-50, height);
CGContextStrokePath(pdfContext);
height=height-20;
text=(char *)[@"Experience" UTF8String];
CGContextSetFontSize(pdfContext, 15);
CGContextShowTextAtPoint(pdfContext, 55, height, text, strlen(text));
//experience内容
for(int i=0;i<[self.experience count];i++){
NSManagedObject *object=[self.experience objectAtIndex:i];
NSString *position=[object valueForKey:@"position"];
NSString *companyname=[object valueForKey:@"companyname"];
NSString *location=[object valueForKey:@"location"];
NSDate *startdate=[object valueForKey:@"start"];
NSDate *enddate=[object valueForKey:@"end"];
NSString *thisid=[object valueForKey:@"thisid"];
temtext=[NSString stringWithFormat:@"%@",position];
height=[self plaintextatwith:150 width:350 text:temtext height:height fontsize:15 context:pdfContext];
height=height-13;
temtext=[NSString stringWithFormat:@"%@, %@",companyname,location];
height=[self plaintextatwith:180 width:320 text:temtext height:height fontsize:13 context:pdfContext];
height=height-13;
NSDateFormatter *timeformatter=[[NSDateFormatter alloc]init];
[timeformatter setDateFormat:@"MMMM, yyyy"];
NSNumber *number=(NSNumber*)[object valueForKey:@"currentjob"];
if(!number.boolValue){
temtext=[NSString stringWithFormat:@"%@ ~ %@",[timeformatter stringFromDate:startdate],[timeformatter stringFromDate:enddate]];
}else{
temtext=[NSString stringWithFormat:@"%@ ~ Present",[timeformatter stringFromDate:startdate]];
}
[timeformatter release];
height=[self plaintextatwith:180 width:320 text:temtext height:height fontsize:13 context:pdfContext];
NSMutableArray *responsibility=[DataController getresponsibility:thisid];
NSLog(@"responsibility cout:%d \n responsibility context:%@",[responsibility count],responsibility);
for(int j=0;j<[responsibility count];j++){
NSManagedObject *object=[responsibility objectAtIndex:j];
NSString *respon=[object valueForKey:@"responsibility"];
temtext=[NSString stringWithFormat:@"* %@",respon];
height=[self plaintextatwith:150 width:350 text:temtext height:height fontsize:13 context:pdfContext];
height=height-13;
NSLog(@"J=%d",j);
}
height=height-15;
}
}
}else if([OrderData geteducationnumber]==i){ //Education
if(self.education!=nil&&[self.education count]!=0){
//排序
NSSortDescriptor *descriptor=[NSSortDescriptor sortDescriptorWithKey:@"starttime" ascending:NO];
[self.education setArray:[self.education sortedArrayUsingDescriptors:[NSArray arrayWithObjects:descriptor, nil]]];
// other划线
height=[self getfontheight:temtext fontsize:15 height:height];
CGContextMoveToPoint(pdfContext, 50, height);
CGContextAddLineToPoint(pdfContext, 612-50, height);
CGContextStrokePath(pdfContext);
height=height-20;
text=(char *)[@"Education" UTF8String];
CGContextSetFontSize(pdfContext, 15);
CGContextShowTextAtPoint(pdfContext, 55, height, text, strlen(text));
//内容
for(int i=0;i<[self.education count];i++){
NSManagedObject *object=[self.education objectAtIndex:i];
NSString *schoolname=[object valueForKey:@"school"];
NSDate *startdate=[object valueForKey:@"starttime"];
NSDate *enddate=[object valueForKey:@"endtime"];
NSString *comment=[object valueForKey:@"comment"];
NSString *major=[object valueForKey:@"major"];
//height=height-13;
temtext=[NSString stringWithFormat:@"%@",schoolname];
height=[self plaintextatwith:150 width:350 text:temtext height:height fontsize:15 context:pdfContext];
height=height-13;
NSDateFormatter *timeformatter=[[NSDateFormatter alloc]init];
[timeformatter setDateFormat:@"MMMM, yyyy"];
temtext=[NSString stringWithFormat:@"%@ ~ %@",[timeformatter stringFromDate:startdate],[timeformatter stringFromDate:enddate]];
[timeformatter release];
height=[self plaintextatwith:180 width:320 text:temtext height:height fontsize:13 context:pdfContext];
height=height-13;
temtext=[NSString stringWithFormat:@"%@",major];
height=[self plaintextatwith:180 width:320 text:temtext height:height fontsize:13 context:pdfContext];
height=height-13;
temtext=[NSString stringWithFormat:@"%@",comment];
height=[self plaintextatwith:180 width:320 text:temtext height:height fontsize:13 context:pdfContext];
}
}
}else if([OrderData getawardnumber]==i){ //award
if(self.awards!=nil&&[self.awards count]!=0){
//排序
NSSortDescriptor *descriptor=[NSSortDescriptor sortDescriptorWithKey:@"awarddate" ascending:NO];
[self.awards setArray:[self.awards sortedArrayUsingDescriptors:[NSArray arrayWithObjects:descriptor, nil]]];
// other划线
height=[self getfontheight:temtext fontsize:15 height:height];
CGContextMoveToPoint(pdfContext, 50, height);
CGContextAddLineToPoint(pdfContext, 612-50, height);
CGContextStrokePath(pdfContext);
height=height-20;
text=(char *)[@"Awards" UTF8String];
CGContextSetFontSize(pdfContext, 15);
CGContextShowTextAtPoint(pdfContext, 55, height, text, strlen(text));
//award内容
for(int i=0;i<[self.awards count];i++){
NSManagedObject *object=[self.awards objectAtIndex:i];
NSString *comment=[object valueForKey:@"comment"];
NSString *name=[object valueForKey:@"name"];
NSDate *awarddate=[object valueForKey:@"awarddate"];
temtext=[NSString stringWithFormat:@"%@",name];
height= [self plaintextatwith:150 width:350 text:temtext height:height fontsize:15 context:pdfContext];
height=height-13;
NSDateFormatter *timeformatter=[[NSDateFormatter alloc]init];
[timeformatter setDateFormat:@"MMMM, dd, yyyy"];
temtext=[NSString stringWithFormat:@"%@",[timeformatter stringFromDate:awarddate]];
[timeformatter release];
height=[self plaintextatwith:180 width:320 text:temtext height:height fontsize:15 context:pdfContext];
height=height-13;
temtext=[NSString stringWithFormat:@"%@",comment];
height=[self plaintextatwith:180 width:320 text:temtext height:height fontsize:13 context:pdfContext];
height=height-15;
}
}
}
}
CGContextEndPage(pdfContext);
}
CGContextRelease(pdfContext);
}