我已经编写了这段代码来从 UIView 内容生成 pdf。愿这对你有所帮助。
#define kBorderInset 20.0
#define kBorderWidth 1.0
#define kMarginInset 10.0
//Line drawing
#define kLineWidth 1.0
- (IBAction)generatePdfButtonPressed
{
pageSize = CGSizeMake(612, 792);
NSString *fileName = @"profileInfo.pdf";
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *pdfFileName = [documentsDirectory stringByAppendingPathComponent:fileName];
[self generatePdfWithFilePath:pdfFileName];
}
- (void) generatePdfWithFilePath: (NSString *)thefilePath
{
UIGraphicsBeginPDFContextToFile(thefilePath, CGRectZero, nil);
NSInteger currentPage = 0;
BOOL done = NO;
do
{
// Mark the beginning of a new page.
UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0, pageSize.width, pageSize.height), nil);
// Draw a page number at the bottom of each page.
currentPage++;
[self drawPageNumber:currentPage];
//Draw a border for each page.
[self drawBorder];
//Draw text fo our header.
[self drawHeader];
//Draw a line below the header.
[self drawLine];
//Draw some text for the page.
if (profileInfo!=nil)
{
NSString *stringwithInfo=[NSString stringWithFormat:@"Headline: %@\nFirstname: %@\nLastName : %@\nSiteStandardProfileRequest:\n%@",[profileInfo valueForKey:@"headline"],[profileInfo valueForKey:@"firstName"],[profileInfo valueForKey:@"lastName"],[[profileInfo valueForKey:@"siteStandardProfileRequest"]valueForKey:@"url"]];
[self drawText:stringwithInfo];
}
//Draw an image
[self drawImage];
done = YES;
}
while (!done);
// Close the PDF context and write the contents out.
UIGraphicsEndPDFContext();
}
- (void) drawBorder
{
CGContextRef currentContext = UIGraphicsGetCurrentContext();
UIColor *borderColor = [UIColor brownColor];
CGRect rectFrame = CGRectMake(kBorderInset, kBorderInset, pageSize.width-kBorderInset*2, pageSize.height-kBorderInset*2);
CGContextSetStrokeColorWithColor(currentContext, borderColor.CGColor);
CGContextSetLineWidth(currentContext, kBorderWidth);
CGContextStrokeRect(currentContext, rectFrame);
}
- (void) drawLine
{
CGContextRef currentContext = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(currentContext, kLineWidth);
CGContextSetStrokeColorWithColor(currentContext, [UIColor blueColor].CGColor);
CGPoint startPoint = CGPointMake(kMarginInset + kBorderInset, kMarginInset + kBorderInset + 40.0);
CGPoint endPoint = CGPointMake(pageSize.width - 2*kMarginInset -2*kBorderInset, kMarginInset + kBorderInset + 40.0);
CGContextBeginPath(currentContext);
CGContextMoveToPoint(currentContext, startPoint.x, startPoint.y);
CGContextAddLineToPoint(currentContext, endPoint.x, endPoint.y);
CGContextClosePath(currentContext);
CGContextDrawPath(currentContext, kCGPathFillStroke);
}
- (void) drawText:(NSString*)txtTodraw
{
CGContextRef currentContext = UIGraphicsGetCurrentContext();
CGContextSetRGBFillColor(currentContext, 0.0, 0.0, 0.0, 1.0);
UIFont *font = [UIFont systemFontOfSize:14.0];
CGSize stringSize = [txtTodraw sizeWithFont:font
constrainedToSize:CGSizeMake(pageSize.width - 2*kBorderInset-2*kMarginInset, pageSize.height - 2*kBorderInset - 2*kMarginInset)
lineBreakMode:UILineBreakModeWordWrap];
CGRect renderingRect = CGRectMake(kBorderInset + kMarginInset, kBorderInset + kMarginInset + 50.0, pageSize.width - 2*kBorderInset - 2*kMarginInset, stringSize.height);
[txtTodraw drawInRect:renderingRect
withFont:font
lineBreakMode:UILineBreakModeWordWrap
alignment:UITextAlignmentLeft];
}
- (void) drawImage
{
UIImage * demoImage = [UIImage imageNamed:@"demo.png"];
[demoImage drawInRect:CGRectMake( (pageSize.width - demoImage.size.width/2)/2, 350, demoImage.size.width/2, demoImage.size.height/2)];
}
- (void) drawHeader
{
CGContextRef currentContext = UIGraphicsGetCurrentContext();
CGContextSetRGBFillColor(currentContext, 0.3, 0.7, 0.2, 1.0);
NSString *textToDraw = @"LinkedIn Profile Info";
UIFont *font = [UIFont systemFontOfSize:24.0];
CGSize stringSize = [textToDraw sizeWithFont:font constrainedToSize:CGSizeMake(pageSize.width - 2*kBorderInset-2*kMarginInset, pageSize.height - 2*kBorderInset - 2*kMarginInset) lineBreakMode:UILineBreakModeWordWrap];
CGRect renderingRect = CGRectMake(kBorderInset + kMarginInset, kBorderInset + kMarginInset, pageSize.width - 2*kBorderInset - 2*kMarginInset, stringSize.height);
[textToDraw drawInRect:renderingRect withFont:font lineBreakMode:UILineBreakModeWordWrap alignment:UITextAlignmentLeft];
}
- (void)drawPageNumber:(NSInteger)pageNumber
{
NSString* pageNumberString = [NSString stringWithFormat:@"Page %d", pageNumber];
UIFont* theFont = [UIFont systemFontOfSize:12];
CGSize pageNumberStringSize = [pageNumberString sizeWithFont:theFont
constrainedToSize:pageSize
lineBreakMode:UILineBreakModeWordWrap];
CGRect stringRenderingRect = CGRectMake(kBorderInset,
pageSize.height - 40.0,
pageSize.width - 2*kBorderInset,
pageNumberStringSize.height);
[pageNumberString drawInRect:stringRenderingRect withFont:theFont lineBreakMode:UILineBreakModeWordWrap alignment:UITextAlignmentCenter];
}
-(void)fillInformationInform:(NSDictionary*)dics
{
headLineLabel.text=[dics valueForKey:@"headline"];
NSURL *picUrl=[NSURL URLWithString:[dics valueForKey:@"pictureUrl"]];
profileImageView.image=[UIImage imageWithData:[NSData dataWithContentsOfURL:picUrl]];
phoneNoLabel.text=[[[[dics valueForKey:@"phoneNumbers"] valueForKey:@"values"] objectAtIndex:0] valueForKey:@"phoneNumber"];
cityLabel.text=[[dics valueForKey:@"location"] valueForKey:@"name"];
emailAddressLabel.text=[dics valueForKey:@"emailAddress"];
nameLabel.text=[NSString stringWithFormat:@"%@ %@",[dics valueForKey:@"firstName"],[dics valueForKey:@"lastName"]];
dateOfBirthLabel.text=[NSString stringWithFormat:@"%@-%@-%@",[[dics valueForKey:@"dateOfBirth"]valueForKey:@"day"],[[dics valueForKey:@"dateOfBirth"]valueForKey:@"month"],[[dics valueForKey:@"dateOfBirth"]valueForKey:@"year"]];
NSDictionary *eduDic=[[NSDictionary alloc] initWithDictionary:[[[dics valueForKey:@"educations"]valueForKey:@"values"]objectAtIndex:0]];
// NSLog(@"education dic is %@",eduDic);
degreeLabel.text=[eduDic valueForKey:@"degree"];
durationLabel.text=[NSString stringWithFormat:@"From %@ To %@",[[eduDic valueForKey:@"startDate"]valueForKey:@"year"],[[eduDic valueForKey:@"endDate"]valueForKey:@"year"]];
fieldOfStudyLabel.text=[eduDic valueForKey:@"fieldOfStudy"];
collegeLabel.text=[eduDic valueForKey:@"schoolName"];
destinationLabel.text=[[[[dics valueForKey:@"positions"] valueForKey:@"values"] objectAtIndex:0] valueForKey:@"title"];
NSArray *skillsArray=[[NSArray alloc] initWithArray:[[dics valueForKey:@"skills"]valueForKey:@"values"]];
NSString *skillStr=[[NSString alloc] initWithFormat:@""];
for (NSDictionary *skillDic in skillsArray)
{
if (![skillStr isEqualToString:@""]) {
skillStr=[skillStr stringByAppendingFormat:@","];
}
skillStr=[skillStr stringByAppendingFormat:@"%@",[[skillDic valueForKey:@"skill"]valueForKey:@"name"]];
}
NSLog(@"skill string is %@",skillStr);
skillsLable.text=[NSString stringWithFormat:@"%@",skillStr];
}