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

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

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

Чтобы завершить пользовательское определение репортера:

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

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

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

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

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

The 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 библиотеки шаблонов деталей документов.

Задайте свойства и задайте шаблон в пользовательском классе Reporter

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

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

См. также

| | | |

Похожие темы