我一直在尝试使用方法
使用MPXJ库获取附加到任务的NotesgetNotes()
来自班级
net.sf.mpxj.Task
然而,该方法的返回类型是String,您甚至可以将Images和其他文件作为注释插入到Task中。 我的问题是如何检索附加到任务的图像。
此外,如果我在任务中添加纯文本注释,例如。在这种情况下,注释是“这是任务200”
检索为以下文本
{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang16393{\fonttbl{\f0\fnil\fcharset0 Segoe UI;}} {\*\generator Riched20 15.0.4567}{\*\mmathPr\mwrapIndent1440 }\viewkind4\uc1 \pard\f0\fs20 This is Task 200\par }
我很高兴有人可以对此提出反馈。
答案 0 :(得分:1)
您的出发点是MPPReader
级。方法setPreserveNoteFormatting
允许您控制是获得纯文本还是RTF。您需要检索RTF才能提取任何嵌入的项目:
MPPReader reader = new MPPReader();
reader.setPreserveNoteFormatting(true);
ProjectFile file = reader.read("/path/to/my/file.mpp");
有一个名为RTFEmbeddedObject
的MPXJ分发的类,它实现了一种机制,可以为MS Project生成的RTF中嵌入的任何对象提取原始数据。假设我们在任务1中附加了一些注释,其中包含嵌入的对象。
Task task = file.getTaskByID(1);
String notes = file.getNotes();
List<List<RTFEmbeddedObject>> list = RTFEmbeddedObject.getEmbeddedObjects(notes);
返回的数据是一个列表列表......不是很好,但它有效。第一个列表在注释中包含每个嵌入对象的一个条目。每个列表条目都由一个块列表组成,这些块包含几个标志(意义不明)和一个二进制数据块。
在我到目前为止遇到的例子中,你可以期待看到成对的块。第一个块将包含一个文本标签,详细说明后面的数据类型,第二个块将包含嵌入对象的原始数据。
通常每个嵌入对象有四个块,两个块用于保存对象本身的原始数据,两个块表示嵌入对象的图元文件预览图像。
使用调试器查看单元测试MppEmbededTest
- 您将能够看到从示例文件中读取的嵌入对象数据。