2012-04-03 14 views
21

Mam aplikację Cocoa OS X, która tworzy pliki PDF do drukowania. Mam problem z tym, że gdy używam małych rozmiarów czcionek, kerning wydaje się być nie tak. Oto zrzut ekranu. Jest to rozszerzenie z pliku PDF mojej aplikacji, używając Helvetica w 6 punktach. Horrible Kerning OutputKakao (OS X) mała czcionka - kerning wygląda okropnie

Jak widać, kerning jest okropny, niektóre postacie dotykają, a inne zbyt daleko.

Kod używam w zasadzie wygląda następująco (jest to uproszczony przykład, który reprodukuje problem dla mnie):

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

To nie jest przypisany do Helvetica, zdarza się we wszystkich czcionek I” próbowałem, chociaż jest bardziej wyraźny w niektórych niż innych. Jeśli używam większego rozmiaru, np. 10, wygląda dobrze. 6 punktów Helvetica z innych aplikacji, takich jak edycja tekstu wygląda dobrze. Co muszę zrobić, aby poprawnie wyrenderować 6-punktowy tekst?

Edytowane w celu dodania: Zauważyłem, że czcionka TrueType wydaje się znacznie gorsza niż w przypadku czcionek PostScript. Niestety, nie mam wersji PostScript wielu czcionek, których chcę użyć, więc unikanie TrueType nie jest tak naprawdę opcją.

Używam systemu OS X 10.7.3 i XCode 4.2.1.

+3

Mężczyzna, to jest coś poważnego [keming] (http://www.ironicsans.com/2008/02/idea_a_new_typography_term.html). – blahdiblah

+0

Przetestowałem twój kod na moim komputerze. Nie udało mi się uzyskać niczego tak złego, ale zauważyłem, że wpłynęło to na wartość użytą dla 'theWidth', więc możesz spróbować tego zmienić. Ponadto do prostego rysowania takiego jak to, możesz użyć [NSString '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 :) zamiast tego uprościć kod. – ughoavgfhw

+0

Dzięki. Uczynienie theWidth zbyt małym zdecydowanie powoduje problemy, ale w moim kodzie jest ustawione na całą szerokość papieru. Mogę ustawić go na ogromną liczbę i nadal wykazuje ten sam problem. – Wouldchux

Odpowiedz

1

Wydaje mi się, że rozmiar printingDateRect jest nieprawidłowy. Aby to sprawdzić, spróbuj użyć - (void)drawAtPoint:(NSPoint)point.

Just a wskazówka ...

0

Jeśli otrzymujesz tę wnętrza komórki może chcesz spróbować odmiany rozmiaru czcionki i powrót dodatkowe linie wewnątrz komórki. Wypróbuj to podejście.

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;