How to print in iOS 4.2?

前端 未结 3 1115
后悔当初
后悔当初 2020-12-12 16:56

I want to integrate the print functionality in my app.

The document I want to print will be in .doc or .txt format. I am not very experienced in iPhone development y

相关标签:
3条回答
  • 2020-12-12 17:05

    hi this may help you out try it and post if have any query.

    -(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];
        }
    }
    
    0 讨论(0)
  • 2020-12-12 17:07

    Check out the Drawing and Printing Guide for iOS -- I linked to the printing section. There's sample code and good links to more sample code there.

    Edit: I see now that you indicate you find the documentation difficult to follow.

    Word documents are complicated -- you'll need to parse through the data, which is quite difficult.

    Text and HTML are easier. I took Apple's example for HTML and changed it for plain text:

    - (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];
        }
    }
    
    0 讨论(0)
  • 2020-12-12 17:09

    First of all add UIPrintInteractionControllerDelegate and create variable

        UIPrintInteractionController *printController;
    

    Below code to print all images, documents, excel, powerpoint , pdf files works for me:

    [self printItem:SomeData withFilePath:YourFilePath];
    

    In above code you provide your NSData of your document/image and URL (filePath) and below further code of printItem:withFilePath: method

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

    I hope it will help. Thanks

    // For Swift and if you want to just print image First create IBoutlet for image

    @IBOutlet var qrImage : UIImageView?
    

    and then on click of print button just add below code

    //In your view controller
    @IBAction func printButton(sender: AnyObject) {
    
        let printInfo = UIPrintInfo(dictionary:nil)
        printInfo.outputType = UIPrintInfoOutputType.general
        printInfo.jobName = "My Print Job"
    
        // Set up print controller
        let printController = UIPrintInteractionController.shared
        printController.printInfo = printInfo
    
        // Assign a UIImage version of my UIView as a printing iten
        printController.printingItem = self.qrImage?.image
    
        // Do it
        printController.present(from: self.view.frame, in: self.view, animated: true, completionHandler: nil)
    }
    
    0 讨论(0)
提交回复
热议问题