형식이 지정된 텍스트를 대지 (NSRTFPboardType)에 넣으면 모든 서식이 유지 된 채 붙여집니다. 하지만 내가 정말로 원하는 것은 무게, 색 등을 보존하면서 글꼴 및 크기 정보를 무시하는 것입니다.Cocoa : 현재 글꼴에 서식이 지정된 텍스트를 붙여 넣으시겠습니까?
문서에 따르면 글꼴 정보가없는 NSAttributedString은 Helvetica 12로 기본 설정되어 있으므로 막 다른 골목처럼.
요청시 텍스트를 생성 할 수도 있으므로 현재 UI 요소에서 글꼴을 찾을 수 있으면 텍스트가 마분지로 들어가기 전에 수정할 수 있습니다. 내게 필요한 옵션 API가 도움이되기를 기대했지만 UIElementInspector에서 찾을 수있는 속성 중 아무 것도 서식을 처리하는 것 같지 않습니다.
아이디어가 있으십니까?
다음은 테스트 사례입니다. 유일한 속성이 초록색인데도 Helvetica 12에 붙여 넣습니다 :
// Create the string with no attributes, and strip the font just in case.
NSMutableAttributedString *s = [[[NSMutableAttributedString alloc] initWithString:@"Hello green world!"] autorelease];
[s removeAttribute:NSFontAttributeName range:NSMakeRange(0, [s length])];
// Add a test attribute
[s addAttribute:NSForegroundColorAttributeName value:[NSColor greenColor] range:NSMakeRange(6, 5)];
// Generate RTF data
NSData *rtf = [s RTFFromRange:NSMakeRange(0, [s length]) documentAttributes:nil];
// Copy to pasteboard
NSPasteboard *pb = [NSPasteboard generalPasteboard];
[pb declareTypes:[NSArray arrayWithObject:NSRTFPboardType] owner:nil];
[pb setData:rtf forType:NSRTFPboardType];
흥미로운 점이 있습니다. 내가 가장 평범한 원시 RTF 데이터를 만들려고한다면, 글꼴 정보가 전혀 없습니다, 여전히 Helvetica 12에 붙여 넣습니다!
char *rawrtf = "{\\rtf1\\ansi\\ansicpg1252\n"
"Hello world.}";
NSData *rtf = [NSData dataWithBytes:rawrtf length:strlen(rawrtf)];
이렇게 가능하다면 현재 실행중인 응용 프로그램에 현재 글꼴을 쿼리하는 것만 가능합니다.
'NSPasteboardTypeHTML'을 사용하여 페이스트 보드에 HTML을 추가 할 수는 있지만 목표를 달성 할 가능성이 있는지는 잘 모르겠습니다. –
정말 해로운 해킹이 없다면 불가능하다고 생각하기 시작했습니다. 대부분의 앱은 HTML 형식을 허용하지 않지만 한 번만해볼 가치가 있습니다. – kvance