Я потратил довольно много дней на поиски решения для размещения атрибутивной строки с вложением на NSPasteboard.
Я могу прочитать RTFD-файл с вложениями, изменить его текст и атрибуты, а затем поместить его на NSPasteboard для использования в других приложениях (например, Mail.app), и это прекрасно работает.Но то, что я хотел бы сделать, это также добавить изображение в какой-то момент в тексте.Я могу сделать это с помощью текста в виде приписанных строк, но если я попытаюсь вставить изображение (в качестве вложения в приписанную строку), изображение никогда не появится (хотя остальное происходит).
Похоже, что RTFD выпускается в разных вариантах, и тот, который мне нужен, сериализуется.Я пробовал много вариантов объявленных типов NSPasteboard, даже используя FileWrappers, но должно быть упущено что-то важное.Независимо от того, что я делаю, вложение никогда не приходит.
Странно то, что если я читаю RTFD-файл с вложениями изображений, изменяю его и вставляю в pasteBoard, эти оригинальные вложения работают нормально -если я пытаюсь добавить новые вложения, они этого не делают.Примером является чтение файла RTFD, работа с ним, загрузка монтажного листа и вставка результатов в почту.Отображается весь исходный текст и изображения, а также любой новый измененный или добавленный текст и атрибуты, но прикрепленные изображения просто отсутствуют.
Вот пример кода:
Создайте приписанную строку с некоторым текстом, затем добавьте прикрепленное изображение, затем немного больше текста, отобразите его в textView (все работает), затем загрузитевставить и вставить в textEdit или Mail ... прикрепленного изображения нет, хотя остальное есть:
// get the image
NSImage *myImage = [[NSImage alloc] initWithData: [window dataWithPDFInsideRect:[theImage frame]]];
// set the image as an attachment
NSTextAttachment *myAttachment = [[NSTextAttachment alloc] init];
NSTextAttachmentCell *myAttachmentCell = [[NSTextAttachmentCell alloc] initImageCell:myImage];
[myAttachment setAttachmentCell:myAttachmentCell];
// put image inside attributed string
NSAttributedString *myImageString = [NSAttributedString attributedStringWithAttachment:myAttachment] ;
// make an attributes dictionary (simply makes text blue) as an example
NSDictionary *myAttributesDict = [NSDictionary dictionaryWithObjectsAndKeys:
[NSColor blueColor], NSForegroundColorAttributeName,
nil];
// and add some beginning text
NSMutableAttributedString *theCombinedString = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"Here's an image we just grabbed: \n\n"] attributes:myAttributesDict];
// now append our attached image
[theCombinedString appendAttributedString:myImageString];
// and add some following text as an example
NSMutableAttributedString *endString = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"\n\n How about that!\n"] attributes:myAttributesDict];
// and stick it all together
[theCombinedString appendAttributedString: endString];
// now display it in a textView to make sure we have something
[[junkTextView textStorage] appendAttributedString: theCombinedString];
/// --- works just fine to here --- ///
// the following loads the pastboard, including the added text, but for some reason, leaves out the above attachment
NSPasteboard *thePboard = [NSPasteboard generalPasteboard];
[thePboard clearContents];
NSAttributedString *theContents = [[NSAttributedString alloc] theCombinedString ];
[thePboard writeObjects:[NSArray arrayWithObject:theContents]];
// pasting into mail or textEdit shows the above before and after text, but not the image.
Есть идеи?
Я пытался использовать NSData, сериализован NSFileWrapper, установка различных типов картона и многое другое.Пока что ничего не работает.Если я загружаю изображение в виде данных TIFF, оно вставляется нормально, но мне нужно его как приписанную строку, чтобы вставить в большую строку из файла, который уже имеет вложения.
Это моя первая публикация здесь, поэтому, пожалуйста, извините за любые ошибки форматирования - я выучу, и большое спасибо за любые указатели или помощь, даже если это RTFM, который я сделал, но мог иметьнеправильно поняли.