2012-11-13 18 views
8

Wenn Sie UIMarkupTextPrintFormatter verwenden, um einige Zeilen einfachen HTML-Codes zu drucken, wird zuerst eine leere Seite und dann die Seite mit dem Text ausgegeben. Der Code ist wie folgt und sehr einfach:UIMarkupTextPrintFormatter Drucken zusätzliche leere Seite

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

Nun, wenn ich die showsPageRange = YES, eine einzelne Seite gedruckt wie erwartet Kommentar-, aber die UIPrintInteractionController dauert einige Sekunden zu erscheinen. Genug, um den Benutzer zu fragen, ob die App erstarrt ist.

Die erste Zeile des UIMarkupTextPrintFormatter docs Zustand „ Instanzen der UIMarkupTextPrintFormatter Klasse Layout HTML-Markup Text für einen mehrDruckAuftrag“. Es wäre irgendwie verrückt, wenn der Formatierer mehrere Seiten druckt, unabhängig vom Inhalt ...

Irgendeine Idee, was hier falsch ist? Andere Apps tun dies ohne Probleme. Danke im Voraus.

+0

Haben Sie dieses Problem lösen? – Hokage

Antwort

4

Ich hatte das gleiche Problem mit dem Auftreten der zweiten leeren Seite mit printInteractionController.showsPageRange = NO; und fand das Apple-Beispiel here (Seite 67). Hier ist es:

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

Dieses Beispiel verwendet printInteractionController.showsPageRange = YES; und funktioniert gut, aber wenn Sie diese Zeile ersetzen mit

printInteractionController.showsPageRange = NO;, druckt es zusätzliche zweite leere Seite.

So scheint es, dass UIMarkupTextPrintFormatter implizit mit printInteractionController.showsPageRange = YES; verwendet werden soll, oder es ist nur ein API-Fehler.

+0

Ich habe bereits 'showsPageRange' auf' YES' gesetzt. Es wird jedoch immer noch eine zusätzliche leere Seite gedruckt, die an die letzte angehängt wird. – shashwat

+0

@shashwat, hast du das gelöst? – Hokage

6

Ich löste es durch die richtige HTML-Gerüst:

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

Und auch, stellen Sie sicher, '' ist nach '' : ' Titel Hallo ! ' – Kjuly

0

ich das gleiche Problem bekam und ich fand heraus, dass es durch den HTML-Code

style='page-break-after:always; 
verursacht wurde