Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

ページ上でのイメージの中央配置

この例では、PDF および Microsoft® Word レポートの横向きページでイメージを中央に配置する方法を示します。

この例では、横方向レイアウトのレポート API レポートを作成し、ローカル関数 centerImage を使用してページの中央にイメージを追加します。

レポートの作成

長い完全修飾クラス名を使用せずに済むよう、DOM およびレポートの 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 および Report Generator ユーティリティ パッケージをインポートします。

    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;

この 1 つのテーブル エントリを有効なページ本体の高さまで広げます。また、垂直方向と水平方向の配置形式を指定して、テーブル エントリ内でイメージが垂直方向と水平方向の両方で中央に配置されるようにします。

    lo_table.TableEntriesStyle = [lo_table.TableEntriesStyle ...
        { ...
        Height(bodyHeight), ...
        HAlign("center"), ...
        VAlign("middle") ...
        }];

レポートにレイアウト テーブルを追加します。

    add(rpt,lo_table);
end

参考

| | | | | |

関連するトピック