gpt4 book ai didi

attachment - 归因字符串在粘贴板粘贴中丢失附件

转载 作者:行者123 更新时间:2023-12-03 09:53:13 31 4
gpt4 key购买 nike

我花了好几天时间寻找一种解决方案,将带有附件的属性字符串放到 NSPasteboard 上。

我可以读取带有附件的 RTFD 文件,修改其文本和属性,然后将其粘贴到 NSPasteboard 上以供其他应用程序(例如 Mail.app)使用,并且工作正常。但我还想在文本中的某个位置添加图像。我可以用文本作为属性字符串来做到这一点,但是如果我尝试插入图像(作为属性字符串的附件),图像永远不会到达(尽管其余的会)。

RTFD好像有很多种,我觉得我需要的是连载的。我已经尝试了 NSPasteboard 声明类型的许多变体,甚至使用 FileWrappers,但一定遗漏了一些重要的东西。无论我做什么,执着似乎永远不会到来。

奇怪的是,如果我读取一个带有图像附件的 RTFD 文件,对其进行修改并将其粘贴到粘贴板中,那些原始附件工作正常 - 如果我尝试添加新附件,它们不会成功。一个示例是读取 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,我已经完成但可能被误解了.

最佳答案

终于找到解决办法了,毕竟是Wrapper。这是任何感兴趣的人的代码,可以处理从文件中读取或从您的应用程序中获取的图像:

// make a file wrapper
NSFileWrapper* wrapper =[[NSFileWrapper alloc] initRegularFileWithContents:[theImage TIFFRepresentationUsingCompression:NSTIFFCompressionLZW factor:1]];

// -must- have this. used to save your pasted file in some apps
[wrapper setPreferredFilename:@"yourImage.tiff"];
//
NSAttributedString* imageString = [NSAttributedString attributedStringWithAttachment:[[NSTextAttachment alloc] initWithFileWrapper:wrapper]];

// then load pasteboard and paste wherever you wish. You can get fancier using private
// pasteboards and custom data types, of course. This is just a simple example.

关于attachment - 归因字符串在粘贴板粘贴中丢失附件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9743697/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com