如何使用MATLAB创建包含文本和图像的报告

9
我正在使用MATLAB脚本来调整机器上的控制系统。当调整完成后,我希望生成一份报告,其中包含文本(特别是序列号、日期/时间和调整期间确定的值)和图表,尤其是传递函数。
您有什么建议?
无论我使用什么解决方案都应与MATLAB编译器兼容,以便我可以将解决方案分发给现场工程师团队。
理想情况下,报告应为PDF文件。
MATLAB报告生成器似乎不是正确的产品,因为它似乎必须将我的脚本分解成小片段并嵌入报告模板中。我的脚本包含用户干预以更改值或拒绝彩色图的机会,如果代码从报告生成器运行,则这将很困难。此外,我担心如果代码结构由报告模板的要求确定,那么代码结构和可维护性将会丢失。
如果我的假设有误,请评论。
更新:
我现在已经切换到使用MATLAB Report Generator与版本r2016b,对于我的编译代码用户来说效果非常好。不幸的是,这意味着需要购买报告生成器的同事需要拥有MATLAB许可证才能使用我的工具。
4个回答

4
作为MATLAB Report Generator的开发经理,我担心这个问题可能会让人们对Report Generator的功能产生错误印象。
首先,Report Generator不需要你将脚本分成小块并在模板中运行。如果您选择这样做,在某些情况下确实有意义,但这不是必需的。事实上,许多Report Generator应用程序使用MATLAB脚本或程序与用户交互,在MATLAB工作区生成数据,并在最后一步从工作区数据生成报告。
此外,从R2014b版本开始,MATLAB Report Generator配备了一个名为DOM API的文档生成API,允许您在MATLAB程序中嵌入文档生成语句。例如,您可以以编程方式创建文档对象,添加和格式化文本、段落、表格、图像、列表和子文档,并根据所选的输出类型输出Microsoft Word、HTML或PDF输出。您甚至可以使用Word或HTML编辑器以编程方式填写创建的表单中的空白处。
该API在Windows、Linux和Mac平台上运行,并在所有三种平台上生成Word和HTML输出,无需使用Word。在Windows上,它在幕后使用Word从生成的Word文档中生成PDF输出。
MATLAB Report Generator的最新版本引入了一个PowerPoint API,具有类似于DOM API的功能。如果您需要在MATLAB应用程序中包含报告生成,请不要根据过去的印象排除MATLAB Report Generator。您可能会惊讶于它已经变得多么强大。

我现在已经转换到报告生成器,它运行良好。 - Nigel Davies

3
我做过这件事情,你说的MATLAB Report Generator通常不是一个好的解决方案。@Max建议的方法是对的(通过COM接口自动化Word),但根据我的经验,我会补充一些额外的评论和提示。
  1. 请记住,如果您选择这种解决方案,您需要依赖最终用户在他们的机器上运行Windows,并具有Office副本。如果您最终想要生成PDF报告,则需要Office 2010或更高版本。
  2. 我敢打赌,您会发现自动化Excel中的报告生成比Word更容易。鉴于您正在从MATLAB生成报告,您可能希望在数字表格中放置许多内容,而这在Excel中更容易布局。
  3. 如果您要在Word中完成此操作,请首先(在没有MATLAB的情况下)创建一个包含所有报告都相同的通用文本和空表格的模板.doc/.docx文件。启用跟踪更改,并在每个将填充信息的点插入空注释。然后,在MATLAB中的报告创建例程中连接到Word,迭代每个注释,并将其替换为所需的任何数据。
  4. 如果您正在学习如何从MATLAB自动化Excel,请从Excel Interop文档的此页面开始,这对您将非常有帮助。Word也有相应的页面。
  5. 与@Max不同,我从未通过将图形保存为.emf文件然后插入它们来获得良好的结果。理论上,这确实可以保留可编辑性,但我从未发现这很有价值。相反,在MATLAB中使图形正确显示(并具有正确的大小),然后使用print(figHandle, 'dbitmap')将其复制到剪贴板,并使用Worksheet.Range('A1').PasteSpecial粘贴到Excel中。
  6. 要保存为PDF,请使用Workbook.ExportAsFixedFormat('xlTypePDF', pathToOutputFile)
希望这能帮到你!

从.emf文件插入图形的实际行为因使用的Matlab和/或Word版本而异。几年前我得到的结果比现在要好。然而,它仍然可以工作,所以如果它没有出问题... - Max

2

我认为你关于报告生成器的看法是正确的。

我认为最快捷/最简单的方法是在HTML文档中生成报告。只需要插入图片并编写一个文本文件,转换应该很容易。

另一个类似的方法是创建一个LaTeX文件,并从中创建PDF - 不过这需要在部署的计算机上安装LaTeX。

最后,您可以利用Java与Matlab的良好集成。有几个库可供使用,比如这个。但我想知道是否值得引入所有这些复杂性。


1

您是否考虑过通过其ActiveX接口驱动Microsoft Word?我在编译的Matlab程序中尝试过,效果很好。请查看Matlab帮助文档中的actxserver():您要创建的对象类型是Word.Application

编辑添加:要将图形插入文档,请使用-dmeta参数将它们保存为.emf文件,然后像这样将它们添加到文档中:

 WordServer.Selection.InlineShapes.AddPicture(fileName);

谢谢你的示例。你如何发现Word提供的所有服务?Google没有帮助。 - Nigel Davies
微软网站上有相当多的信息,但很难找到。尝试搜索“Word自动化”或“VBA Word”。一旦您获得了一个Word对象,就可以在Matlab中调用methods()来查看它公开的内容,但这并不是全部。 - Max
Word近期版本提供的帮助文档已经不再记录这些内容,很遗憾。我认为O'Reilly书中描述的界面基本上没有变化(在http://shop.oreilly.com/product/9781565927254.do)。但是要注意,对于Word 2010,ActiveDocumentSaveAs()方法已被ActiveDocumentSaveAs2()替代。您还可以尝试录制宏(该功能令人费解地从View选项卡中提供!),并查看生成的VBA代码。 - Max

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接