Converting a UIWebView to PDF/Image gives only one inch wide output

Viewed 315

I'm converting a UIWebView to pdf/image with the help of the following code:

    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;
}

But I'm getting only one inch wide output. Also the whole contains fits in one page and make it unreadable. How to make A4 sized output?

1 Answers
Related