Ваша отправная точка — класс MPPReader
. Метод setPreserveNoteFormatting
позволяет вам контролировать, получаете ли вы обычный текст или RTF. Вам нужно будет получить RTF, чтобы извлечь любые встроенные объекты:
MPPReader reader = new MPPReader();
reader.setPreserveNoteFormatting(true);
ProjectFile file = reader.read("/path/to/my/file.mpp");
Существует класс, распространяемый с MPXJ, под названием RTFEmbeddedObject
, который реализует механизм извлечения необработанных данных для любых объектов, встроенных в RTF, созданный MS Project. Предположим, у нас есть несколько заметок, прикрепленных к задаче 1, которые содержат встроенные объекты.
Task task = file.getTaskByID(1);
String notes = file.getNotes();
List<List<RTFEmbeddedObject>> list = RTFEmbeddedObject.getEmbeddedObjects(notes);
Возвращаемые данные представляют собой список списков... не очень хорошо, но это работает. Первый список содержит одну запись для каждого внедренного объекта в примечаниях. Каждая запись списка состоит из списка блоков с парой флагов (неизвестного значения) и блока двоичных данных.
В примерах, с которыми я сталкивался до сих пор, вы можете ожидать увидеть пары блоков. Первый блок будет содержать текстовую метку с подробным описанием типа следующих за ней данных, а второй блок будет содержать необработанные данные для внедренного объекта.
Обычно на каждый внедренный объект приходится четыре блока, два блока для хранения необработанных данных самого объекта и два блока, представляющих изображение предварительного просмотра метафайла встроенного объекта.
Взгляните на модульный тест MppEmbededTest
с помощью отладчика — вы сможете увидеть, как данные встроенного объекта считываются из файла примера.
person
Jon Iles
schedule
29.08.2014