【问题标题】:How to Fetch Task Notes from MS Project File (.mpp) if an Image/text is Attached to it如果附加了图像/文本,如何从 MS 项目文件 (.mpp) 中获取任务注释
【发布时间】:2014-10-14 21:33:06
【问题描述】:

我一直在尝试使用 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 }

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

【问题讨论】:

    标签: java ms-office ms-project mpxj


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

    【讨论】:

    • 这看起来很有帮助,我会按照你的建议尝试 MppEmbededTest,向你致敬。
    猜你喜欢
    • 1970-01-01
    • 2019-06-17
    • 1970-01-01
    • 2021-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-11
    相关资源
    最近更新 更多