这两个CGContextShowTextAtPoint的区别?

时间:2013-07-10 12:24:52

标签: objective-c macos cocoa pdf

当我draw text PDF truncatespecific widthNSString *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)); 我得不到它。

第一个

CoreText

第二个

result

PDF结果

enter image description here

编辑:即使使用same {{1}},也是{{1}}。

1 个答案:

答案 0 :(得分:0)

一个解决方案可以是:从no获取upperCase letters actual string,现在proportionally乘以将从original index移除的35%的计数是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);
}

count获取upperCasestring封信件:

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

编辑:找不到这些准确的解决方案.......