Как создавать отчеты, содержащие текст и рисунки с помощью MATLAB

Я использую скрипт MATLAB для настройки системы управления на машине. Когда настройка завершена, я хотел бы получить отчет, содержащий текст (особенно серийный номер, дату/время и значения, определенные во время настройки) и графики, особенно передаточные функции.

Что вы рекомендуете?

любое решение, которое я использую, должно быть совместимо с компилятором MATLAB, чтобы я мог распространять свое решение команде полевых инженеров.

Отличный отчет будет PDF-документ.

генератор отчетов MATLAB не кажется правильным продуктом, поскольку кажется, что я должен разбить свой скрипт на маленькие кусочки и встроить их в шаблон отчета. Мой скрипт содержит возможности для пользователя вмешиваться и изменять значения или отклонять настройку, если графики выглядят неправильно, и моя догадка заключается в том, что это будет сложно, если код запускается из генератора отчетов. Кроме того, я боюсь, что структура кода и ремонтопригодность будут потеряны, если код структура определяется требованиями шаблона отчета.

пожалуйста, прокомментируйте, если мои предположения неверны.

обновление

теперь я переключился на использование генератора отчетов MATLAB с выпуском r2016b, и он работает очень хорошо для моих скомпилированных пользователей кода. К сожалению, это означает, что коллеги, у которых есть лицензия MATLAB, также должны купить генератор отчетов, чтобы использовать мои инструменты.

4 ответов


Как менеджер по разработке генератора отчетов MATLAB, я обеспокоен тем, что этот вопрос может оставить неправильное впечатление о возможностях генератора отчетов.

во-первых, генератор отчетов не требует, чтобы вы разбивали скрипт на маленькие кусочки и запускали их внутри шаблона. Вы можете сделать это, если захотите, и в некоторых обстоятельствах это имеет смысл, но это не требование. Фактически, многие приложения генератора отчетов используют сценарий или программу MATLAB для взаимодействие с пользователем, создание данных в рабочей области MATLAB и, в качестве последнего шага, создание отчета из данных рабочей области.

кроме того, начиная с версии R2014b, генератор отчетов MATLAB поставляется с API генерации документов, называемым DOM API, который позволяет вставлять операторы генерации документов в программу MATLAB. Например, можно программно создать объект документа, добавить и отформатировать текст, абзацы, таблицы, изображения, списки и вложенные документы, а также Выходные данные Вывод Microsoft Word, HTML или PDF, в зависимости от выбранного типа вывода. Вы даже можете программно заполнить пробелы в формах, которые вы создаете, используя Word или HTML-редактор.

API работает на платформах Windows, Linux и Mac и генерирует вывод Word и HTML на всех трех платформах без использования Word. В Windows он использует Word под капотом для создания вывода PDF из документов Word, которые он генерирует.

последняя версия генератора отчетов MATLAB представляет API PowerPoint с возможностями, аналогичными API DOM. Если вам нужно включить генерацию отчетов в приложение MATLAB, не исключайте генератор отчетов MATLAB на основе прошлых впечатлений. Вы можете быть удивлены, насколько мощным стал.


Я делал это довольно много. Вы правы, что генератор отчетов MATLAB обычно не является отличным решением. @Max предлагает правильный подход (автоматизация Word через COM-интерфейс), но я бы добавил несколько дополнительных комментариев и советов, основанных на моем опыте.

  1. помните, что если вы собираетесь с этим решением, вы зависите от того, что ваши конечные пользователи будут работать под управлением Windows и иметь копию Office на своем компьютере. Если вы хотите в конечном итоге создать отчет PDF, это должен быть Office 2010 или выше.
  2. Я бы поспорил, что вам будет легче автоматизировать генерацию отчетов в Excel, а не Word. Учитывая, что вы создаете отчет из MATLAB, вам, вероятно, понадобится довольно много вещей в таблицах чисел, которые легче выложить в Excel.
  3. если вы собираетесь сделать это в Word, самый простой способ-сначала (без MATLAB) создать шаблон .доктор./docx файл, который содержит любой общий текст, который будет таким же для всех отчетов и пустых таблиц для любой информации. Включите изменения дорожки и вставляйте пустые комментарии в каждую точку, которую вы будете заполнять информацией. Затем в рамках процедуры создания отчета в MATLAB подключитесь к Word и повторите каждый комментарий, заменив его любыми данными.
  4. если вы учитесь автоматизировать Excel из MATLAB,на этой странице из документации взаимодействия Excel является действительно полезная. Есть эквивалент для Word.
  5. в отличие от @Max, у меня никогда не было хороших результатов, сохраняя цифры .EMF-файл, а затем вставить их. Теоретически это сохраняет редактируемость, но я никогда не находил это ценным. Вместо этого получите фигуру, выглядящую правильно (и правильный размер) в MATLAB, а затем скопируйте ее в буфер обмена с помощью print(figHandle, 'dbitmap') и вставить в Excel с Worksheet.Range('A1').PasteSpecial.
  6. для сохранения в формате PDF используйте Workbook.ExportAsFixedFormat('xlTypePDF', pathToOutputFile).

надеюсь, что это поможет!


Я думаю, что вы правы насчет генератора отчетов.

на мой взгляд, самым быстрым / простым подходом было бы сгенерировать отчет в html-документе. Для этого вам просто нужны цифры и написать текстовый файл, преобразование должно быть тривиальным.

довольно похожим подходом было бы создание файла Latex. А затем создайте из него pdf-файл, хотя для этого вам нужно будет установить latex на развернутые машины.

наконец, вы можете использовать хорошую интеграцию Java в Matlab. Есть несколько библиотек, которые вы можете использовать-как этой. Но я сомневаюсь, что все осложнения того стоят.


вы рассматривали вождение Microsoft Word через его интерфейс ActiveX? Я сделал это в скомпилированных программах Matlab, и он работает хорошо. Посмотрите на справку Matlab для actxserver(): объект, который вы хотите создать типа Word.Application.

изменить, чтобы добавить: чтобы получить цифры в документ, сохраните их как .emf файлы с помощью до print(), затем добавьте их в документ следующим образом:

 WordServer.Selection.InlineShapes.AddPicture(fileName);