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

Импортируйте пакеты DOM и Report API так, чтобы не использовать длинные, полные имена классов.
import mlreportgen.dom.* import mlreportgen.report.*
Создание отчета PDF.
rpt = Report("myreport","pdf"); open(rpt);
Создайте объект макета страницы.
pageLayoutObj = PDFPageLayout;
Укажите ориентацию, высоту и ширину страницы.
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);
Создайте формальные изображения и вызовите centerFormalImage локальная функция для добавления этих формальных изображений в центр страницы.
formalImg1 = FormalImage( ... "Image",which("ngc6543a.jpg"), ... "Caption","Cat's Eye Nebula or NGC 6543"); centerFormalImage(formalImg1,rpt); formalImg2 = FormalImage( ... "Image",which("peppers.png"), ... "Caption","Peppers"); centerFormalImage(formalImg2,rpt);
Закройте и просмотрите отчет.
close(rpt); rptview(rpt);
centerFormalImage Локальная функцияЭта функция добавляет указанное формальное изображение в центр страницы в указанном отчете PDF. Функция использует невидимое DOM Table для выполнения размещения.
function centerFormalImage(formalImage,rpt)Импортируйте пакеты DOM API, Report API и утилиты генератора отчетов, чтобы не использовать длинные, полные имена классов.
import mlreportgen.dom.* import mlreportgen.report.* import mlreportgen.utils.*
Чтобы определить текущий размер страницы и поле страницы, получите текущий макет страницы отчета. Информация о макете страницы используется для определения размера таблицы, созданной на следующем шаге.
pageLayout = getReportLayout(rpt);
pageSize = pageLayout.PageSize;
pageMargins = pageLayout.PageMargins;Вычислите ширину тела страницы. Ширина тела страницы обозначает ширину страницы, доступную для содержимого. Для отчета PDF ширина тела страницы определяется путем вычитания размера левого и правого полей из ширины страницы.
bodyWidth = units.toInches(pageSize.Width) - ... units.toInches(pageMargins.Left) - ... units.toInches(pageMargins.Right); bodyWidth = sprintf("%0.2fin",bodyWidth);
Вычислите высоту тела страницы. Высота тела страницы обозначает высоту страницы, доступную для содержимого. Для отчета PDF высота тела страницы определяется путем вычитания верхнего поля, нижнего поля, верхнего и нижнего колонтитулов из высоты страницы.
bodyHeight = units.toInches(pageSize.Height) - ... units.toInches(pageMargins.Top) - ... units.toInches(pageMargins.Bottom) - ... units.toInches(pageMargins.Header) - ... units.toInches(pageMargins.Footer); bodyHeight = sprintf("%0.2fin",bodyHeight);
Используйте getImageReporter метод FormalImage репортер, чтобы получить репортер изображений и getCaptionReporter метод для получения репортера подписи.
imageReporter = getImageReporter(formalImage,rpt);
captionReporter = getCaptionReporter(formalImage);Используйте getImpl методы изображения и подписи репортеров, чтобы получить соответствующие реализации DOM.
imageImpl = getImpl(imageReporter,rpt);
captionImpl = getImpl(captionReporter,rpt);Реализации DOM содержат Paragraph DOM который содержит изображение и содержимое подписи. Обновите стиль абзацев, чтобы убедиться, что вокруг абзацев нет свободного пространства и что они расположены по центру в записи таблицы, которая создается на следующем шаге.
paraStyle = { ...
OuterMargin("0in","0in","0in","0in"), ...
HAlign("center") ...
};
imagePara = clone(imageImpl.Children(1));
imagePara.Style = [imagePara.Style, paraStyle];
captionPara = clone(captionImpl.Children(1));
captionPara.Style = [captionPara.Style, paraStyle];Создайте невидимое размещение 1 на 1 (lo_table). Таблица считается невидимой, если границы не определены для таблицы и ее записей.
lo_table = Table(1);
row = append(lo_table,TableRow);
entry = append(row,TableEntry);Добавьте абзацы, которые содержат содержимого изображений и подписей, к единственной записи таблицы в таблице невидимых размещений.
append(entry,imagePara);
append(entry,captionPara);Отобразить таблицу на доступную ширину тела страницы.
lo_table.Width = bodyWidth;
Пролет единственной записи таблицы на доступную высоту тела страницы. Задайте вертикальный и горизонтальный форматы выравнивания, чтобы убедиться, что изображение и подпись центрированы как вертикально, так и горизонтально внутри записи таблицы.
lo_table.TableEntriesStyle = [lo_table.TableEntriesStyle ... { ... Height(bodyHeight), ... HAlign("center"), ... VAlign("middle") ... }];
Добавьте форматированную таблицу к отчету.
add(rpt,lo_table);
endgetReportLayout | mlreportgen.dom.PDFPageLayout | mlreportgen.dom.Table | mlreportgen.report.FormalImage | mlreportgen.report.Report | mlreportgen.utils.units