ページ上での 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
参考
mlreportgen.report.Report
| mlreportgen.dom.PDFPageLayout
| mlreportgen.dom.DOCXPageLayout
| getReportLayout
| mlreportgen.utils.units
| mlreportgen.report.Figure
| mlreportgen.dom.Table