11

UIMarkupTextPrintFormatter を使用して数行の単純な HTML を印刷すると、最初に空白のページが出力され、次にテキストのあるページが出力されます。コードは次のとおりで、非常に単純です。

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

    NSString* markupText =@"<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 マークアップ テキストをレイアウトします」と記載されています。コンテンツに関係なく、フォーマッタが複数のページを印刷すると、ちょっとおかしくなります...

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

4

4 に答える 4

7

私は正しいHTMLスケルトンを持つことでそれを解決しました:

NSString *htmlString = "<!DOCTYPE html><html><head><meta charset='UTF-8'><title>Title</title></head><body>Hello!</body></html>"
于 2014-11-27T09:08:42.847 に答える
4

2 番目の空白ページの表示で同じ問題が発生しprintInteractionController.showsPageRange = NO;、Apple の例を見つけました( 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;、余分な 2 番目の空白ページを印刷します。

したがって、UIMarkupTextPrintFormatter暗黙的に で使用することを意図しているように見えprintInteractionController.showsPageRange = YES;ます。または、単なる API のバグです。

于 2013-02-01T15:36:15.573 に答える
1

同じ問題が発生し、html コードが原因であることがわかりました

style='page-break-after:always;
于 2016-02-22T07:37:49.117 に答える