2012-04-03 8 views
21

Tengo una aplicación Cocoa OS X que crea archivos PDF para imprimir. Tengo un problema que cuando uso tamaños de letra pequeños, el kerning parece estar mal. Aquí hay una captura de pantalla. Esta es una ampliación de una salida PDF de mi aplicación, que usa Helvetica en 6 puntos. Horrible Kerning OutputFuente pequeña de cacao (OS X): el kerning se ve horrible

Como puede ver, el kerning es horrible, con algunos caracteres que se tocan y otros demasiado separados.

El código que estoy utilizando básicamente se parece a esto (este es un ejemplo simplificado que reproduce el problema para mí):

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

Esto no es aplicable sólo a Helvetica, sucede en todos los tipos de letra I' lo he intentado, aunque es más pronunciado en algunos que en otros. Si uso un tamaño más grande, como 10, se ve bien. 6 puntos Helvetica de otras aplicaciones como Text Edit se ve bien. ¿Qué debo hacer para representar correctamente el texto de 6 puntos?

Editado para agregar: Acabo de notar que esto parece mucho peor con las fuentes TrueType que con las fuentes PostScript. Lamentablemente, no tengo versiones PostScript de muchas de las fuentes que quiero usar, por lo que evitar TrueType no es realmente una opción.

Estoy ejecutando OS X 10.7.3 y XCode 4.2.1.

+3

Hombre, eso es algo grave [keming] (http://www.ironicsans.com/2008/02/idea_a_new_typography_term.html). – blahdiblah

+0

Probé tu código en mi computadora. No pude obtener nada tan malo, pero noté que se vio afectado por el valor que utilicé para 'theWidth', por lo que es posible que desee intentar variar eso. Además, para un dibujo simple como este, es posible que desee utilizar [NSString's 'drawInRect: withAttributes:'] (http://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSString_AppKitAdditions/Reference /Reference.html#//apple_ref/occ/instm/NSString/drawInRect:withAttributes :) en su lugar para simplificar el código. – ughoavgfhw

+0

Gracias. Hacer que el ancho sea demasiado pequeño definitivamente causa problemas, pero en mi código está configurado para todo el ancho del papel. Puedo configurarlo en un número enorme y todavía muestra el mismo problema. – Wouldchux

Respuesta

1

Creo que el tamaño de printDateRect es incorrecto. Para verificar esto, intente usar - (void)drawAtPoint:(NSPoint)point.

Sólo un consejo ...

0

Si usted está consiguiendo esto dentro de una célula es posible que desee probar variaciones del tamaño de la fuente y devolver líneas adicionales dentro de la célula. Prueba este enfoque.

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; 
Cuestiones relacionadas