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
папка имеет следующую структуру:
Настройте файлы шаблона путем определения фиксированного содержимого и отверстий для динамического содержимого, генерируемого пользовательским репортером. Необходимо настроить только файлы шаблонов для типов выходных данных отчета, поддерживаемых пользовательским репортером. Например, если репортер поддерживает только отчеты Word, настройте только dotx
файл шаблона.
Если для пользовательского репортера требуется несколько шаблонов, сохраните шаблоны в библиотеке шаблонов в файле шаблона. Если репортеру требуется только один шаблон, можно хранить содержимое шаблона в теле файла шаблона или в шаблоне библиотеки шаблонов. Для примера, для MyTitlePage
reporter, который требует только одного шаблона, можно добавить фиксированное содержимое шаблона и отверстия для динамического содержимого в тело файла шаблона или в запись с именем MyTitlePage
в библиотеке файлов шаблонов.
Определите стили, используемые шаблоном, в таблице стилей файла шаблона.
См. разделы Создание библиотеки шаблонов деталей документов Microsoft Word, Создание PDF библиотеки шаблонов деталей документов и Создание HTML библиотеки шаблонов деталей документов.
В пользовательском классе 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
Чтобы использовать пользовательского репортера:
Создайте объект класса reporter.
Установите значения свойств, которые вы определили в классе.
Добавьте объект к отчету.
Для примера:
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.dom.Document
| mlreportgen.dom.Text
| mlreportgen.report.Report
| mlreportgen.report.TableOfContents
| mlreportgen.report.TitlePage