Центрируйте формальное изображение в отчете PDF

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

The 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);
end

См. также

| | | | |

Похожие темы