2013-07-10 37 views
0

当我draw这些textPDFtruncatespecific width这两个区别我不明白。这两个CGContextShowTextAtPoint的区别?

第一个

NSString *strText12 = @"HASDHADH skjdfhhs HKSJDHF.;; []'.hfkjhsfS SDHJHFSH jsfsjdfsn eiwj NJSDSJDF SDLKJJ sfkjsj wreoiwuowu 87243 7298 72jsdj [email protected]#[email protected]$$"; 

if (strText12.length > 110) { 
    strText12 = [strText12 substringToIndex:110]; 
    strText12 = [strText12 stringByAppendingFormat:@"...."]; 
} 

CGContextSelectFont (aCgPDFContextRef, "Helvetica", 12, kCGEncodingMacRoman); 
CGContextSetTextDrawingMode (aCgPDFContextRef, kCGTextFill); 
CGContextSetRGBFillColor (aCgPDFContextRef, 0, 0, 0, 1); 
const char *text1 = [strText12 UTF8String]; 
CGContextShowTextAtPoint (aCgPDFContextRef, 10,50.0, text1, strlen(text1)); 

第二个

NSString *strText = @"hasdhadh skjdfhhs hksjdhf.;; []'.hfkjhsfs sdhjhfsh jsfsjdfsn eiwj njsdsjdf sdlkjj sfkjsj wreoiwuowu 87243 7298 72jsdj [email protected]#[email protected]$$"; 

if (strText.length > 110) { 
    strText = [strText substringToIndex:110]; 
    strText = [strText stringByAppendingFormat:@"...."]; 
} 

CGContextSelectFont (aCgPDFContextRef, "Helvetica", 12, kCGEncodingMacRoman); 
CGContextSetTextDrawingMode (aCgPDFContextRef, kCGTextFill); 
CGContextSetRGBFillColor (aCgPDFContextRef, 0, 0, 0, 1); 
const char *text = [strText UTF8String]; 
CGContextShowTextAtPoint (aCgPDFContextRef, 10,10.0, text, strlen(text)); 

结果在PDF

enter image description here

编辑:即使使用CoreTextresult也是same

+0

我不明白这个问题。您将两个字符串截断为110 *个字符*。大写字母“HASDHADH”比*小写字母“hasdhadh”宽*,因此第一个字符串需要更多空间。 –

+0

如何能够截断字符串到特定的宽度与依赖字符串可能在OSX中的任何情况下的字母? –

回答

0

一种解决方案可以是:从actual string获取的upperCase lettersno和计数的现在proportionally 35乘法%将从original index被移除,其为110。

NSString *textToDraw = some string 
int range = 100; 
NSString *strTruncate = textToDraw; 
if (strTruncate.length > range) { 
    strTruncate = [strTruncate substringToIndex:range]; 

    //NSLog(@"now : %@",strTruncate); 

    int actualIndex = 0; 
    int count = [self getNoUpperCaseCharWithString:strTruncate]; 
    if (count>0) { 
     float minusIndex = (float)count*0.35; 
     actualIndex = range - (int)minusIndex; 
     //actualIndex -= 4; 
    } 
    else{ 
     actualIndex = range; 
    } 

    if (strTruncate.length > actualIndex) { 
     textToDraw = [strTruncate substringToIndex:actualIndex]; 
     textToDraw = [strTruncate stringByAppendingFormat:@"..."]; 
    } 

    //NSLog(@"after : %@",textToDraw); 
} 

获取的upperCase字母countstring

-(int)getNoUpperCaseCharWithString:(NSString *)string 
{ 
    int count=0; 
    for (int i = 0; i < [string length]; i++) { 
    BOOL isUppercase = [[NSCharacterSet uppercaseLetterCharacterSet] characterIsMember:[string characterAtIndex:i]]; 
    if (isUppercase == YES) 
     count++; 
    } 
    return count; 
} 

EDIT:not found accur吃了这些解决方案.......