2012-04-03 40 views
21

Tôi có ứng dụng Cocoa OS X để tạo tệp PDF để in. Tôi đang gặp vấn đề khi tôi sử dụng kích thước phông chữ nhỏ, kerning dường như đã sai. Đây là ảnh chụp màn hình. Đây là một mở rộng từ một đầu ra PDF của ứng dụng của tôi, sử dụng Helvetica tại 6 điểm. Horrible Kerning OutputPhông chữ nhỏ Cocoa (OS X) - kerning trông khủng khiếp

Như bạn có thể thấy, kerning là khủng khiếp, với một số ký tự chạm và những người khác quá xa nhau.

Mã Tôi đang sử dụng về cơ bản trông như thế này (đây là một ví dụ đơn giản nhằm tái tạo vấn đề đối với tôi):

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

Đây không phải là duy nhất để Helvetica, nó sẽ xảy ra trong tất cả các phông chữ tôi đã cố gắng, mặc dù nó rõ rệt hơn trong một số so với những người khác. Nếu tôi sử dụng kích thước lớn hơn, như 10, có vẻ ổn. Helvetica 6 điểm từ các ứng dụng khác như Text Edit có vẻ ổn. Tôi cần phải làm gì để hiển thị văn bản 6 điểm đúng cách?

Đã chỉnh sửa để thêm: Tôi vừa nhận thấy rằng điều này có vẻ tồi tệ hơn với phông chữ TrueType so với phông chữ PostScript. Đáng buồn thay, tôi không có phiên bản PostScript của nhiều phông chữ mà tôi muốn sử dụng, do đó, tránh TrueType không thực sự là một tùy chọn.

Tôi đang chạy OS X 10.7.3 và XCode 4.2.1.

+3

Người đàn ông, đó là một số [kem] (http://www.ironicsans.com/2008/02/idea_a_new_typography_term.html) nghiêm trọng. – blahdiblah

+0

Tôi đã kiểm tra mã của bạn trên máy tính của tôi. Tôi đã không thể nhận được bất cứ điều gì xấu, nhưng tôi đã nhận thấy nó đã bị ảnh hưởng bởi giá trị tôi đã sử dụng cho 'theWidth', vì vậy bạn có thể muốn thử thay đổi điều đó. Ngoài ra, để vẽ đơn giản như thế này, bạn có thể muốn sử dụng [drawInRect 'của NSString: withAttributes:'] (http://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSString_AppKitAdditions/Reference /Reference.html#//apple_ref/occ/instm/NSString/drawInRect:withAttributes :) thay vào đó để làm cho mã của bạn đơn giản hơn. – ughoavgfhw

+0

Cảm ơn. Làm cho theWidth quá nhỏ chắc chắn gây ra vấn đề, nhưng trong mã của tôi nó được thiết lập để chiều rộng đầy đủ của bài báo. Tôi có thể đặt nó thành một số lượng lớn và nó vẫn thể hiện cùng một vấn đề. – Wouldchux

Trả lời

1

Tôi nghĩ kích thước của printDateRect không chính xác. Để kiểm tra điều này, hãy thử sử dụng - (void)drawAtPoint:(NSPoint)point.

Chỉ cần một mẹo ...

0

Nếu bạn đang nhận được bên này của một tế bào có thể bạn muốn thử thay đổi, kích thước phông chữ và trở dòng thêm bên trong tế bào. Hãy thử phương pháp này.

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; 
Các vấn đề liên quan