I have a Cocoa OS X application that creates PDFs for printing. I'm having a problem that when I use small font sizes, the kerning seems all wrong. Here is a screen shot. This is an enlargement from a PDF output by my app, using Helvetica at 6 points.
As you can see, the kerning is horrible, with some characters touching and others too far apart.
The code I am using basically looks like this (this is a simplified example that reproduces the problem for 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];
This isn't unique to Helvetica, it happens in all the fonts I've tried, though it is more pronounced in some than others. If I use a larger size, like 10, it looks fine. 6 point Helvetica from other apps such as Text Edit looks fine. What do I need to do to render 6 point text properly?
Edited to add: I just noticed that this seems much worse with TrueType fonts than with PostScript fonts. Sadly, I don't have PostScript versions of many of the fonts I want to use, so avoiding TrueType isn't really an option.
I'm running OS X 10.7.3 and XCode 4.2.1.
theWidth
, so you might want to try varying that. Also, for simple drawing like this, you might want to use NSString'sdrawInRect:withAttributes:
instead to make your code simpler. – Pearson