Iphone 如何在iOS 4.2中打印?

Iphone 如何在iOS 4.2中打印?,iphone,cocoa-touch,ipad,printing,ios-4.2,Iphone,Cocoa Touch,Ipad,Printing,Ios 4.2,我想在我的应用程序中集成打印功能 我要打印的文档将采用.doc或.txt格式。 我在iPhone开发方面还不是很有经验,所以我发现按照苹果的文档很难实现它 如果有人能帮我发布一些示例代码,那将是一个很大的帮助。查看——我链接到了打印部分。这里有示例代码和指向更多示例代码的良好链接 编辑:我现在看到您表示您发现文档很难理解 Word文档很复杂--您需要解析数据,这相当困难 文本和HTML更容易。我以苹果的HTML为例,将其改为纯文本: - (IBAction)printContent:(id)se

我想在我的应用程序中集成打印功能

我要打印的文档将采用.doc或.txt格式。 我在iPhone开发方面还不是很有经验,所以我发现按照苹果的文档很难实现它

如果有人能帮我发布一些示例代码,那将是一个很大的帮助。

查看——我链接到了打印部分。这里有示例代码和指向更多示例代码的良好链接

编辑:我现在看到您表示您发现文档很难理解

Word文档很复杂--您需要解析数据,这相当困难

文本和HTML更容易。我以苹果的HTML为例,将其改为纯文本:

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

您好,这可能会帮助您尝试它,并张贴如果有任何疑问

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

首先添加UIPrintInteractionControllerDelegate并创建变量

    UIPrintInteractionController *printController;
以下用于打印所有图像、文档、excel、powerpoint、pdf文件的代码适用于我:

[self printItem:SomeData withFilePath:YourFilePath];
在上面的代码中,您提供了文档/图像的NSDataURL(文件路径),下面是打印项的进一步代码:withFilePath:方法

-(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];
    }
}
我希望这会有帮助。谢谢

//对于Swift,如果您只想打印图像 首先为映像创建IBoutlet

@IBOutlet var qrImage : UIImageView?
然后点击打印按钮,只需添加下面的代码

//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)
}

我更新了我的答案,加入了打印纯文本的示例代码。谢谢您花费宝贵的时间回答我的问题。@Matthew:请编辑您的答案。行[pic presentFromFromBarButtonItem:sender animated:YES completionHandler:completionHandler];在“presentFromFromBarButtonItem”方法中应该有一个“From”进行更改。马修·弗雷德里克:你对新线有问题吗?我正在尝试打印uitextview的内容,但打印机模拟器会在一行中打印所有内容。如果我将“\n”替换为“\n\n”,则在打印机模拟器上的结果并不总是相同。@Fran抱歉,我自己从未使用过代码,只是从示例中提供了代码。Hiii,我有一个具有QRCode图像的ViewController和一个名为“打印”的按钮,我想在单击“打印”时打印该图像按钮。你能在swift中帮助我吗?我不知道@Maishi SajnaniHi@DilipTiwari请访问下面的链接它将帮助你。这是我现在得到的屏幕截图:-当我点击打印按钮时,它显示打印视图,但我在打印预览中没有得到图像…还有一件事,我首先从url显示图像,然后我想要打印@Maishi sajnanielt我们。Swift版本为我工作了非常感谢@Maishi Sajnani对我们的支持