0

当我在draw这两个方面有所不同时,我不明白。textPDFtruncatespecific width

第一个

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

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 h@#$$$!@$$";

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

在此处输入图像描述

编辑:即使使用CoreText resultis same

4

1 回答 1

0

一种解决方案可以是:从 from中获取no,现在乘以 35% 的计数,将从110 中删除。upperCase lettersactual stringproportionallyoriginal index

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);
}

获取来自countupperCase信件string

-(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;
}

编辑:没有找到准确的解决方案......

于 2013-07-11T05:03:47.537 回答