В этом примере показано, как сосредоточить снимок состояния фигуры на альбомной странице для PDF и Microsoft® отчеты Word.
Пример создает отчет API Отчета, имеющий альбомный макет, создает фигуры MATLAB, и затем использует centerFigure
локальная функция, чтобы создать и добавить снимки состояния этих фигур в центре страницы.
Импортируйте DOM и пакеты API Отчета так, чтобы вы не использовали долго, полностью определенные имена классов.
import mlreportgen.dom.* import mlreportgen.report.*
Создайте отчет PDF. Чтобы создать отчет Word Microsoft®, измените "pdf"
к "docx"
.
rpt = Report("myreport","pdf"); open(rpt);
Создайте объект макета страницы.
if strcmpi(rpt.Type,"pdf") pageLayoutObj = PDFPageLayout; else pageLayoutObj = DOCXPageLayout; end
Задайте ориентацию страницы, высоту и ширину.
pageLayoutObj.PageSize.Orientation = "landscape"; pageLayoutObj.PageSize.Height = "8.5in"; pageLayoutObj.PageSize.Width = "11in";
Задайте поля страницы.
pageLayoutObj.PageMargins.Top = "0.5in"; pageLayoutObj.PageMargins.Bottom = "0.5in"; pageLayoutObj.PageMargins.Left = "0.5in"; pageLayoutObj.PageMargins.Right = "0.5in"; pageLayoutObj.PageMargins.Header = "0.3in"; pageLayoutObj.PageMargins.Footer = "0.3in";
Добавьте объект макета страницы в отчет.
add(rpt,pageLayoutObj);
Создайте фигуру с линейным графиком.
f = figure();
plot(1:1:10,2:2:20);
grid on;
Вызовите centerFigure
локальная функция, чтобы добавить фигуру создает снимки в центре страницы. Затем удалите объект фигуры.
centerFigure(f,rpt);
delete(f);
Точно так же добавьте мембранный снимок состояния объемной поверхностной диаграммы в центре страницы.
centerFigure(surf(membrane),rpt);
delete(gcf);
Закройте и просмотрите отчет.
close(rpt); rptview(rpt);
centerFigure
Локальная функцияЭта функция создает снимок состояния заданной фигуры и добавляет его в центре страницы в заданном отчете. Функция использует API Отчета Figure
генератор отчетов, чтобы взять снимок состояния фигуры и невидимый Table
DOM сделать размещение.
function centerFigure(figure,rpt)
Импортируйте API DOM, API Отчета и сервисные пакеты генератора отчетов так, чтобы вы не использовали долго, полностью определенные имена классов.
import mlreportgen.dom.* import mlreportgen.report.* import mlreportgen.utils.*
Заставьте текущий макет страницы отчета определять текущий размер страницы и поля страницы. Информация о макете страницы используется, чтобы вычислить размер тела страницы для того, чтобы измерить таблицу размещения, составленную на последующем шаге.
pageLayout = getReportLayout(rpt); pageSize = pageLayout.PageSize; pageMargins = pageLayout.PageMargins;
Вычислите ширину тела страницы. Ширина тела страницы обозначает страницу width, доступную для содержимого, и определяется путем вычитания левого и правого граничного размера из страницы width. Для DOCX выход также должен быть вычтен размер поля.
bodyWidth = units.toInches(pageSize.Width) - ... units.toInches(pageMargins.Left) - ... units.toInches(pageMargins.Right); if strcmpi(rpt.Type,"docx") bodyWidth = bodyWidth - ... units.toInches(pageMargins.Gutter); end bodyWidth = sprintf("%0.2fin",bodyWidth);
Вычислите высоту тела страницы. Высота тела страницы обозначает высоту страницы, доступную для содержимого, и определяется путем вычитания верхнего и нижнего граничного размера из высоты страницы. Для PDF также должны быть вычтены выход, заголовок и размеры нижнего колонтитула, потому что тело расширяет от нижней части заголовка к верхней части нижнего колонтитула.
bodyHeight = units.toInches(pageSize.Height) - ... units.toInches(pageMargins.Top) - ... units.toInches(pageMargins.Bottom); if strcmpi(rpt.Type,"pdf") bodyHeight = bodyHeight - ... units.toInches(pageMargins.Header) - ... units.toInches(pageMargins.Footer); end bodyHeight = sprintf("%0.2fin",bodyHeight);
Создайте Figure
объект для заданной фигуры. Затем создайте Image
объект перенес файл изображения снимка состояния фигуры. Масштабируйте изображение, чтобы соответствовать записи таблицы размещения, составленной на последующем шаге.
fig = Figure(figure); figImg = Image(getSnapshotImage(fig,rpt)); figImg.Style = [figImg.Style {ScaleToFit}];
Перенесите изображение в абзац, потому что PDF требует, чтобы изображение находилось в абзаце. Обновите стиль абзаца, чтобы убедиться, что нет никакого пробела вокруг изображения.
para = Paragraph(figImg); para.Style = [para.Style {OuterMargin("0in","0in","0in","0in")}];
Добавьте абзац, который содержит снимок состояния фигуры в невидимой таблице размещения 1 на 1 (lo_table
). Таблица рассматривается невидимой, когда границы не заданы для таблицы и ее записей таблицы.
lo_table = Table({para});
Охватите таблицу к доступной ширине тела страницы.
lo_table.Width = bodyWidth;
Охватите единственную запись таблицы к доступной высоте тела страницы. Кроме того, задайте форматы выравнивания по вертикали и выравнивания по горизонтали, чтобы убедиться, что изображение сосредоточено и вертикально и горизонтально в записи таблицы.
lo_table.TableEntriesStyle = [lo_table.TableEntriesStyle ... { ... Height(bodyHeight), ... HAlign("center"), ... VAlign("middle") ... }];
Добавьте таблицу размещения в отчет.
add(rpt,lo_table);
end
getReportLayout
| mlreportgen.dom.DOCXPageLayout
| mlreportgen.dom.PDFPageLayout
| mlreportgen.dom.Table
| mlreportgen.report.Figure
| mlreportgen.report.Report
| mlreportgen.utils.units