1

我一直在尝试使用 MPXJ 库获取附加到任务的注释,使用方法

getNotes()

从课堂上

net.sf.mpxj.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 }

如果有人可以对此提供反馈,我会很棒。

4

1 回答 1

1

你的出发点是MPPReader课堂。该方法setPreserveNoteFormatting允许您控制是获取纯文本还是获取 RTF。您将需要检索 RTF 以提取任何嵌入的对象:

MPPReader reader = new MPPReader();
reader.setPreserveNoteFormatting(true);
ProjectFile file = reader.read("/path/to/my/file.mpp");

有一个与 MPXJ 一起分发的类,RTFEmbeddedObject它实现了一种机制来提取嵌入在 MS Project 生成的 RTF 中的任何对象的原始数据。假设我们在任务 1 上附加了一些注释,其中包含嵌入的对象。

Task task = file.getTaskByID(1);
String notes = file.getNotes();
List<List<RTFEmbeddedObject>> list = RTFEmbeddedObject.getEmbeddedObjects(notes);

返回的数据是一个列表列表......不是很好,但它有效。第一个列表包含注释中每个嵌入对象的条目。每个列表条目都由一个带有几个标志(意义未知)的块列表和一个二进制数据块组成。

在我到目前为止遇到的示例中,您可以期望看到成对的块。第一个块将包含一个文本标签,详细说明随后的数据类型,第二个块将包含嵌入对象的原始数据。

通常每个嵌入对象有四个块,两个块保存对象本身的原始数据,两个块表示嵌入对象的元文件预览图像。

使用调试器查看单元测试MppEmbededTest- 您将能够看到从示例文件中读取的嵌入对象数据。

于 2014-08-29T11:12:45.400 回答