CodeZine(コードジン)

特集ページ一覧

iTextSharpを利用して.NETでPDF帳票を出力する

iTextSharpで見栄えの良い印刷帳票を作成する

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2006/08/07 00:00
目次

(3)ヘッダーとフッター、マージン、右寄せ・中央寄せの設定

 次に、レイアウトに関する設定を見てみましょう。

作成するPDFファイル

 ここで生成するPDFは、次のようになります。

レイアウトを設定したPDFファイル
レイアウトを設定したPDFファイル

 ヘッダーやフッターが正しく適用されていることが分かります。また、マージン(ページの端の余白)、文字の表示位置が設定されていることも確認できます。

ページサイズとマージンの指定方法

 ページサイズとマージンは、Documentクラスのコンストラクタで指定できます。

ページサイズとマージンの指定
//PDFドキュメント(ページサイズ,マージン左,右,上,下)
Document doc = new Document(PageSize.A4, 50, 200, 50, 500);

 Documentクラスのコンストラクタには次のような種類があります。生成するPDFに応じて設定してください。

Documentコンストラクタ
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プロパティに下表の値を設定できます。

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(ページナンバーの前に表示する文字,ページナンバーの後に表示する文字);

 HeaderFooterの上下にはデフォルトで線が表示されます。線を表示させたくない場合や、別の線を表示したい場合は、Borderプロパティに次のRectangleクラスの列挙子を設定します。ここでは、フッターにNO_BORDERを設定しています。

Alignmentプロパティに設定できるRectangleの列挙子
名前説明
TOP_BORDER上線
BOTTOM_BORDER下線
LEFT_BORDER左線
RIGHT_BORDER右線
BOX上下左右を囲む線
NO_BORDER線なし

ヘッダーとフッターの設定手順

 フッター・ヘッダーを設定する場合は、DocumentオブジェクトをOpenする前に行う必要があるためご注意ください。

 また、より高度にヘッダーを制御したい場合はページイベントを利用すると良いでしょう。

文字を表すParagraph/Phrase/Chunkクラス

 このサンプルでは、Phraseクラスを使って、ヘッダーとフッターに文字を追加しています。Phraseクラスとは、Paragraphと同様に文字列を管理できるクラスですが、Paragraphクラスと異なり、改行が入りません。

ドキュメントに含めることができる文字を表すオブジェクトの種類
クラス名英語の意味規模特徴
Chunkテキストを追加するときの最小単位。フォント、サイズ、スタイル、色などを保持できる。表示する文字列が行末に達しても改行されない。
PhraseChunkを複数格納できる。表示する文字列が行末に達したときは改行される。
Paragraph段落ChunkPhraseに加え、TableImageなどさまざまなオブジェクトを格納できる。Paragraphの前後で自動的に改行される。

 参考まで、これらのクラスの挙動の違いを表すサンプルを下記に示します。

Paragraph/Phrase/Chunkの違い
//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は、次のようになります。

テーブルを使用した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);

 ここでは、次の属性を設定しています。

Tableの主な属性
名前説明
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クラスの主な属性について下表に整理しておきます。

Cellの主な属性
名前説明
GrayFill網掛けの設定
Colspan複数のセルを行方向に結合
Rowspan複数のセルを列方向に結合
HorizontalAlignment表示位置(横)
VerticalAlignment表示位置(縦)

  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • WINGSプロジェクト 青木 淳夫(アオキ アツオ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きた...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5