PDF レポートでの形式的イメージの中央配置
この例では、PDF レポートの横向きページで形式的イメージ (表題付きイメージ) を中央に配置する方法を示します。
この例では、横方向レイアウトのレポート API PDF レポートを作成し、ローカル関数 centerFormalImage
を使用してページの中央に形式的イメージを追加します。
レポートの作成
長い完全修飾クラス名を使用せずに済むよう、DOM およびレポートの 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、レポート API、および Report Generator ユーティリティ パッケージをインポートします。
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);
FormalImage
レポーターの getImageReporter
メソッドを使用してイメージ レポーターを取得し、getCaptionReporter
メソッドを使用して表題レポーターを取得します。
imageReporter = getImageReporter(formalImage,rpt); captionReporter = getCaptionReporter(formalImage);
イメージおよび表題レポーターの getImpl
メソッドを使用して、対応する DOM 実装を取得します。
imageImpl = getImpl(imageReporter,rpt); captionImpl = getImpl(captionReporter,rpt);
DOM 実装には、イメージと表題のコンテンツを含む DOM Paragraph
が含まれています。段落の周りが必ず空白なしになり、後続の手順で作成されるテーブル エントリ内で必ず中央に配置されるように段落のスタイルを更新します。
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);
非表示のレイアウト テーブル内にあるこの 1 つのテーブル エントリに、イメージと表題のコンテンツを含む段落を追加します。
append(entry,imagePara); append(entry,captionPara);
このテーブルを有効なページ本体の幅まで広げます。
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
| getReportLayout
| mlreportgen.utils.units
| mlreportgen.report.FormalImage
| mlreportgen.dom.Table