2013-01-17 51 views
1

嗨,有没有人可以帮助我?我是iOS开发新手。我试图实现一个打印功能,但我得到它的错误。我只看到.xib文件,其中一些文件是labels。该textview是存在的,我只是想打印图...当我按下打印按钮的程序崩溃..在iOS上打印

这里是我的代码:

- (NSData *)generatePDFDataForPrinting { 
    NSMutableData *myPdfData = [NSMutableData data]; 
    UIGraphicsBeginPDFContextToData(myPdfData, kPDFPageBounds, nil); 
    UIGraphicsBeginPDFPage(); 
    CGContextRef ctx = UIGraphicsGetCurrentContext(); 
    [self drawStuffInContext:ctx]; // Method also usable from drawRect:. 
    UIGraphicsEndPDFContext(); 
    return myPdfData; 
} 

- (void)drawStuffInContext:(CGContextRef)ctx { 
    UIFont *font = [UIFont fontWithName:@"Zapfino" size:48]; 
    CGRect textRect = CGRectInset(kPDFPageBounds, 36, 36); 
    [@"hello world!" drawInRect:textRect withFont:font]; 
} 


- (IBAction)printFromIphone:(id)sender { 
    float systemVersion = [[[UIDevice currentDevice] systemVersion] floatValue]; 

    if (systemVersion>4.1) { 

     NSData *myPdfData = [NSData dataWithContentsOfFile:myPdfData]; //check the value inside |myPdfData| and |pdfPath| is the path of your pdf. 
     UIPrintInteractionController *controller = [UIPrintInteractionController sharedPrintController]; 
     if (controller && [UIPrintInteractionController canPrintData:myPdfData]){ 
      //controller.delegate = delegate; //if necessary else nil 
      UIPrintInfo *printInfo = [UIPrintInfo printInfo]; 
      printInfo.outputType = UIPrintInfoOutputGeneral; 
      printInfo.jobName = [myPdfData lastPathComponent]; 
      //printInfo.duplex = UIPrintInfoDuplexLongEdge; 
      controller.printInfo = printInfo; 
      controller.showsPageRange = YES; 
      controller.printingItem = myPdfData; 

      // We need a completion handler block for printing. 
      UIPrintInteractionCompletionHandler completionHandler = ^(UIPrintInteractionController *printController, BOOL completed, NSError *error) { 
       if(completed && error){ 
        NSLog(@"FAILED! due to error in domain %@ with error code %u", error.domain, error.code); 
       } 
      }; 

      //   [controller presentFromRect:CGRectMake(200, 300, 100, 100) inView:senderView animated:YES completionHandler:completionHandler]; 
     }else { 
      NSLog(@"Couldn't get shared UIPrintInteractionController!"); 
     } 
    } 
} 
+0

那么你得到哪个错误? –

+0

使用未声明的标识符pdfData ....并且你可以建议我任何确切的教程... PLZ ..感谢 –

回答

0

不知道它的一个错字或不是,但你已经评论了你的实际PDF数据,这是它未申报的原因。

因为您需要myPdfData,所以此行需要取消注释。

//NSData *myPdfData = [NSData dataWithContentsOfFile:pdfData]; //check the value inside |myPdfData| and |pdfPath| is the path of your pdf. 

您可以用此行替换它以使用您的pdf而不是文件。

NSData *myPdfData = [self generatePDFDataForPrinting]; 
+0

感谢您的回复,并再次在下面的方法一个更多的错误未声明的标识符“rect”[控制器presentFromRect:rect inView: senderView动画:YES completionHandler:completionHandler]; –

+0

你需要从某处出示它。矩形只是位置。你可以用CGRect来填写你想要显示的地方。 –