2016-03-11 11 views
5

ich mit Hilfe des folgenden Codes ein UIWebView zu pdf/Bild bin Umwandlung:eine UIWebView zu PDF/Bild Konvertieren gibt nur einen Zoll breite Ausgang

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

Aber ich bin nur ein Zoll breit bekommen Ausgabe. Auch das Ganze enthält Passungen auf einer Seite und macht es unlesbar. Wie macht man A4-Ausgabe?

+0

Ich habe gespielt könnte gestartet. Es ist unklar für mich, was du erreichen willst. Möchten Sie ein PDF mit mehreren Seiten erstellen, jede A4-Seite? Oder Sie versuchen, ein einzelnes Bild von der gesamten Webseite zu erstellen, so wie sich Ihr Code derzeit verhält, aber ändern Sie die Ergebnisgröße? –

+0

@BorisVerebsky: Ich möchte mit mehreren Seiten erstellen. – Poles

Antwort

0

Dies schafft eine PDF von einem Screenshot einer Webseite - helfen Sie ein wenig mit Ihrem Code :)

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