(3)ヘッダーとフッター、マージン、右寄せ・中央寄せの設定
次に、レイアウトに関する設定を見てみましょう。
作成するPDFファイル
ここで生成するPDFは、次のようになります。
ヘッダーやフッターが正しく適用されていることが分かります。また、マージン(ページの端の余白)、文字の表示位置が設定されていることも確認できます。
ページサイズとマージンの指定方法
ページサイズとマージンは、Documentクラスのコンストラクタで指定できます。
//PDFドキュメント(ページサイズ,マージン左,右,上,下) Document doc = new Document(PageSize.A4, 50, 200, 50, 500);
Documentクラスのコンストラクタには次のような種類があります。生成するPDFに応じて設定してください。
Document(); Document(ページサイズ); Document(ページサイズ,左マージン,右マージン,上マージン,下マージン);
ページサイズとしては、「A0~A10」「B0~B5」「LETTER」「HALFLETTER」などが指定できます。
中央寄せ・右寄せなどの指定方法
Wordなどのワープロソフトでレイアウトを整えるときには、「右寄せ」や「センター寄せ」といった表示位置の調整ができます。iTextSharpでも同様に文字の表示位置を調整することができます。
Paragraph para = new Paragraph("右寄せ", fnt); para.Alignment = Element.ALIGN_RIGHT; doc.Add(para);
表示位置は、ParagraphクラスのAlignmentプロパティに下表の値を設定できます。
| 名前 | 説明 |
ALIGN_LEFT | 左寄せ(既定) |
ALIGN_CENTER | センター寄せ |
ALIGN_RIGHT | 右寄せ |
ALIGN_JUSTIFIED | 均等 |
ヘッダーとフッターの指定方法
また、複数ページにわたる文章を見やすく分かりやすくするために、ページの最初に「ヘッダー」、最後に「フッター」を付けることもできます。
HeaderFooterクラス
iTextSharpでヘッダーとフッターを管理するには、HeaderFooterクラスを使います。
//ヘッダーの設定 HeaderFooter header = new HeaderFooter( new Phrase("ヘッダー(中央揃え)", fnt), false); //センター寄せ header.SetAlignment(ElementTags.ALIGN_CENTER); //DocumentにHeaderを設定 doc.Header = header; //フッターの設定 HeaderFooter footer = new HeaderFooter( new Phrase("ここは",fnt), new Phrase("ページ目",fnt)); //センター寄せ footer.SetAlignment(ElementTags.ALIGN_CENTER); //上下の線を消す footer.Border = Rectangle.NO_BORDER; //DocumentにFooterを設定 doc.Footer = footer;
HeaderFooterクラスはコンストラクタで、その表示内容を設定します。
HeaderFooter(表示する文字,ページナンバーの表示有無); HeaderFooter(ページナンバーの前に表示する文字,ページナンバーの後に表示する文字);
HeaderFooterの上下にはデフォルトで線が表示されます。線を表示させたくない場合や、別の線を表示したい場合は、Borderプロパティに次のRectangleクラスの列挙子を設定します。ここでは、フッターにNO_BORDERを設定しています。
| 名前 | 説明 |
TOP_BORDER | 上線 |
BOTTOM_BORDER | 下線 |
LEFT_BORDER | 左線 |
RIGHT_BORDER | 右線 |
BOX | 上下左右を囲む線 |
NO_BORDER | 線なし |
ヘッダーとフッターの設定手順
フッター・ヘッダーを設定する場合は、DocumentオブジェクトをOpenする前に行う必要があるためご注意ください。
また、より高度にヘッダーを制御したい場合はページイベントを利用すると良いでしょう。
文字を表すParagraph/Phrase/Chunkクラス
このサンプルでは、Phraseクラスを使って、ヘッダーとフッターに文字を追加しています。Phraseクラスとは、Paragraphと同様に文字列を管理できるクラスですが、Paragraphクラスと異なり、改行が入りません。
| クラス名 | 英語の意味 | 規模 | 特徴 |
Chunk | 塊 | 小 | テキストを追加するときの最小単位。フォント、サイズ、スタイル、色などを保持できる。表示する文字列が行末に達しても改行されない。 |
Phrase | 句 | 中 | Chunkを複数格納できる。表示する文字列が行末に達したときは改行される。 |
Paragraph | 段落 | 大 | Chunk、Phraseに加え、TableやImageなどさまざまなオブジェクトを格納できる。Paragraphの前後で自動的に改行される。 |
参考まで、これらのクラスの挙動の違いを表すサンプルを下記に示します。
//Chunk doc.Add(new Chunk("(1)チャンク", fnt)); doc.Add(new Chunk("(2)チャンクチャンクチャンクチャンクチャンク", fnt)); //Paragraph doc.Add(new Paragraph("(1)パラグラフ", fnt)); doc.Add(new Paragraph("(2)パラグラフパラグラフパラグラフパラグラフパラグラフ", fnt)); //Phrase doc.Add(new Phrase("(1)フレーズ",fnt)); doc.Add(new Phrase("(2)フレーズフレーズフレーズフレーズフレーズ",fnt));
実行結果は次のようになります。このプログラムによって、Chunkが行末まで達しても改行しないこと、Phraseが行末で改行されること、Paragraphは開始と終了で改行されることが確認できます。
(4)表形式の表示
業務システムの帳票を作る場合は、Excelのような表形式のテーブルの表示は避けて通れません。ここでは、表形式のデータを表示する方法について紹介します。
作成するPDFファイル
ここで生成するPDFは、次のようになります。
表形式のデータが表示されていることが分かります。また、タイトルの網掛けや、表のセルが結合されていることも確認できます。
表形式のデータの表示方法
表形式でデータを表示するためには、TableクラスとCellクラスを使用します。Tableクラスは、1つの表を表すクラスで、Cellクラスは表の中の一つのセル(マス目)を表すクラスです。
このコードでは、Tableクラスの列数を決めてインスタンス化し、見栄えに関する属性を設定しています。
//2列からなるテーブルを作成 Table tbl = new Table(2); //全体の幅(パーセンテージ) tbl.Width = 100; //各列の幅 tbl.Widths = new float[] {0.75f, 0.25f}; //デフォルトの表示位置(横) tbl.DefaultHorizontalAlignment = Element.ALIGN_CENTER; //デフォルトの表示位置(縦) tbl.DefaultVerticalAlignment = Element.ALIGN_MIDDLE; //余白 tbl.Padding = 3; //セル間の間隔 tbl.Spacing= 0; //線の色(RGB:黒) tbl.BorderColor = new iTextSharp.text.Color(0, 0, 0);
ここでは、次の属性を設定しています。
| 名前 | 説明 |
Width | 表全体の幅(%) |
Widths | 各列の幅の割合 |
DefaultHorizontalAlignment | 表示位置(横) |
DefaultVerticalAlignment | 表示位置(縦) |
Padding | 余白 |
Spacing | セル幅 |
BorderColor | 線の色 |
表のデザインが完了したら、各セルの値を設定します。表示する文字を引数にCellをインスタンス化し、TableオブジェクトにAddします。
//タイトルのセルを追加(左の列) Cell cel = new Cell(new Phrase("支払理由", fnt)); //セルの網掛け(20%網掛け) cel.GrayFill = 0.8f; tbl.AddCell(cel); //タイトルのセルを追加(右の列) cel = new Cell(new Phrase("金額", fnt)); //セルの網掛け(40%網掛け) cel.GrayFill = 0.6f; tbl.AddCell(cel); //表示するデータ ArrayList list = new ArrayList(); list.Add(new string[] {"光熱費", "10,000"}); list.Add(new string[] {"書籍代", "7,500"}); list.Add(new string[] {"インターネットプロバイダ代", "5,000"}); //明細行の追加 foreach (string[] shiharai in list) { //左のセルの追加 cel = new Cell(new Phrase(shiharai[0], fnt)); tbl.AddCell(cel); //右のセルの追加(金額なので右寄せ) cel = new Cell(new Phrase(shiharai[1], fnt)); cel.HorizontalAlignment = Element.ALIGN_RIGHT; tbl.AddCell(cel); } //結合したセルの追加 cel = new Cell(new Phrase("今月の支出は22,500円", fnt)); cel.Colspan = 2 ; tbl.AddCell(cel); //テーブルを追加 doc.Add(tbl);
このコードを実行することで、表形式のデータを表示することができます。
Cellクラスの主な属性について下表に整理しておきます。
| 名前 | 説明 |
GrayFill | 網掛けの設定 |
Colspan | 複数のセルを行方向に結合 |
Rowspan | 複数のセルを列方向に結合 |
HorizontalAlignment | 表示位置(横) |
VerticalAlignment | 表示位置(縦) |



