2012-04-08 16 views
4

Wenn ich versuche, den aktuellen Screenshot (für eine iPad-Ansicht) zu drucken, erhalte ich einen seltsamen Fehler im Konsolenfenster: failed to find PDF header: %PDF not found.Konsolenfehler: PDF-Header konnte nicht gefunden werden: `% PDF 'nicht gefunden

Ich frage mich, warum dieser Fehler im Konsolenfenster ausgelöst wird? warum es etwas erwähnt, das mit PDF in Verbindung steht, obwohl ich PDF verwandte Sachen im gesamten Projekt nicht verwende.

Der Code Im mit der Screenshot drucken ist:

- (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 


     } 

    } 

Der Dateipfad (screenshot.png) korrekt ist, und es ist richtig zu Dokumenten-Verzeichnis gespeichert.

Antwort

2

Es wäre hilfreich zu wissen, welche Linie genau diese Konsolenausgabe verursacht. Sie könnten dies im Debugger durchgehen, um es herauszufinden.

Meine Vermutung ist, dass es der Anruf an -[UIPrintInteractionController canPrintData:] ist. Wenn Sie the documentation for that method lesen, müssen Sie überprüfen, ob diese Daten PDF enthalten. Es sieht aus, als ob es versucht und fehlschlägt, eine Nachricht auf dem Weg zu drucken.

Da in der Regel keine Endbenutzer die iOS-Konsole sehen, ist dies kein sehr wichtiger Fehler, anscheinend nicht wichtig genug für Apple zu beheben.

+0

Dies ist die Zeile, die diesen Fehler auslöst: [self.pic presentFromRect: self.printButton.frame inView: self.view animiert: YES completionHandler: completionHandler]; – JAHelia

+0

Ich schätze ich falsch geraten! Die Drucksysteme von OS X und iOS basieren jedoch im Allgemeinen auf PDF. Vielleicht macht etwas anderes in der Druckpipeline eine ähnliche Art von Prüfung. –

+0

also, würde dieser Fehler Probleme im Druckprozess verursachen? Ich kann den Druckvorgang nicht testen, weil ich keinen von AirPlay unterstützten Drucker habe. – JAHelia

0

Das ist mir auch passiert. Ich habe jede Zeile überprüft und herausgefunden, dass dies daran liegt, dass Sie Daten drucken. Und wenn Sie das Bild direkt drucken, wird diese seltsame Warnung verschwinden. Da von der Apple-Datei des UIPrintInteractionController Rahmen:

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

Die printingItem kann eines der oben genannten vier Typen sein. Meine Vermutung ist, Apple nimmt Daten standardmäßig als PDF-Daten, und anscheinend sind dies keine Header-Daten in den Daten, die Sie aus UIImage generiert haben.

Verwandte Themen