2012-04-03 10 views
21

Ho un'applicazione Cocoa OS X che crea PDF per la stampa. Sto avendo un problema che quando uso le dimensioni dei caratteri piccoli, il kerning sembra tutto sbagliato. Ecco una schermata. Questo è un ingrandimento da un output PDF della mia app, utilizzando Helvetica a 6 punti. Horrible Kerning OutputCarattere piccolo Cocoa (OS X) - il kerning sembra terribile

Come potete vedere, il kerning è orribile, con alcuni personaggi che toccano e altri troppo distanti.

Il codice che sto usando fondamentalmente simile a questa (questo è un esempio semplificato che riproduce il problema per me):

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

Questo non riservate Helvetica, succede in tutti i tipi di carattere I' ho provato, anche se è più pronunciato in alcuni rispetto ad altri. Se uso una dimensione maggiore, come 10, sembra a posto. 6 punti Helvetica da altre app come Text Edit sembra a posto. Cosa devo fare per rendere correttamente il testo a 6 punti?

Modificato per aggiungere: Ho appena notato che questo sembra molto peggio con i font TrueType che con i font PostScript. Purtroppo, non ho versioni PostScript di molti dei font che voglio usare, quindi evitare TrueType non è davvero un'opzione.

Sono in esecuzione OS X 10.7.3 e XCode 4.2.1.

+3

L'uomo, questo è un po 'serio [keming] (http://www.ironicsans.com/2008/02/idea_a_new_typography_term.html). – blahdiblah

+0

Ho testato il tuo codice sul mio computer. Non sono riuscito a ottenere nulla di così brutto, ma ho notato che era influenzato dal valore che ho usato per 'theWidth', quindi dovresti provare a farlo. Inoltre, per un disegno semplice come questo, potresti voler usare [DrawInRect: withAttributes: '] di NSString (http://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSString_AppKitAdditions/Reference /Reference.html#//apple_ref/occ/instm/NSString/drawInRect:withAttributes :) invece di semplificare il codice. – ughoavgfhw

+0

Grazie. Rendere la larghezza troppo piccolo causa sicuramente problemi, ma nel mio codice è impostato su tutta la larghezza del foglio. Posso impostarlo su un numero enorme e presenta ancora lo stesso problema. – Wouldchux

risposta

1

Penso che le dimensioni di printDateRect non siano corrette. Per verificarlo, prova a utilizzare - (void)drawAtPoint:(NSPoint)point.

Solo un consiglio ...

0

Se hai trovato questo all'interno di una cella che si consiglia di provare variazioni della dimensione del carattere e tornare linee extra all'interno della cellula. Prova questo approccio.

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;