Центральная фигура снимок состояния на странице

В этом примере показано, как сосредоточить снимок состояния фигуры на альбомной странице для 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

Смотрите также

| | | | | |

Похожие темы