Как получить примечания к задаче из файла MS Project (.mpp), если к нему прикреплено изображение/текст

Я пытался получить заметки, прикрепленные к задаче, с помощью библиотеки 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 }

Было бы здорово, если бы кто-нибудь мог дать отзыв по этому поводу.


person Abhishek    schedule 21.08.2014    source источник


Ответы (1)


Ваша отправная точка — класс 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
comment
Это действительно кажется полезным, я попробую MppEmbededTest, как вы предложили, спасибо вам. - person Abhishek; 02.09.2014