Подтвердить что ты не робот

Cocoa (OS X) маленький шрифт - кернинг выглядит ужасно

У меня есть приложение Cocoa OS X, которое создает PDF файлы для печати. У меня проблема, что, когда я использую небольшие размеры шрифтов, кернинг кажется неправильным. Вот скриншот. Это расширение из PDF файла моего приложения, используя Helvetica в 6 точках. Horrible Kerning Output

Как вы можете видеть, кернинг ужасен, некоторые трогательные персонажи и другие слишком далеко друг от друга.

Используемый мной код в основном выглядит так (это упрощенный пример, который воспроизводит проблему для меня):

NSString* dateStr = @"Printed 04/03/2012";
NSFont* detailsFont = [NSFont fontWithName:@"Helvetica" size:6];
NSMutableAttributedString* printedDate = [[NSMutableAttributedString alloc] initWithString:dateStr];
[printedDate addAttribute:NSFontAttributeName value:detailsFont range:NSMakeRange(0, [dateStr length])];
NSRect printedDateRect = NSMakeRect(0, 0, theWidth, 10);
[printedDate drawInRect:printedDateRect];

Это не уникально для Helvetica, это происходит во всех шрифтах, которые я пробовал, хотя он более выражен у некоторых, чем у других. Если я использую больший размер, например, 10, это выглядит хорошо. 6 баллов Helvetica из других приложений, таких как Text Edit, выглядит отлично. Что мне нужно сделать, чтобы правильно отобразить 6-точечный текст?

Отредактировано для добавления: я только заметил, что это выглядит намного хуже с шрифтами TrueType, чем с шрифтами PostScript. К сожалению, у меня нет версий PostScript для многих из шрифтов, которые я хочу использовать, поэтому исключение TrueType на самом деле не является вариантом.

Я запускаю OS X 10.7.3 и XCode 4.2.1.

4b9b3361

Ответ 1

Я думаю, что формат printingDateRect неверен. Чтобы проверить это, попробуйте использовать - (void)drawAtPoint:(NSPoint)point.

Просто подсказка...

Ответ 2

Если вы получаете это внутри ячейки, вы можете попробовать варианты размера шрифта и вернуть лишние строки внутри ячейки. Попробуйте этот подход.

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    cell.autoresizingMask = UIViewAutoresizingFlexibleHeight;
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    cell.textLabel.font = [UIFont boldSystemFontOfSize:11];
    cell.textLabel.numberOfLines = 13;