[英]How to Fetch Task Notes from MS Project File (.mpp) if an Image/text is Attached to it
我一直在尝试使用MPXJ库来获取附加到任务的Notes,方法是
getNotes()
从班上
net.sf.mpxj.Task
但是,该方法的返回类型是字符串,甚至可以插入图像和其他文件作为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 }
我很高兴有人可以对此提供反馈。
您的起点是MPPReader
类。 setPreserveNoteFormatting
方法允许您控制是获取纯文本还是RTF。 您将需要检索RTF以便提取任何嵌入的项目:
MPPReader reader = new MPPReader();
reader.setPreserveNoteFormatting(true);
ProjectFile file = reader.read("/path/to/my/file.mpp");
有一个随MPXJ RTFEmbeddedObject
分发的类,称为RTFEmbeddedObject
, RTFEmbeddedObject
实现了一种机制,可为MS Project生成的RTF中嵌入的任何对象提取原始数据。 假设我们有一些附加到任务1的注释,其中包含嵌入式对象。
Task task = file.getTaskByID(1);
String notes = file.getNotes();
List<List<RTFEmbeddedObject>> list = RTFEmbeddedObject.getEmbeddedObjects(notes);
返回的数据是一个列表列表,虽然不是很好,但是可以工作。 第一个列表在注释中每个嵌入式对象包含一个条目。 每个列表条目均由带有几个标志(含义不明)的块列表和一个二进制数据块组成。
在到目前为止的示例中,您可以期望看到成对的块。 第一个块将包含一个文本标签,详细说明随后的数据类型,第二个块将包含嵌入对象的原始数据。
通常,每个嵌入式对象有四个块,两个用于保存对象本身的原始数据的块,以及两个表示嵌入式对象的图元文件预览图像的块。
使用调试器查看单元测试MppEmbededTest
您将能够看到正在从示例文件读取的嵌入式对象数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.