Main Content

ページ レイアウト セクションの作成

mlreportgen.report.Section クラスを使用してレポートにセクションを追加できます。この事前定義されたクラスによって、書式設定済みセクションがレポートに自動的に追加されます。既定の書式設定は縦方向で、既定の余白が設定され、フッターにはページ番号が表示されます。セクションのレイアウトおよびコンテンツはオーバーライドできます。DOM オブジェクトを使用してセクションを作成するよりも、このクラスを使用する方がはるかに簡単で効率的です。詳細と例については、mlreportgen.report.Section を参照してください。

DOM オブジェクトを使用してセクションを作成することもできます。Word または PDF ドキュメントを、それぞれ独自のページ レイアウトをもつセクションに分割できます。ページ レイアウトには、ページの余白、ページの方向、ヘッダーとフッターが含まれます。

Word テンプレートでのページ レイアウトの定義

すべての Word テンプレートには、少なくとも 1 つのページ レイアウト セクションがあります。Word を使用して、追加のセクションを必要な数だけ作成できます。たとえば、レポートのメイン テンプレートで、レポートのタイトル ページ、目次、章のセクションを作成できます。Word テンプレートでのページ レイアウト セクションの作成方法の詳細については、Word のドキュメンテーションを参照してください。

PDF テンプレートでのページ レイアウトの定義

<layout> 要素を使用して、PDF テンプレートのページ レイアウトを定義します。<layout> 要素は、メイン テンプレート (root.html) およびドキュメント パーツ テンプレートで使用できます。

<layout> 要素では次の属性を使用できます。

style

page-margin: top left bottom right header footer gutter; page-size: height width orientation

first-page-numberレイアウトの最初のページの番号
page-number-format n または N (数値の場合)、aAiI
section-breakこのレイアウトのセクションを開始する場所: Odd PageEven 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> を使用します。テンプレート パッケージに保存されたイメージ ファイルとして透かしを指定します。テンプレート パッケージにイメージを保存するには、テンプレート パッケージを解凍して、イメージをフォルダーにコピーした後、テンプレートを再度圧縮します。例:

  1. テンプレートを解凍します。

    unzipTemplate('MyTemplate.pdftx');  
  2. 透かしイメージをフォルダー MyTemplate にコピーします。イメージを整理するために、イメージを images フォルダーにコピーします。

  3. テンプレートのページ レイアウトに 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>
  4. テンプレートを圧縮します。

    zipTemplate('MyTemplate.pdftx','MyTemplate');
  5. フォルダー MyTemplate を削除します。

  6. 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);

参考

クラス

関連するトピック