2016-05-13 3 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]; 
Смежные вопросы