exponenta event banner

Определение нового репортера

MATLAB ® Report Generator™ позволяет определить пользовательский репортер на основе mlreportgen.report.Reporter класс или встроенный репортер Report API. Основывайте свой репортер на встроенном репортере, когда встроенный репортер удовлетворяет большинству ваших требований и вы хотите переупорядочить или расширить содержимое репортера. См. раздел Определение подкласса репортера. Основывайте своего репортера на mlreportgen.report.Reporter класс для определения совершенно нового репортера.

Создание репортера на основе mlreportgen.report.Reporter, используйте mlreportgen.report.Reporter.customizeReporter способ. Метод создает файл определения класса скелета и создает копии файлов шаблонов по умолчанию для каждого типа вывода отчета.

Чтобы завершить определение пользовательского репортера, выполните следующие действия.

  • В файле шаблона для каждого типа вывода отчета, поддерживаемого репортером, определите фиксированное содержимое и отверстия для динамического содержимого, создаваемого репортером.

  • В пользовательском классе репортеров определите свойства, соответствующие отверстиям шаблона.

Чтобы использовать репортер в отчете API Report, создайте объект класса reporter, задайте значения свойств и добавьте объект к отчету.

Создание файла определения класса и копий шаблона

Создайте файл определения класса для пользовательского класса репортера и создайте копии шаблонов по умолчанию, вызвав mlreportgen.report.Reporter.customizeReporter способ. Укажите путь и имя класса, который будет создан в качестве входного аргумента метода. Чтобы создать класс reporter в папке класса, перед именем класса введите @ персонаж.

Например, этот код создает файл класса 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 шаблон репортера, соответствующий типу вывода отчета, к которому добавлен репортер. Например, при добавлении репортера в mlreportgen.report.Report объект с типом вывода PDF, базовый класс репортера возвращает путь к шаблону PDF, который находится в resources/templates/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 reporter, для которого требуется только один шаблон, можно добавить фиксированное содержимое шаблона и отверстия для динамического содержимого в тело файла шаблона или в запись с именем MyTitlePage в библиотеке файлов шаблонов.

Определите стили, используемые шаблоном в таблице стилей файла шаблона.

См. разделы Создание библиотеки шаблонов деталей документов Microsoft Word, Создание библиотеки шаблонов деталей документов PDF и Создание библиотеки шаблонов деталей документов HTML.

Определение свойств и определение шаблона в классе Custom Reporter

В пользовательском классе репортеров:

  • Определите свойство для каждого отверстия, определенного шаблонами, включая отверстия в колонтитулах. Свойство, соответствующее отверстию, должно иметь то же имя, что и отверстие. Например, если шаблоны репортера определяют отверстие с именем 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

Использование пользовательского репортера

Для использования пользовательского репортера:

  1. Создайте объект класса reporter.

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

См. также

| | | |

Связанные темы