2010-12-07 9 views
23

Ich möchte die Druckfunktionalität in meine App integrieren.Wie in iOS 4.2 zu drucken?

Das Dokument, das ich drucken möchte, wird im .doc oder .txt Format sein. Ich bin noch nicht sehr erfahren in der iPhone-Entwicklung, so dass es schwierig ist, es zu implementieren, indem ich der Apple-Dokumentation folge.

Wenn mir jemand helfen könnte, indem er ein paar Beispielcode veröffentlicht, wird eine große Hilfe sein.

+0

Ich aktualisierte meine Antwort, um Beispielcode für den Druck des einfachen Textes einzuschließen. –

Antwort

34

Überprüfen Sie die Drawing and Printing Guide for iOS - Ich bin mit der Druckabteilung verbunden. Es gibt Beispielcode und gute Links zu mehr Beispielcode dort.

Bearbeiten: Ich sehe jetzt, dass Sie angeben, dass Sie die Dokumentation schwer zu folgen finden.

Word-Dokumente sind kompliziert - Sie müssen die Daten analysieren, was ziemlich schwierig ist.

Text und HTML sind einfacher. Ich nahm Apples Beispiel für HTML und verändert es für Klartext:

- (IBAction)printContent:(id)sender { 
    UIPrintInteractionController *pic = [UIPrintInteractionController sharedPrintController]; 
    pic.delegate = self; 

    UIPrintInfo *printInfo = [UIPrintInfo printInfo]; 
    printInfo.outputType = UIPrintInfoOutputGeneral; 
    printInfo.jobName = self.documentName; 
    pic.printInfo = printInfo; 

    UISimpleTextPrintFormatter *textFormatter = [[UISimpleTextPrintFormatter alloc] 
               initWithText:yourNSStringWithContextOfTextFileHere]; 
    textFormatter.startPage = 0; 
    textFormatter.contentInsets = UIEdgeInsetsMake(72.0, 72.0, 72.0, 72.0); // 1 inch margins 
    textFormatter.maximumContentWidth = 6 * 72.0; 
    pic.printFormatter = textFormatter; 
    [textFormatter release]; 
    pic.showsPageRange = YES; 

    void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) = 
    ^(UIPrintInteractionController *printController, BOOL completed, NSError *error) { 
     if (!completed && error) { 
      NSLog(@"Printing could not complete because of error: %@", error); 
     } 
    }; 
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 
     [pic presentFromBarButtonItem:sender animated:YES completionHandler:completionHandler]; 
    } else { 
     [pic presentAnimated:YES completionHandler:completionHandler]; 
    } 
} 
+1

Bearbeitet, um Klartext zu drucken. –

+0

Danke für Ihre wertvolle Zeit, um meine Frage zu beantworten. – iPhoneDev

+0

@Matthew: Bitte bearbeiten Sie Ihre Ans. für die Zeile [pic presentFromFromBarButtonItem: Absender animiert: YES completionHandler: completionHandler]; Es sollte ein 'Von' in der "presentFromFromBarButtonItem" Methode – iPhoneDev

1

hallo dies kann Ihnen helfen, versuchen Sie es und schreiben, wenn irgendeine Frage haben.

-(IBAction)printFromIphone:(id)sender { 

    UIPrintInteractionController *pic = [UIPrintInteractionController sharedPrintController]; 
    pic.delegate = self; 

    UIPrintInfo *printInfo = [UIPrintInfo printInfo]; 
    printInfo.outputType = UIPrintInfoOutputGeneral; 
    printInfo.jobName = self.documentName; 
    pic.printInfo = printInfo; 

    UISimpleTextPrintFormatter *textFormatter = [[UISimpleTextPrintFormatter alloc] 
               initWithText:yourNSStringWithContextOfTextFileHere]; 
    textFormatter.startPage = 0; 
    textFormatter.contentInsets = UIEdgeInsetsMake(72.0, 72.0, 72.0, 72.0); // 1 inch margins 
    textFormatter.maximumContentWidth = 6 * 72.0; 
    pic.printFormatter = textFormatter; 
    [textFormatter release]; 
    pic.showsPageRange = YES; 

    void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) = 
    ^(UIPrintInteractionController *printController, BOOL completed, NSError *error) { 
     if (!completed && error) { 
      NSLog(@"Printing could not complete because of error: %@", error); 
     } 
    }; 
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 
     [pic presentFromBarButtonItem:sender animated:YES completionHandler:completionHandler]; 
    } else { 
     [pic presentAnimated:YES completionHandler:completionHandler]; 
    } 
} 
1

Zu allererst hinzufügen UIPrintInteractionControllerDelegate und Variable erstellen

UIPrintInteractionController *printController; 

Im Folgenden Code alle Bilder, Dokumente zu drucken, Excel, Powerpoint arbeitet PDF-Dateien für mich:

[self printItem:SomeData withFilePath:YourFilePath]; 

Im obigen Code geben Sie Ihre NSData Ihres Dokuments/Bild und URL (filePath) und unter weiterem Code von printItem: withFilePath: Methode

-(void)printItem :(NSData*)data withFilePath:(NSString*)filePath{ 
printController = [UIPrintInteractionController sharedPrintController]; 
printController.delegate = self; 

UIPrintInfo *printInfo = [UIPrintInfo printInfo]; 
printInfo.outputType = UIPrintInfoOutputGeneral; 
printInfo.jobName = [NSString stringWithFormat:@""]; 
printInfo.duplex = UIPrintInfoDuplexLongEdge; 
printController.printInfo = printInfo; 
printController.showsPageRange = YES; 


//If NSData contains data of image/PDF 
if(printController && [UIPrintInteractionController canPrintData:data]) { 
    printController.printingItem = data; 

}else{ 
    UIWebView* webView = [UIWebView new]; 
    printInfo.jobName = webView.request.URL.absoluteString; 
    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:filePath]]]; 

    printController.printFormatter = webView.viewPrintFormatter; 

} 

    void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) = ^(UIPrintInteractionController *printController, BOOL completed, NSError *error) { 
     if (!completed && error) { 
      //NSLog(@"FAILED! due to error in domain %@ with error code %u", error.domain, error.code); 
     } 
    }; 

    // Check wether device is iPad/iPhone , because UIPrintInteractionControllerDelegate has different methods for both devices 
    if([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) { 
     [printController presentFromRect:self.view.frame inView:self.view animated:YES completionHandler:completionHandler]; 
    } 
    else { 
     [printController presentAnimated:YES completionHandler:completionHandler]; 
    } 
} 

Ich hoffe, es hilft. Danke