定义新报告器
MATLAB® Report Generator™ 允许您基于 mlreportgen.report.Reporter
类或内置的报告 API 报告器定义自定义报告器。当内置报告器满足您的大部分要求,并且您想要重新排列或扩展报告器内容时,可以以内置报告器为基础来创建自己的报告器。请参阅子类报告器定义。以 mlreportgen.report.Reporter
类为基础来定义一个全新的报告器。
要基于 mlreportgen.report.Reporter
创建报告器,请使用 mlreportgen.report.Reporter.customizeReporter
方法。该方法创建一个骨架类定义文件并为每种报告输出类型复制默认模板文件。
要完成自定义报告器定义:
在报告器支持的每种报告输出类型的模板文件中,定义报告器生成的动态内容的固定内容和空位。
在自定义报告器类中,定义与模板空位相对应的属性。
要在报告 API 报告中使用报告器,请创建报告器类的对象,设置属性值,并将该对象追加到报告中。
创建类定义文件和模板副本
为自定义报告器类创建类定义文件,并通过调用 mlreportgen.report.Reporter.customizeReporter
方法复制默认模板。提供要创建的类的路径和名称作为该方法的输入参量。要在类文件夹中创建报告器类,请在类名前面加上 @
字符。
例如,此代码在名为 MyTitlePage.m
的文件夹中创建一个类文件 @MyTitlePage
:
mlreportgen.report.Reporter.customizeReporter("@MyTitlePage")
类定义文件 MyTitlePage.m
包含:
classdef MyTitlePage < mlreportgen.report.Reporter properties end methods function obj = MyTitlePage(varargin) obj = obj@mlreportgen.report.Reporter(varargin{:}); end end methods (Hidden) function templatePath = getDefaultTemplatePath(~, rpt) path = MyTitlePage.getClassFolder(); templatePath = ... mlreportgen.report.ReportForm.getFormTemplatePath(... path, rpt.Type); end end methods (Static) function path = getClassFolder() [path] = fileparts(mfilename("fullpath")); end function createTemplate(templatePath, type) path = MyTitlePage.getClassFolder(); mlreportgen.report.ReportForm.createFormTemplate(... templatePath, type, path); end function customizeReporter(toClasspath) mlreportgen.report.ReportForm.customizeClass(... toClasspath, "MyTitlePage"); end end
getDefaultTemplatePath
。基础报告器类使用 getDefaultTemplatePath
方法来检索与添加报告器的报告的输出类型相对应的 MyTitlePage
报告器模板。例如,如果您将报告器添加到输出类型为 PDF 的 mlreportgen.report.Report
对象,则基报告器类将返回位于报告器定义文件夹的 resources/templates/pdf
子文件夹中的 PDF 模板的路径。mlreportgen.report.Reporter.customizeReporter
方法将每种报告输出类型的默认模板文件的副本存储在包含类定义文件的文件夹的 resources/templates
子文件夹中。模板文件相对于 resources/templates
的路径为:
docx/default.dotx
pdf/default.pdftx
html/default.htmt
html/default.htmtx
例如,@MyTitlePage
文件夹具有以下结构体:
在模板中定义固定和动态内容
通过定义自定义报告器生成的动态内容的固定内容和空位来自定义模板文件。您只需针对自定义报告器支持的报告输出类型自定义模板文件即可。例如,如果报告器只支持 Word 报告,则只自定义 dotx
模板文件。
如果自定义报告器需要多个模板,则将模板存储在模板文件中的模板库中。如果报告器只需要一个模板,则可以将模板内容存储在模板文件主体中,或者模板库中的模板中。例如,对于只需要一个模板的 MyTitlePage
报告器,您可以将模板固定内容和动态内容的空位添加到模板文件的主体中,或者添加到模板文件库中名为 MyTitlePage
的条目中。
在模板文件的样式表中定义模板所使用的样式。
请参阅 创建 Microsoft Word 文档部件模板库、创建 PDF 文档部件模板库 和 创建 HTML 文档部件模板库。
在自定义报告器类中定义属性并指定模板
在自定义报告器类中:
为模板定义的每个空位定义一个属性,包括页眉和页脚中的空位。与空位相对应的属性必须与空位具有相同的名称。例如,如果报告模板定义了一个名为
Title
的空位,则类定义文件必须定义一个名为Title
的属性。如果报告器使用存储在模板文件的模板库中的模板,则在构造函数中添加一行,将属性
TemplateName
设置为报告器模板的名称。您不必在类定义文件中指定此属性,因为自定义类从基slreportgen.report.Reporter
类继承了此属性。
例如,此类定义文件定义了 Title
、Author
和 Version
属性,并指定模板名称为 MyTitlePage
classdef MyTitlePage < mlreportgen.report.Reporter properties Title = ""; Author = ""; Version = ""; end methods function obj = MyTitlePage(varargin) obj = obj@mlreportgen.report.Reporter(varargin{:}); obj.TemplateName = "MyTitlePage"; end end methods (Hidden) function templatePath = getDefaultTemplatePath(~, rpt) path = MyTitlePage.getClassFolder(); templatePath = ... mlreportgen.report.ReportForm.getFormTemplatePath(... path, rpt.Type); end end methods (Static) function path = getClassFolder() [path] = fileparts(mfilename("fullpath")); end function createTemplate(templatePath, type) path = MyTitlePage.getClassFolder(); mlreportgen.report.ReportForm.createFormTemplate(... templatePath, type, path); end function customizeReporter(toClasspath) mlreportgen.report.ReportForm.customizeClass(... toClasspath, "MyTitlePage"); end end end
使用自定义报告器
要使用您的自定义报告器:
创建报告器类的对象。
设置您在类中定义的属性的值。
将对象追加到报告中。
例如:
import mlreportgen.report.* rpt = Report("myreport","pdf"); titlePage = MyTitlePage; titlePage.Title = "My Report"; titlePage.Author = "Me"; titlePage.Version = "1.0" append(rpt,titlePage); close(rpt); rptview(rpt);
另请参阅
mlreportgen.report.TitlePage
| mlreportgen.report.Report
| mlreportgen.report.TableOfContents
| mlreportgen.dom.Text
| mlreportgen.dom.Document