2013-10-12 1 views
1

Мне нужно распечатать несколько страниц из PDF с помощью анимированных изображений (и добавить к ним надпись) Я знаю, как печатать весь PDF, но мне нужно печатать только страницы выбранный пользователем,Airprint a pdf page

Это должно быть что-то вроде

[printPages:[NSArray arrayWithObjects:1,2,5,6,9,11]] 

Так что я могу напечатать только документ с этими PDF страниц

И мне нужно было бы добавить изображение наложения на страницах: D

Знаете ли вы, возможно ли это?

Спасибо заранее!

ответ

0

я, наконец, создал эту функцию

-(void) splitPdf:(NSArray*) pages andNewFilePath:(NSString*)newFilePath andShouldRotate:(BOOL) shouldRotate andShouldPrintHoles:(BOOL)shouldPrintHoles{ 

    UIImage *holes; 

    if(shouldRotate) holes = [UIImage imageNamed:@"holes_rotated.png"]; 
    else    holes = [UIImage imageNamed:@"holes.png"]; 


    //create empty pdf file; 
    UIGraphicsBeginPDFContextToFile(newFilePath, CGRectMake(0, 0, 792, 612), nil); 

    CGPDFDocumentRef templateDocument = mPdf; 

    //get amount of pages in template 
    size_t count = CGPDFDocumentGetNumberOfPages(templateDocument); 

    //for each page in template 
    for(int i = 0; i< [pages count]; i = i+2){ 
     //get bounds of template page 

     int pageNumber = [((NSNumber*)[pages objectAtIndex:i]) intValue]; 
     if (pageNumber <= count){ 

      CGPDFPageRef templatePage = CGPDFDocumentGetPage(templateDocument,pageNumber); 
      CGPDFPageRef templatePage2 = CGPDFDocumentGetPage(templateDocument,pageNumber+1); 

      CGRect templatePageBounds = CGPDFPageGetBoxRect(templatePage, kCGPDFCropBox); 

      //create empty page with corresponding bounds in new document 
      //UIGraphicsBeginPDFPageWithInfo(templatePageBounds, nil); 
      float margin = templatePageBounds.size.width*MARGIN_PROPORTION; 
      CGRect newRect = CGRectMake(0, 0, templatePageBounds.size.width + margin, templatePageBounds.size.height*A4_PROPORTION + margin); 
      UIGraphicsBeginPDFPageWithInfo(newRect, nil); 
      CGContextRef context = UIGraphicsGetCurrentContext(); 

      CGContextSaveGState(context); 
      if(shouldRotate){ 
       CGContextTranslateCTM(context, 0.5f * templatePageBounds.size.width, 0.5f * templatePageBounds.size.height) ; 
       CGContextRotateCTM(context, radians(90)); 
       CGContextTranslateCTM(context, -0.5f * templatePageBounds.size.width, -0.5f * templatePageBounds.size.height) ; 
      } 

      //flip context due to different origins 
      if(!shouldRotate){ 
       CGContextTranslateCTM(context,75, templatePageBounds.size.height + 130); 
       CGContextScaleCTM(context, 0.75, -0.75); 
      } 
      else{ 
       CGContextTranslateCTM(context,-100, templatePageBounds.size.height - 70); 
       CGContextScaleCTM(context, 0.75, -0.75); 
      } 

      //Center the image with margins 
      if(!shouldRotate) CGContextTranslateCTM(context, margin*0.5f, -margin*A4_PROPORTION); 
      else     CGContextTranslateCTM(context, margin*A4_PROPORTION,margin*0.5f); 



      CGContextDrawPDFPage(context, templatePage); //copy content of template page on the corresponding page in new file 

      if(!shouldRotate) CGContextTranslateCTM(context, 0,538); 
      else    CGContextTranslateCTM(context, 538,0); 

      CGContextDrawPDFPage(context, templatePage2); 


      CGContextRestoreGState(context);    //Restore state 

      /* Here you can do any drawings */ 
      if(shouldPrintHoles){ 
       CGContextMoveToPoint(context, 0, 0); 
       if(!shouldRotate) { 
        [holes drawAtPoint:CGPointMake(0, ((templatePageBounds.size.height*A4_PROPORTION+margin) * 0.5f) - holes.size.height*0.5f)]; 
       } 
       else{ 
        [holes drawAtPoint:CGPointMake(((templatePageBounds.size.width*A4_PROPORTION+margin) * 0.5f) - holes.size.width*0.5f,0)]; 
       } 

      } 
     } 
     else{ 
      NSLog(@"Page to split is bigger than number of pages of the document"); 
     } 
    } 

    UIGraphicsEndPDFContext(); 
}