2016-03-11 30 views
5

sto convertendo un UIWebView pdf/immagine per con l'aiuto del seguente codice:Conversione di un UIWebView in PDF/immagine dà un solo pollice di uscita di larghezza

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

Ma sto diventando un solo pollice di larghezza produzione. Anche l'intero contiene si inserisce in una pagina e lo rende illeggibile. Come realizzare stampe in formato A4?

+0

Ho giocato un po 'con il codice. Non è chiaro per me cosa stai cercando di ottenere. Vuoi creare pdf con più pagine, ogni pagina in formato A4? Oppure stai cercando di creare una singola immagine da un'intera pagina web, come il tuo codice si comporta attualmente, ma modifica le dimensioni dei risultati? –

+0

@BorisVerebsky: Voglio creare con più pagine. – Poles

risposta

0

Questo crea un PDF di uno screenshot di una pagina web - potrebbe aiutarti ad iniziare :)

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