2014-05-13 67 views
0

我正在尝试创建一个包含文本(NSString)和图像(JPG)的RTFD文件。我还没有找到解释这个过程的简单例子。如果我的应用程序有一些文本和一些JPG图像,并且我想创建一个包含这两个项目的可编辑文档,RTFD似乎是输出的最佳选项(我想保留图像的质量)。以编程方式创建RTFD

如果有人能提供一个简单的例子来展示如何做文本和图像,这将是有益的。只要图像质量得到保留,我也可以开展RTF。这适用于Mac OS应用程序。

我一直在试图关注Attributed String Programming Guide,但我不清楚如何输出我的NSAttributedString并获得创建的包。其次,我如何将图像引用转换为RTF文件,而不是它们需要的包。

+0

你检查[文本编辑示例代码(https://developer.apple.com/library/mac/samplecode/TextEdit/Introduction/Intro.html )? TextEdit.app可以创建带有附件的富文本文档。 –

+0

你是指TextEdit应用程序?如果是这样,我意识到这可以做我想做的事情,但我想以编程方式做,以便我的应用程序可以创建相当于打开TextEdit,键入文本并插入图像,而无需用户在TextEdit中执行任何操作。 –

+0

是的,我正在谈论TextEdit应用程序。这是完整的源代码可用作示例代码。如果您正在寻找如何使用RTFD文件的示例,那么从TextEdit源代码开始是合理的。 –

回答

1

很老的问题,但也许该解决方案帮助别人......

的RTFD格式不描述文件,但AA文件包中(这实际上是通过在Mac/iOS的UI修改为一个目录对用户来说显示为单个文件)。

不过幸运的是NSFileWrapper能够创造这样RTFD束:

NSAttributedString* attrString = ...some attributed string with images ...; 
NSDictionary*  documentAttributes = @{ 
              NSDocumentTypeDocumentAttribute: NSRTFDTextDocumentType 
              }; 
NSError*   error = nil; 
NSFileWrapper*  fileWrapper = [attrString fileWrapperFromRange:NSMakeRange(0, attrString.length) 
              documentAttributes:documentAttributes 
                 error:&error]; 

NSString*   documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
NSString*   filePath = [documentsDirectory stringByAppendingPathComponent:@"example.rtfd"]; 
NSLog(@"Writing rtfd doc to: %@", filePath); 

[NSFileManager.defaultManager removeItemAtPath:filePath error:&error]; 
BOOL result = [fileWrapper writeToURL:[NSURL fileURLWithPath:filePath] 
           options:NSFileWrapperWritingAtomic 
        originalContentsURL:nil 
           error:&error]; 

完成!

由于RTFD几乎仅限于Mac/iOS格式,因此创建包含图像的RTF文件可能更有趣。

不幸的是,Apple的RTF实现(NSDocumentTypeDocumentAttribute: NSRTFTextDocumentType)不支持图像。

见我回答另一个问题来解决这个:https://stackoverflow.com/a/29181130/2778898