2012-11-13 18 views
8

UIMarkupTextPrintFormatterを使用して数行のシンプルなHTMLを印刷すると、空白のページが最初に表示され、次にテキストが表示されます。コードは次のようになり、非常にシンプル:UIMarkupTextPrintFormatter余分なブランクページを印刷

- (void) printSomething; 
{ 
    if (![UIPrintInteractionController isPrintingAvailable]) 
     return; 

    NSString* markupText [email protected]"<html><body>THIS IS A TEST</body></html>"; 

    UIMarkupTextPrintFormatter* printFormatter =[ [ [UIMarkupTextPrintFormatter alloc] initWithMarkupText:markupText] autorelease]; 

    UIPrintInteractionController* printInteractionController =[UIPrintInteractionController sharedPrintController]; 
    printInteractionController.printFormatter =printFormatter; 
    printInteractionController.delegate =self; 
    //printInteractionController.showsPageRange =YES;  

    [printInteractionController presentAnimated:YES completionHandler:nil];         
} 

さて、私は showsPageRange = YES、単一のページのプリントが予想通りコメント解除した場合、しかしUIPrintInteractionControllerが表示されるように、数秒かかります。ユーザーがアプリが凍っているかどうか不思議に思うほど。

UIMarkupTextPrintFormatterドキュメントの最初の行は、「 UIMarkupTextPrintFormatterクラスのインスタンスは、複数ページ印刷ジョブのHTMLマークアップテキストをレイアウトします。」です。フォーマッタが内容にかかわらず複数のページを印刷する場合、ちょっと狂っているでしょう...

何が間違っていますか?他のアプリはこれを問題なく実行します。前もって感謝します。

+0

によって引き起こされていたが分かりましたか? – Hokage

答えて

4

私はprintInteractionController.showsPageRange = NO;という2番目の空白ページの出現に同じ問題があり、Appleの例here(67ページ)が見つかりました。ここでは、次のとおりです。

- (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; 
    UIMarkupTextPrintFormatter *htmlFormatter = [[UIMarkupTextPrintFormatter alloc] initWithMarkupText:self.htmlString]; 
    htmlFormatter.startPage = 0; 
    htmlFormatter.contentInsets = UIEdgeInsetsMake(72.0, 72.0, 72.0, 72.0); // 1 inch margins 
    pic.printFormatter = htmlFormatter; 
    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]; 
    } 
} 

この例ではprintInteractionController.showsPageRange = YES;を使用し、正常に動作しますが、

printInteractionController.showsPageRange = NO;でこの行を置き換えた場合、それは余分な二空白のページを印刷します。

したがって、UIMarkupTextPrintFormatterは暗黙のうちにprintInteractionController.showsPageRange = YES;と一緒に使用することを意図しているか、それは単なるAPIバグです。

+0

私はすでに 'showsPageRange'が' YES'に設定されています。しかし、最後のページに余分な空白ページが1つも印刷されています。 – shashwat

+0

@shashwat、これを解決しましたか? – Hokage

6

私は正しいHTML骨格を有することによってそれを解決:

NSString *htmlString = "<!DOCTYPE html><html><head><meta charset='UTF-8'><title>Title</title></head><body>Hello!</body></html>" 
+0

そしてまた、 '' ''の後であることを確認します。 'タイトルこんにちは<!DOCTYPE htmlの!>! ' – Kjuly

0

私は同じ問題を持って、私はあなたがこれを解決しました、それはhtmlコード

style='page-break-after:always; 
関連する問題