La conversión de UIWebView a PDF / Image proporciona una salida de una pulgada de ancho

Estoy convirtiendo un UIWebView a pdf / image con la ayuda del siguiente código:

NSString *heightStr = [webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight;"]; int height = [heightStr intValue]; CGFloat screenHeight = webView.bounds.size.height; int pages = ceil(height / screenHeight); NSMutableData *pdfData = [NSMutableData data]; UIGraphicsBeginPDFContextToData(pdfData, webView.bounds, nil); CGRect frame = [webView frame]; NSMutableArray *imageArray= [[NSMutableArray alloc]init]; for (int i = 0; i < pages; i++) { // Check to screenHeight if page draws more than the height of the UIWebView if ((i+1) * screenHeight > height) { CGRect f = [webView frame]; f.size.height -= (((i+1) * screenHeight) - height); [webView setFrame: f]; } UIGraphicsBeginImageContext(frame.size); UIGraphicsBeginPDFPage(); CGContextRef currentContext = UIGraphicsGetCurrentContext(); //CGContextTranslateCTM(currentContext, 72, 72); // Translate for 1" margins [[[webView subviews] lastObject] setContentOffset:CGPointMake(0, screenHeight * i) animated:NO]; [webView.layer renderInContext:currentContext]; UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); [imageArray insertObject:viewImage atIndex:imageArray.count] ; UIGraphicsEndImageContext(); } UIGraphicsEndPDFContext(); [webView setFrame:frame]; //Send all images NSData *imgData = [self blendImages:imageArray]; //Final Image UIImage *finalImage = [UIImage imageWithData:imgData]; -(NSData*)blendImages:(NSMutableArray *)arrImage{ // get data from document CGFloat height=0 ,width=0 ; UIImage *tempImg = [arrImage objectAtIndex:0] ; width =tempImg.size.width ; for (int i = 0 ; i<arrImage.count ; i++){ UIImage *img= [arrImage objectAtIndex:i]; height = img.size.height +height; } CGSize size = CGSizeMake(width, height) ; UIGraphicsBeginImageContext(size); CGFloat h = 0; for (int i=0; i<arrImage.count; i++) { UIImage* uiimage = [arrImage objectAtIndex:i]; [uiimage drawAtPoint:CGPointMake(0, h) blendMode:kCGBlendModeNormal alpha:1.0]; h = uiimage.size.height +h ; } NSData *imageData = UIImagePNGRepresentation(UIGraphicsGetImageFromCurrentImageContext()); UIGraphicsEndImageContext(); return imageData; } 

Pero solo obtengo una salida de una pulgada de ancho. Además, el set contiene ajustes en una página y lo hace ilegible. ¿Cómo hacer una salida de tamaño A4?

Esto crea un PDF de una captura de pantalla de una página web, podría ayudarlo a comenzar 🙂

  - (IBAction)makePDF:(id)sender { UIGraphicsBeginImageContextWithOptions(webView.scrollView.contentSize, webView.scrollView.opaque, 0.0); webView.scrollView.contentOffset = CGPointZero; webView.scrollView.frame = CGRectMake(0, 0, webView.scrollView.contentSize.width, webView.scrollView.contentSize.height); [webView.scrollView.layer renderInContext: UIGraphicsGetCurrentContext()]; UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); CGRect imageFrame = CGRectMake(0, 0, image.size.width, image.size.height); NSMutableData *pdfData = [NSMutableData data]; UIGraphicsBeginPDFContextToData(pdfData, imageFrame, nil); //full screenshot UIGraphicsBeginPDFPage(); UIImageView *imageView = [[UIImageView alloc] initWithFrame:imageFrame]; [imageView setContentMode:UIViewContentModeScaleAspectFit]; [imageView setImage:image]; [imageView.layer renderInContext:UIGraphicsGetCurrentContext()]; UIGraphicsEndPDFContext(); NSArray *documentDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES); NSString *documentDirectory = [documentDirectories objectAtIndex:0]; NSString *fileName = [NSString stringWithFormat:@"%@.pdf",[NSDate date]]; NSString *path = [documentDirectory stringByAppendingPathComponent:fileName]; // save to disk [pdfData writeToFile:path atomically:YES]; NSLog(@"pdf in %@", path); }