- (void)viewDidLoad { [super viewDidLoad]; [self createPDF]; } - (void)createPDF { [self setupPDFDocumentNamed:@"myPdf" Width:850 Height:1100]; [self beginPDFPage]; } - (void)beginPDFPage { UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0, pageSize.width, pageSize.height), nil); // kPadding will make 20 points margin on both sides of pdf CGRect textRect = [self addText:@"Line Text Testing" withFrame:CGRectMake(PdfPadding, PdfPadding, 400, 200) fontSize:48.0f]; textRect = [self addLineWithFrame:CGRectMake(PdfPadding, textRect.origin.y + textRect.size.height +PdfPadding, pageSize.width - PdfPadding*2, 4) withColor:[UIColor blueColor]]; UIImage *anImage = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"https://www.phantompeer.com/sitefiles/osx.png"]]]; textRect = [self addImage:anImage atPoint:CGPointMake((pageSize.width/2)-(anImage.size.width/2),textRect.origin.y + textRect.size.height + PdfPadding)]; textRect = [self addLineWithFrame:CGRectMake(PdfPadding, textRect.origin.y + textRect.size.height + PdfPadding, pageSize.width - PdfPadding*2, 4) withColor:[UIColor redColor]]; textRect = [self addText:@"Line Text Testing" withFrame:CGRectMake(PdfPadding, textRect.origin.y + textRect.size.height + PdfPadding, 400, 200) fontSize:48.0f]; textRect = [self addLineWithFrame:CGRectMake(PdfPadding, textRect.origin.y + textRect.size.height +PdfPadding, pageSize.width - PdfPadding*2, 4) withColor:[UIColor blueColor]]; anImage = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"https://www.w3schools.com/css/img_fjords.jpg"]]]; textRect = [self addImage:anImage atPoint:CGPointMake((pageSize.width/2)-(anImage.size.width/2),textRect.origin.y + textRect.size.height + PdfPadding)]; textRect = [self addLineWithFrame:CGRectMake(PdfPadding, textRect.origin.y + textRect.size.height + PdfPadding, pageSize.width - PdfPadding*2, 4) withColor:[UIColor redColor]]; UIGraphicsEndPDFContext(); [self loadRemotePdf]; } -(CGRect)addText:(NSString*)text withFrame:(CGRect)frame fontSize:(float)fontSize { UIFont *font = [UIFont systemFontOfSize:fontSize]; CGSize stringSize = [text sizeWithFont:font constrainedToSize:CGSizeMake(pageSize.width - 2*20-2*20, pageSize.height - 2*20 - 2*20) lineBreakMode:UILineBreakModeWordWrap]; if((frame.origin.y + stringSize.height + PdfPadding) > pageSize.height) { frame = CGRectMake(frame.origin.x, PdfPadding, frame.size.width, frame.size.height); UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0, pageSize.width, pageSize.height), nil); } float textWidth = frame.size.width; if (textWidth < stringSize.width) textWidth = stringSize.width; if (textWidth > pageSize.width) textWidth = pageSize.width - frame.origin.x; CGRect renderingRect = CGRectMake(frame.origin.x, frame.origin.y, textWidth, stringSize.height); [text drawInRect:renderingRect withFont:font lineBreakMode:NSLineBreakByWordWrapping alignment:NSTextAlignmentLeft]; frame = CGRectMake(frame.origin.x, frame.origin.y, textWidth, stringSize.height); return frame; } -(CGRect)addLineWithFrame:(CGRect)frame withColor:(UIColor*)color { if((frame.origin.y + frame.size.height+PdfPadding) > pageSize.height) { frame = CGRectMake(frame.origin.x, PdfPadding, frame.size.width, frame.size.height); UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0, pageSize.width, pageSize.height), nil); } CGContextRef currentContext = UIGraphicsGetCurrentContext(); CGContextSetStrokeColorWithColor(currentContext, color.CGColor); // this is the thickness of the line CGContextSetLineWidth(currentContext, frame.size.height); CGPoint startPoint = frame.origin; CGPoint endPoint = CGPointMake(frame.origin.x + frame.size.width, frame.origin.y); CGContextBeginPath(currentContext); CGContextMoveToPoint(currentContext, startPoint.x, startPoint.y); CGContextAddLineToPoint(currentContext, endPoint.x, endPoint.y); CGContextClosePath(currentContext); CGContextDrawPath(currentContext, kCGPathFillStroke); return frame; } -(CGRect)addImage:(UIImage*)image atPoint:(CGPoint)point { CGRect imageFrame = CGRectMake(point.x, point.y, image.size.width, image.size.height); if((imageFrame.origin.y + imageFrame.size.height + PdfPadding) > pageSize.height) { imageFrame = CGRectMake(imageFrame.origin.x, PdfPadding, imageFrame.size.width, imageFrame.size.height); UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0, pageSize.width, pageSize.height), nil); } [image drawInRect:imageFrame]; return imageFrame; } - (void) loadRemotePdf { CGRect rect = [[UIScreen mainScreen] bounds]; CGSize screenSize = rect.size; NSString *newPDFName = [NSString stringWithFormat:@"myPdf.pdf"]; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *pdfPath = [documentsDirectory stringByAppendingPathComponent:newPDFName]; UIWebView *myWebView = [[UIWebView alloc] initWithFrame:CGRectMake(0,0,screenSize.width,screenSize.height)]; myWebView.autoresizesSubviews = YES; myWebView.autoresizingMask=(UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth); NSURL *myUrl = [NSURL fileURLWithPath:pdfPath]; NSURLRequest *myRequest = [NSURLRequest requestWithURL:myUrl]; [myWebView loadRequest:myRequest]; [self.view addSubview: myWebView]; }
To create a new page in pdf use
UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0, pageSize.width, pageSize.height), nil);