AirPrint с NSAttributedString

Я пытаюсь добавить две NSAttributedStrings вместе. Я хочу, чтобы он распечатывался так, чтобы заголовок имел другой размер шрифта и шрифт, чем тело печати. Вот код, который я использую.

-(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

Если бы кто-нибудь мог помочь, это было бы здорово!

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];
Другие вопросы по тегам