2016-05-13 54 views
0

我想添加两个NSAttributedStrings在一起。我希望它能打印出来,这样标题的字体大小和字体就不同于印刷体。这是我正在使用的代码。AirPrint与NSAttributedString

-(IBAction)print:(id)sender{ 
    UIFont *font = [UIFont fontWithName:@"Avenir Next Condensed" size:16.0]; 
     NSDictionary *attrsDictionary = [NSDictionary dictionaryWithObject:font 
                    forKey:NSFontAttributeName]; 
     NSAttributedString *title = [[NSAttributedString alloc] initWithString:@"this is the title" attributes:attrsDictionary]; 


UIFont *font2 = [UIFont systemFontOfSize:14.0]; 

NSDictionary *attrsDictionary2 = [NSDictionary dictionaryWithObject:font2 forKey:NSFontAttributeName]; 

     NSAttributedString *body = [[NSAttributedString alloc] initWithString:@"this is the body of the print" attributes:attrsDictionary2]; 

      NSMutableString *printBody = [NSMutableString stringWithFormat:[NSString stringWithFormat:@"%@ \n" 
@"%@ \n",title,body]]; 

      UIPrintInteractionController *pic = [UIPrintInteractionController sharedPrintController]; 
      pic.delegate = self; 


      UIPrintInfo *printInfo = [UIPrintInfo printInfo]; 
      printInfo.outputType = UIPrintInfoOutputGeneral; 
      printInfo.jobName = @"PrintJob"; 
      pic.printInfo = printInfo; 


      UISimpleTextPrintFormatter *textFormatter = [[UISimpleTextPrintFormatter alloc] initWithText:printBody]; 
      textFormatter.startPage = 0; 
      textFormatter.contentInsets = UIEdgeInsetsMake(72.0, 72.0, 72.0, 72.0); 
      textFormatter.maximumContentWidth = 6 * 72.0; 
      pic.printFormatter = textFormatter; 
      pic.showsPageRange = YES; 

      UIPrinter *SavedPrinterUserDefaults = [[NSUserDefaults standardUserDefaults] 
               objectForKey:@"SavedPrinter"]; 
      [pic printToPrinter:SavedPrinterUserDefaults 
      completionHandler:^(UIPrintInteractionController *printInteractionController, BOOL completed, NSError *error) { 
       if (completed && !error) 
       NSLog(@"it printed!"); 
      }]; 

     } 

当我打印这个打印机时,打印机打印出一个看起来像这样的消息,它只是表示所有的字体数据。

This is a test title{ 
NSFont = <font data> 
} 
this is the body of the print 

如果有人能帮上忙,那就太好了!

+0

你为什么不尝试,并打印出来以HTML格式? –

回答

1

这条线:

NSMutableString *printBody = [NSMutableString stringWithFormat:[NSString stringWithFormat:@"%@ \n%@ \n",title,body]]; 

并没有真正太大的意义。请记住,当您以字符串格式使用%@时,其值会来自调用相应对象的description方法。这不是组合两个属性字符串的正确方法。

所以你需要解决的第一件事是组合两个属性字符串。你想:

NSAttributedString *newline = [[NSAttributedString alloc] initWithString:@"\n"]; 
NSMutableAttributedString *printBody = [title mutableCopy]; 
[printBody appendAttributedString:newline]; 
[printBody appendAttributedString:body]; 
[printBody appendAttributedString:newline]; 

既然你有你想打印的正确的归因字符串,你需要改变你如何创建打印格式化程序。相反的:

UISimpleTextPrintFormatter *textFormatter = [[UISimpleTextPrintFormatter alloc] initWithText:printBody]; 

你想:

UISimpleTextPrintFormatter *textFormatter = [[UISimpleTextPrintFormatter alloc] initWithAttributedText:printBody];