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