2012-04-08 2 views
4

Когда я пытаюсь распечатать текущий скриншот (для iPad-вида), я получаю эту странную ошибку в окне консоли: failed to find PDF header: %PDF not found.Ошибка консоли: не удалось найти PDF-заголовок: `% PDF 'не найден

Интересно, почему эта ошибка запускается в окне консоли? почему он упоминает что-то, связанное с PDF, хотя я не использую никаких связанных с PDF материалов во всем проекте.

Код Im используя для печати скриншоте:

- (IBAction)print:(id)sender { 

    if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) 
     UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, [UIScreen mainScreen].scale); 
    else 
     UIGraphicsBeginImageContext(self.view.bounds.size); 

    [self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; 

    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); 

    UIGraphicsEndImageContext(); 


    //saving the file to documents directory 

    NSData * imageData = UIImagePNGRepresentation(viewImage); 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    documentsDirectory = [documentsDirectory stringByAppendingPathComponent:@"Screenshot.png"]; 
    [imageData writeToFile:documentsDirectory atomically:YES]; 

    NSString *myFilePath = [documentsDirectory stringByAppendingPathComponent:@"Screenshot.png"]; 
    UIImage *screenShot = [UIImage imageWithData:imageData]; 
    NSData *myData = [NSData dataWithData:UIImagePNGRepresentation(screenShot)]; 

    self.pic = [UIPrintInteractionController sharedPrintController]; 
     if (self.pic && [UIPrintInteractionController canPrintData:myData]) { 

     self.pic.delegate = self; 

     //filling up print info 
     UIPrintInfo *printInfo = [UIPrintInfo printInfo]; 
     printInfo.outputType = UIPrintInfoOutputGeneral; 
     printInfo.jobName = [myFilePath lastPathComponent]; 
     printInfo.duplex = UIPrintInfoDuplexLongEdge; 
     self.pic.printInfo = printInfo; 

     self.pic.showsPageRange = YES; 
     self.pic.printingItem = myData; 

     void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) = 
     ^(UIPrintInteractionController *pic, BOOL completed, NSError *error) { 

      if (!completed && error) 
       NSLog(@"FAILED! due to error in domain %@ with error code %u", 
             error.domain, error.code); 
      }; 

     [self.pic presentFromRect:self.printButton.frame inView:self.view animated:YES completionHandler: completionHandler]; // iPad 


     } 

    } 

Файл путь (screenshot.png) является правильным, и он сохранен в директории документов.

ответ

2

Это поможет узнать, какая именно строка вызывает вывод консоли. Вы можете пройти через это в отладчике, чтобы узнать.

Я предполагаю, что это звонок -[UIPrintInteractionController canPrintData:]. Если вы прочитали the documentation for that method, вы увидите, что он должен проверить, содержат ли эти данные PDF. Похоже, он пытается и терпит неудачу, печатая сообщение на этом пути.

Поскольку, как правило, конечные пользователи не наблюдают за iOS-консолью, это не очень важная ошибка, по-видимому, недостаточно важная для Apple, чтобы ее исправить.

+0

это линия, которая вызывает эту ошибку: [self.pic presentFromRect: self.printButton.frame inView: self.view animated: YES completeHandler: completeHandler]; – JAHelia

+0

Угадайте, я догадался, что неправильно! Но системы печати OS X и iOS обычно основаны на PDF. Возможно, что-то еще в конвейере печати выполняет аналогичную проверку. –

+0

так, возникла бы эта ошибка в процессе печати? Я не могу протестировать процесс печати, потому что у меня нет принтера с поддержкой AirPlay. – JAHelia

0

Это случилось со мной. Я проверил каждую строку, и я узнал, что это потому, что вы печатаете данные. И если вы сразу распечатаете изображение, это странное предупреждение исчезнет. Поскольку из файла Apple, рамок UIPrintInteractionController:

@NSCopying public var printingItem: AnyObject? // single NSData, NSURL, UIImage, ALAsset 

printingItem может быть любой из этих четырех типов. Я предполагаю, что Apple принимает данные как данные PDF по умолчанию, и, по-видимому, это не данные заголовка в данных, которые вы создали из UIImage.

Смежные вопросы