exponenta event banner

Центрировать снимок рисунка на странице

В этом примере показано, как центрировать снимок рисунка на странице ландшафта для отчетов в формате PDF и Microsoft ® Word.

В примере создается отчет Report API, имеющий ландшафтный макет, создаются фигуры MATLAB, а затем используется centerFigure локальная функция для создания и добавления снимков этих фигур в центре страницы.

Создать отчет

Импортируйте пакеты DOM и Report API, чтобы не использовать длинные, полные имена классов.

import mlreportgen.dom.*
import mlreportgen.report.*

Создание отчета в формате PDF. Чтобы создать отчет Microsoft ® Word, измените"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 репортер для получения снимка фигуры и невидимого DOM Table для выполнения макета.

function centerFigure(figure,rpt)

Импортируйте пакеты утилит DOM API, Report API и генератора отчетов, чтобы не использовать длинные, полные имена классов.

    import mlreportgen.dom.*
    import mlreportgen.report.*
    import mlreportgen.utils.*

Получение текущего макета страницы отчета для определения текущего размера страницы и полей страницы. Информация о макете страницы используется для вычисления размера тела страницы для определения размера таблицы макетов, созданной на следующем шаге.

    pageLayout = getReportLayout(rpt);
    pageSize = pageLayout.PageSize;
    pageMargins = pageLayout.PageMargins;

Рассчитайте ширину тела страницы. Ширина тела страницы обозначает ширину страницы, доступную для содержимого, и определяется вычитанием размера левого и правого полей из ширины страницы. Для выходных данных 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

См. также

| | | | | |

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