В этом примере показано, как центрировать изображение на альбомной странице для отчетов в формате PDF и Microsoft ® Word.
В примере создается отчет Report API, имеющий ландшафтный формат и использующий centerImage локальная функция для добавления изображений в центре страницы.

Импортируйте пакеты 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);
Позвоните в centerImage локальная функция для добавления изображений в центре страницы.
centerImage(which("ngc6543a.jpg"),rpt); centerImage(which("peppers.png"),rpt);
Закройте и просмотрите отчет.
close(rpt); rptview(rpt);
centerImage Локальная функцияЭта функция добавляет указанное изображение в центре страницы указанного отчета. Функция использует DOM Image для переноса файла изображения и невидимого DOM Table для выполнения макета.
function centerImage(imageFile,rpt)Импортируйте пакеты утилит DOM API и генератора отчетов, чтобы не использовать длинные, полные имена классов.
import mlreportgen.dom.* 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);
Создание Image объект, обернутый вокруг файла изображения. Масштабируйте изображение в соответствии с записью таблицы макетов, созданной на следующем шаге.
image = Image(imageFile);
image.Style = [image.Style {ScaleToFit}];Оберните изображение в абзац, поскольку для PDF требуется, чтобы изображение находилось в абзаце. Обновите стиль абзаца, чтобы убедиться в отсутствии пробелов вокруг изображения.
para = Paragraph(image);
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);
endgetReportLayout | mlreportgen.dom.DOCXPageLayout | mlreportgen.dom.Image | mlreportgen.dom.PDFPageLayout | mlreportgen.dom.Table | mlreportgen.report.Report | mlreportgen.utils.units