如果附加了图像/文本,如何从MS项目文件(.mpp)中获取任务注释

时间:2014-08-21 09:45:12

标签: java ms-office ms-project mpxj

我一直在尝试使用方法

使用MPXJ库获取附加到任务的Notes
getNotes()

来自班级

net.sf.mpxj.Task

然而,该方法的返回类型是String,您甚至可以将Images和其他文件作为注释插入到Task中。 我的问题是如何检索附加到任务的图像。

enter image description here

此外,如果我在任务中添加纯文本注释,例如。在这种情况下,注释是“这是任务200”

enter image description here

检索为以下文本

{\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 }

我很高兴有人可以对此提出反馈。

1 个答案:

答案 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 - 您将能够看到从示例文件中读取的嵌入对象数据。