主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

定义新报告器

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 文件夹具有以下结构体:

@MyTitlePage contains resources, which contains templates. Templates contains html, docx, and pdf, each of which contains the templates files that correspond to the output type.

在模板中定义固定和动态内容

通过定义自定义报告器生成的动态内容的固定内容和空位来自定义模板文件。您只需针对自定义报告器支持的报告输出类型自定义模板文件即可。例如,如果报告器只支持 Word 报告,则只自定义 dotx 模板文件。

如果自定义报告器需要多个模板,则将模板存储在模板文件中的模板库中。如果报告器只需要一个模板,则可以将模板内容存储在模板文件主体中,或者模板库中的模板中。例如,对于只需要一个模板的 MyTitlePage 报告器,您可以将模板固定内容和动态内容的空位添加到模板文件的主体中,或者添加到模板文件库中名为 MyTitlePage 的条目中。

在模板文件的样式表中定义模板所使用的样式。

请参阅 创建 Microsoft Word 文档部件模板库创建 PDF 文档部件模板库创建 HTML 文档部件模板库

在自定义报告器类中定义属性并指定模板

在自定义报告器类中:

  • 为模板定义的每个空位定义一个属性,包括页眉和页脚中的空位。与空位相对应的属性必须与空位具有相同的名称。例如,如果报告模板定义了一个名为 Title 的空位,则类定义文件必须定义一个名为 Title 的属性。

  • 如果报告器使用存储在模板文件的模板库中的模板,则在构造函数中添加一行,将属性 TemplateName 设置为报告器模板的名称。您不必在类定义文件中指定此属性,因为自定义类从基 slreportgen.report.Reporter 类继承了此属性。

例如,此类定义文件定义了 TitleAuthorVersion 属性,并指定模板名称为 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

使用自定义报告器

要使用您的自定义报告器:

  1. 创建报告器类的对象。

  2. 设置您在类中定义的属性的值。

  3. 将对象追加到报告中。

例如:

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);

另请参阅

| | | |

主题