SQLの窓

2013年09月03日


iText( itextpdf-5.4.3 / Java ) で簡単に PDF 出力をする。

作成した PDF へのリンク


ビルド用バッチファイル
prompt java$G
setlocal
set PATH=C:\Program Files\Java\jdk1.6.0_24\bin;%PATH%
set CLASSPATH=.;itextpdf-5.4.3.jar

javac Main.java

endlocal
実行用バッチファイル
prompt java$G
setlocal
set PATH=C:\Program Files\Java\jdk1.6.0_24\bin;%PATH%
set CLASSPATH=.;itextpdf-5.4.3.jar

REM 実行
java Main

endlocal
iText ダウンロード iText メインページ iText ドキュメント iText サンプルページ ダウンロードした itextpdf-5.4.3.jar は、テストコードと同じディレクトリに置いて、JDK のインストール先(ここでは C:\Program Files\Java\jdk1.6.0_24)を書き換えてビルドすれば、実行後 pdftest.pdf が作成されます。
// http://api.itextpdf.com/itext/index.html?com/itextpdf/text/pdf/ColumnText.html
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.*;
import com.itextpdf.text.pdf.draw.*;

import java.io.FileOutputStream;

public class Main {

	// *****************************************************
	// エントリポイント
	// *****************************************************
	public static void main(String[] args) {
		Main thisClass = new Main();
	}

	// *****************************************************
	// コンストラクタ
	// *****************************************************
	public Main() {
		super();
		my_acton();
	}

	// *****************************************************
	// 初期処理
	// *****************************************************
	private void my_acton() {

		System.out.println("処理開始");


		String pdf = "pdftest.pdf";

		Document doc = new Document(); 

		try {
			// 出力先を指定し、文書をPDFとして出力
			PdfWriter pw = PdfWriter.getInstance(doc, new FileOutputStream(pdf));
			// 出力開始
			doc.open();

			// 日本語フォントの設定

			// メイリオ
			Font font = new Font(
				BaseFont.createFont(
					"C:\\WINDOWS\\Fonts\\meiryo.ttc,0",
					BaseFont.IDENTITY_H,
					BaseFont.EMBEDDED));

			// メイリオボールド
			Font font2 = new Font(
				BaseFont.createFont(
					"C:\\WINDOWS\\Fonts\\meiryob.ttc,0",
					BaseFont.IDENTITY_H,
					BaseFont.EMBEDDED));


			// *****************************************************************
			// 座標指定する為のオブジェクト
			// *****************************************************************
			// 一番上のレイヤー
			PdfContentByte pcb = pw.getDirectContent();

			// 一番上のレイヤーに直線を引く
			pcb.moveTo( 0, 820 );
			pcb.lineTo( 595, 820 );
			pcb.stroke();

			ColumnText ct = new ColumnText(pcb);

			Phrase myText = null;
			String line_text = null;

			int x1 = 400;
			int x2 = 595;

			line_text = "1234567890123456789012345678901234567890";

			myText = new Phrase(line_text,font);
			ct.setSimpleColumn(
				myText,
				x1,0,		// 書き込み対象の左下の座標
				x2, 810,	// 書き込み対象の右上の座標
				20,			// 行間
				Element.ALIGN_LEFT
			);
			ct.go();

			line_text = "ニ行目";

			myText = new Phrase(line_text,font);
			ct.setSimpleColumn(
				myText,
				x1,0,
				x2, 750,
				0,
				Element.ALIGN_LEFT
			);
			ct.go();

			line_text = "三行目";

			myText = new Phrase(line_text,font);
			ct.setSimpleColumn(
				myText,
				x1,0,
				x2, 735,
				0,
				Element.ALIGN_LEFT
			);
			ct.go();

			line_text = "四行目";

			// *****************************************************************
			// 右寄せ
			// *****************************************************************
			int right_offset = 50;
			myText = new Phrase(line_text,font);
			ct.setSimpleColumn(
				myText,
				x1,0,
				x2-right_offset, 720,
				0,
				Element.ALIGN_LEFT
			);
			ct.go();

			int top = 700;
			myText = new Phrase("left:"+doc.getPageSize().getLeft(),font2);
			ct.setSimpleColumn(
				myText,
				x1, 0,
				x2-right_offset, top,
				0,
				Element.ALIGN_RIGHT
			);
			ct.go();

			top -= 10;
			myText = new Phrase("right:"+doc.getPageSize().getRight(),font2);
			ct.setSimpleColumn(
				myText,
				x1, 0,
				x2-right_offset, top,
				0,
				Element.ALIGN_RIGHT
			);
			ct.go();

			top -= 10;
			myText = new Phrase("top:"+doc.getPageSize().getTop(),font2);
			ct.setSimpleColumn(
				myText,
				x1,0,
				x2-right_offset, top,
				0,
				Element.ALIGN_RIGHT
			);
			ct.go();

			top -= 10;
			myText = new Phrase("bottom:"+doc.getPageSize().getBottom(),font2);
			ct.setSimpleColumn(
				myText,
				x1,0,
				x2-right_offset, top,
				0,
				Element.ALIGN_RIGHT
			);
			ct.go();

			// *****************************************************************
			// 真ん中のレイヤー( 通常の文字列や画像・グラフィックの追加 )
			// *****************************************************************

			Image img = Image.getInstance("_img.jpg");
			img.setAbsolutePosition(140, 620);
			img.scalePercent(50);
			doc.add(img);

			doc.add( new Paragraph(" ", font) );	// 改行
			doc.add( new Paragraph(" ", font) );
			doc.add( new Paragraph(" ", font) );
			doc.add( new Paragraph(" ", font) );
			doc.add( new Paragraph(" ", font) );

			doc.add( new Paragraph("文を 一行出力", font) );
			doc.add( new Paragraph("文を 一行出力", font) );
			doc.add( new Paragraph("文を 一行出力", font) );
			doc.add( new Paragraph("文を 一行出力", font) );
			doc.add( new Paragraph("文を 一行出力", font) );

			doc.add( new Paragraph(" ", font) );

			Paragraph p = new Paragraph();
			for (int i = 0; i < 25; i++) {
				p.add(
					new Chunk(
						"日本語表示の一般テキストを繰り返し表示しています。"
						,font
					)
				);
			}
			doc.add(p);

			// 出力終了
			doc.close();

		}
		catch (Exception e) {
			e.printStackTrace();
		}


		System.out.println("処理終了");

	}

}

メイリオについて

meiryo.ttc,0 を meiryo.ttc,1 にすればメイリオイタリックになります。(ボールドのほうも同様です)

レイヤーについて

レイヤーはもう一枚、一番下にありますが通常の文書では必要無いと思います。

setSimpleColumn について

矩形を指定しますが、開始が左下隅で、終了が右上隅になります。6番目の引数は行間を示し、矩形からあふれるばあいに使用される行間です。

ページのサイズ について

真ん中のレイヤーである、Document に対して以下のメソッドを実行して取得しています
getPageSize().getLeft()
getPageSize().getRight()
getPageSize().getTop()
getPageSize().getBottom()

Document 内の改行について

doc.add( new Paragraph(" ", font) ); で改行します( スペースを出力します )

一般的な出力について

単純なテキスト印刷の場合であれば、Document のみで問題無いと思いますが、文書としてのフォーマットを固定部分として定義して、中身にテキストを出力するように場合、getDirectContent を使って取得した PdfContentByte を使って出力すると良いと思います。もう一枚のレイヤーは、さらに背景にバリエーションを与える必要がある場合に使用するといいと思います。( getDirectContentUnder() で取得します )


【Javaの最新記事】
posted by lightbox at 2013-09-03 15:50 | Java | このブログの読者になる | 更新情報をチェックする
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり