2010-12-07 3 views
23

Je veux intégrer la fonctionnalité d'impression dans mon application.Comment imprimer en iOS 4.2?

Le document que je souhaite imprimer sera au format .doc ou .txt. Je n'ai pas encore beaucoup d'expérience dans le développement de l'iPhone, j'ai donc du mal à l'implémenter en suivant la documentation d'Apple.

Si quelqu'un pourrait m'aider en publiant un exemple de code, ce sera une aide précieuse.

+0

J'ai mis à jour ma réponse pour inclure un exemple de code pour l'impression de texte brut. –

Répondre

34

Extraire le Drawing and Printing Guide for iOS - J'ai lié à la section d'impression. Il y a un exemple de code et de bons liens vers d'autres exemples de code.

Édition: Je vois maintenant que vous indiquez que vous trouvez la documentation difficile à suivre.

Les documents Word sont compliqués - vous devrez analyser les données, ce qui est assez difficile.

Le texte et HTML sont plus faciles. Je pris l'exemple d'Apple pour HTML et changé pour le texte brut:

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

Modifié pour imprimer du texte brut. –

+0

merci de passer votre temps précieux pour répondre à ma question. – iPhoneDev

+0

@Matthew: S'il vous plaît modifier ur ans. pour la ligne [pic presentFromFromBarButtonItem: expéditeur animé: YES completionHandler: completionHandler]; Il devrait y avoir un 'De' dans la méthode "presentFromFromBarButtonItem" – iPhoneDev

1

salut cela peut vous aider à essayer et poster si d'adresser toute question.

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

d'abord ajouter UIPrintInteractionControllerDelegate et créer la variable

UIPrintInteractionController *printController; 

Ci-dessous le code pour imprimer toutes les images, documents, excel, powerpoint, fichiers pdf fonctionne pour moi:

[self printItem:SomeData withFilePath:YourFilePath]; 

Dans le code ci-dessus, vous fournissez votre NSData de votre document/image et URL (filePath) et au-dessous du code supplémentaire de printItem: withFilePath: méthode

-(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]; 
    } 
} 

J'espère que cela vous aidera. Merci

Questions connexes