Преобразование файла Enterprise Architect (UML) (и других файлов) в изображения

Хотя я использую Doxygen уже несколько лет, для создания документации используется множество других методов: файлы PowerPoint, файлы Word, файлы UML. Хотя у каждого типа файлов есть свои преимущества (например, PowerPoint легко создать и он идеально подходит для презентаций), это быстро приводит к большому количеству разных файлов в разных местах и ​​отсутствию обзора.

Теперь я хочу объединить все эти файлы в одну точку входа. Моя идея состоит в том, чтобы использовать Doxygen для создания HTML-файлов, содержащих документацию по исходному коду, и для написания обзорной документации в Doxygen (как это делает Qt) и включения изображений на основе других файлов. Я также пытаюсь автоматизировать всю систему.

Сейчас я ищу способ конвертировать эти другие файлы в изображения, чтобы моя автоматизированная система могла включать эти изображения в сгенерированный HTML (и, наконец, в сгенерированный файл QCH (Qt Help)).

Для PowerPoint я нашел несколько инструментов, но мне кажется, что бесплатные не работают правильно, а пробная версия коммерческой не работает с некоторыми файлами PPTX.

Для Enterprise Architect я не нашел способа автоматизировать создание образов.

Кто-нибудь знает, как автоматически генерировать изображения из файлов Enterprise Architect и из файлов PowerPoint?


person Patrick    schedule 05.10.2012    source источник


Ответы (1)


Нашел.

Архитектор предприятия имеет архив Java (eaapi.jar), который можно использовать для доступа к файлам EAP из Java.

Что вам нужно сделать, так это получить репозиторий, открыть файл и получить из него все пакеты верхнего уровня (в этом примере я опустил весь код обработки ошибок):

org.sparx.Repository repo = new org.sparx.Repository();
org.sparx.Project project = repo.GetProjectInterface();
repo.OpenFile(args[0]);
org.sparx.Collection packages = repo.GetModels();

Затем переберите все пакеты и вызовите свой собственный метод (потому что вам нужно будет вызывать себя рекурсивно):

for (short i=0;i<packages.GetCount();i++)
   {
   org.sparx.Package pack = (org.sparx.Package)packages.GetAt(i);
   handlePackage (project, pack, currentdir);
   }

Затем в методе выполните цикл по всем диаграммам и сгенерируйте изображения, а также рекурсивно выполните цикл по всем подпакетам:

public static void handlePackage (org.sparx.Project project, org.sparx.Package pack, String output)
   {
   for (org.sparx.Diagram diagram : pack.GetDiagrams())
      {
      project.PutDiagramImageToFile (diagram.GetDiagramGUID(), output + diagram.GetName() + ".png", 1);
      }
   for (org.sparx.Package subpack : pack.GetPackages())
      {
      handlePackage(project,subpack,output);
      }
   }

Вот и все.

Некоторые подводные камни:

  • Вы должны передать полный путь к методу OpenFile. Даже если файл находится в вашей локальной папке, вам все равно придется передать полный путь.
  • То же самое для выходных файлов
person Patrick    schedule 05.10.2012
comment
Если вы предпочитаете, есть также .NET API, который предлагает ту же функциональность. - person Uffe; 06.10.2012
comment
Еще одна ловушка: советник не требует, чтобы имена диаграмм были уникальными. Таким образом, при написанном коде, если две диаграммы в любом месте проекта имеют одинаковое имя, файл второй диаграммы перезапишет первый. Чтобы избежать этого, включите DiagramID (уникальный целочисленный идентификатор) в имя файла. - person Uffe; 06.10.2012
comment
Спасибо за комментарии. Теперь у меня работает приложение Java, поэтому я не буду конвертировать его в .Net в данный момент, но приятно знать, что оно существует. - person Patrick; 09.10.2012