Main Content

ページ上での Figure スナップショットの中央配置

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

この例では、横方向レイアウトのレポート API レポートを作成し、MATLAB Figure を作成してから、ローカル関数 centerFigure を使用してこれらの Figure のスナップショットを作成し、ページの中央に追加します。

レポートの作成

長い完全修飾クラス名を使用せずに済むよう、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);

Figure の作成と追加

線形プロットを含む Figure を作成します。

f = figure();
plot(1:1:10,2:2:20);
grid on;

ローカル関数 centerFigure を呼び出して、Figure スナップショットをページの中央に追加します。次に、Figure オブジェクトを削除します。

centerFigure(f,rpt);

delete(f);

同様に、膜表面プロットのスナップショットをページの中央に追加します。

centerFigure(surf(membrane),rpt);

delete(gcf);

レポートの生成

レポートを閉じて表示します。

close(rpt);
rptview(rpt);

ローカル関数 centerFigure

この関数は、指定された Figure のスナップショットを作成し、指定されたレポートのページ中央にそれを追加します。この関数は、レポート API Figure レポーターを使用して Figure スナップショットを取得し、非表示の DOM Table を使用してレイアウトを行います。

function centerFigure(figure,rpt)

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

    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 の Figure オブジェクトを作成します。次に、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")}];

Figure スナップショットを含む段落を 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

参考

| | | | | |

関連するトピック