2010-12-07 6 views
23

Quiero integrar la funcionalidad de impresión en mi aplicación.¿Cómo imprimir en iOS 4.2?

El documento que deseo imprimir estará en formato .doc o .txt. Todavía no tengo mucha experiencia en el desarrollo de iPhone, por lo que me resulta difícil implementarlo siguiendo la documentación de Apple.

Si alguien me puede ayudar publicando algún código de muestra, será de gran ayuda.

+0

He actualizado mi respuesta para incluir código de muestra para imprimir texto sin formato. –

Respuesta

34

Revisa Drawing and Printing Guide for iOS - Vinculado a la sección de impresión. Hay código de muestra y buenos enlaces a más código de muestra allí.

Editar: Veo ahora que indica que encuentra la documentación difícil de seguir.

Los documentos de Word son complicados. Necesitará analizar los datos, lo cual es bastante difícil.

El texto y el HTML son más fáciles. Tomé ejemplo de Apple para HTML y cambié por texto sin formato:

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

Editado para imprimir texto sin formato. –

+0

gracias señor por pasar su valioso tiempo para responder mi pregunta. – iPhoneDev

+0

@Matthew: Por favor, ed ur ans. para la línea [pic presentFromFromBarButtonItem: sender animated: YES completionHandler: completionHandler]; Debería haber un 'De' en el método "presentFromFarButtonItem" – iPhoneDev

1

hi esto puede ayudar a salir probarlo y publicar, si tiene alguna consulta.

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

En primer lugar añadir UIPrintInteractionControllerDelegate y crear variables

UIPrintInteractionController *printController; 

A continuación código para imprimir todas las imágenes, documentos, Excel, PowerPoint, archivos PDF que funciona para mí:

[self printItem:SomeData withFilePath:YourFilePath]; 

En el código anterior, proporcione su NSData de su documento/imagen y URL (rutaArchivo) y por debajo de código más printItem: withFilePath: método

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

espero que le ayudará. Gracias

Cuestiones relacionadas