ページ レイアウト セクションの作成
mlreportgen.report.Section
クラスを使用してレポートにセクションを追加できます。この事前定義されたクラスによって、書式設定済みセクションがレポートに自動的に追加されます。既定の書式設定は縦方向で、既定の余白が設定され、フッターにはページ番号が表示されます。セクションのレイアウトおよびコンテンツはオーバーライドできます。DOM オブジェクトを使用してセクションを作成するよりも、このクラスを使用する方がはるかに簡単で効率的です。詳細と例については、mlreportgen.report.Section
を参照してください。
DOM オブジェクトを使用してセクションを作成することもできます。Word または PDF ドキュメントを、それぞれ独自のページ レイアウトをもつセクションに分割できます。ページ レイアウトには、ページの余白、ページの方向、ヘッダーとフッターが含まれます。
Word テンプレートでのページ レイアウトの定義
すべての Word テンプレートには、少なくとも 1 つのページ レイアウト セクションがあります。Word を使用して、追加のセクションを必要な数だけ作成できます。たとえば、レポートのメイン テンプレートで、レポートのタイトル ページ、目次、章のセクションを作成できます。Word テンプレートでのページ レイアウト セクションの作成方法の詳細については、Word のドキュメンテーションを参照してください。
PDF テンプレートでのページ レイアウトの定義
<layout>
要素を使用して、PDF テンプレートのページ レイアウトを定義します。<layout>
要素は、メイン テンプレート (root.html
) およびドキュメント パーツ テンプレートで使用できます。
<layout>
要素では次の属性を使用できます。
style |
|
first-page-number | レイアウトの最初のページの番号 |
page-number-format | n または N (数値の場合)、a 、A 、i 、I |
section-break | このレイアウトのセクションを開始する場所: Odd Page 、Even Page または Next Page |
たとえば、この要素は以下のようにレイアウトを定義します。
上下左右の余白 1 インチ
ヘッダーとフッターの高さ 0.5 インチ
とじしろ (ページをつづり合わせるための空白) のサイズ 0
ページ サイズ 8.5 インチ x 11 インチ、縦方向
<layout style="page-margin: 1in 1in 1in 1in 0.5in 0.5in 0in; page-size: 8.5in 11in portrait" />
この <layout>
要素にはページ フッターが含まれます。ページ フッター DefaultPageFooter
はドキュメント パーツ テンプレートで定義されなければなりません。
<layout style="page-margin: 1in 1in 1in 1in 0.5in 0.5in 0in; page-size: 8.5in 11in portrait"> <pfooter type="default" template-name="DefaultPageFooter" /> </layout>
ドキュメント パーツにページ レイアウトを作成できます。たとえば、次のコードは、ページ レイアウトを含む、Chapter
という名前のドキュメント パーツ テンプレートを定義します。レイアウトはページ ヘッダーとページ フッターを含み、<pnumber>
要素を使用してページ番号の形式を指定します。今回の場合、ページ ヘッダー要素とページ フッター要素のパーツ テンプレートも定義します。テンプレートでのページ ヘッダーとページ フッターの使用を参照してください。
<dptemplate name="Chapter"> <layout style="page-margin: 1in 1in 1in 1in 0.5in 0.5in 0in; page-size: 8.5in 11in portrait"> <pheader type="default" template-name="MyPageHeader"/> <pfooter type="default" template-name="MyPageFooter"/> <pnumber format="1" /> </layout> <!-- Define content for your layout here--fixed text and holes as needed --> </dptemplate>
レイアウトを使用するには、プログラムを使用してレポートにドキュメント パーツを挿入します。このコードは、ドキュメント パーツ Chapter
にホールが 1 つあることを仮定しています。ドキュメント パーツは、Chapter
ドキュメント パーツ テンプレートに指定されたページ レイアウトの定義を使用します。
import mlreportgen.dom.* d = Document('myDocPartEx','pdf','mytemplate'); open(d); % Assign the Chapter document part template to the variable dp dp = DocumentPart(d,'Chapter'); % Move to each hole in this document part and append content moveToNextHole(dp); append(dp,'My text to fill hole'); % Append this document part to the document append(d,dp); close(d); rptview(d.OutputPath);
PDF ページ レイアウトの透かし
PDF ページ レイアウトに透かしを入れることができます。透かしとは、ページの背景に表示するイメージのことで、ドラフト
や秘密情報
などの言葉が使われます。これは、適用された各ページのテキストの背後に表示されます。イメージには、.bmp
、.jpg
、.pdf
、.png
、.svg
および .tiff
のいずれのファイル タイプも使用できます。
<layout>
要素で <watermark>
を使用します。テンプレート パッケージに保存されたイメージ ファイルとして透かしを指定します。テンプレート パッケージにイメージを保存するには、テンプレート パッケージを解凍して、イメージをフォルダーにコピーした後、テンプレートを再度圧縮します。例:
テンプレートを解凍します。
unzipTemplate('MyTemplate.pdftx');
透かしイメージをフォルダー
MyTemplate
にコピーします。イメージを整理するために、イメージをimages
フォルダーにコピーします。テンプレートのページ レイアウトに
watermark
要素を追加します。たとえば、root.html
の既定のレイアウトに透かしを追加します。<layout style="page-margin: 1in 1in 1in 1in 0.5in 0.5in 0in; page-size: 8.5in 11in portrait" > <watermark src="./images/myfile.png" width="6in" /> </layout>
テンプレートを圧縮します。
zipTemplate('MyTemplate.pdftx','MyTemplate');
フォルダー
MyTemplate
を削除します。DOM API を使用して、このテンプレートを使用するレポートを作成します。または、レポート エクスプローラーで、このレイアウトを使用する PDF ページ レイアウト コンポーネントを含むフォームベース レポートを作成します。
テンプレート定義ページ レイアウトの移動
ドキュメントまたはドキュメント パーツの CurrentPageLayout
プロパティは、ドキュメントまたはドキュメント パーツのテンプレートを基に現在のセクションのページ レイアウトを指定するページ レイアウト オブジェクトをポイントします。新しいセクションに移動 (セクションの最初のホールに移動) するたび、DOM は、CurrentPageLayout
プロパティがそのセクションのページ レイアウト プロパティを指定するページ レイアウト オブジェクトをポイントするように更新します。レイアウト オブジェクトのプロパティを変更するか、レイアウト オブジェクトを新しいオブジェクトに置き換えることで、セクションのページ レイアウトを変更できます。
たとえば、セクションの方向を変更したり、ページ ヘッダーまたはフッターを追加できます。これらの変更は、コンテンツを新しいセクションに追加する前に行います。現在のレイアウト オブジェクトを置き換える場合、Word ドキュメントには mlreportgen.dom.DOCXPageLayout
オブジェクトを、PDF ドキュメントには mlreportgen.dom.PDFPageLayout
を使用します。
レポート プログラムによるテンプレート ページ レイアウトのオーバーライド
プログラムによって、テンプレート定義レイアウト プロパティを変更できます。たとえば、DOM 既定の Word テンプレートのページの方向は縦です。この例では、横長テーブルに合わせて方向を横に変更します。コードは、新しいページの方向に合わせて、ページの高さと幅を入れ替えます。
import mlreportgen.dom.* rpt = Document('test','docx'); open(rpt); sect = rpt.CurrentPageLayout; pageSize = sect.PageSize; pageSize.Orientation = 'landscape'; saveHeight = pageSize.Height; pageSize.Height = pageSize.Width; pageSize.Width = saveHeight; table = append(rpt,magic(22)); table.Border = 'solid'; table.ColSep = 'solid'; table.RowSep = 'solid'; close(rpt); rptview(rpt.OutputPath);
プログラムによるレイアウトの作成
DOCXPageLayout
オブジェクト (Word ドキュメントの場合) または PDFPageLayout
オブジェクト (PDF ドキュメントの場合) を追加して、プログラムによって新しいページ レイアウト セクションを開始できます。DOCX レポートでは、append
メソッドで段落を指定して前のセクションを終了できます。
append(rptObj,paraObj,LayoutObj)
append
メソッドで段落を指定しない場合、DOM API が空の段落を挿入してから新しいセクションを開始します。この例では、前のセクションの最後に空の段落を挿入することを避けるため、最後の段落を指定する構文を使用します。
import mlreportgen.dom.* rpt = Document('test','docx'); append(rpt,Heading(1,'Magic Square Report','Heading 1')); sect = DOCXPageLayout; sect.PageSize.Orientation = 'landscape'; sect.PageSize.Height = '8.5in'; sect.PageSize.Width = '11in'; append(rpt,Paragraph('The next page shows a magic square.'),sect); table = append(rpt,magic(22)); table.Border = 'solid'; table.ColSep = 'solid'; table.RowSep = 'solid'; close(rpt); rptview(rpt.OutputPath);
参考
クラス
mlreportgen.dom.PDFPageLayout
|mlreportgen.dom.DOCXPageLayout
|mlreportgen.dom.PageSize
|mlreportgen.dom.PageMargins
|mlreportgen.dom.PageBorder