[PR]看護師の好条件求人なら:転職のプロがサポート!年間5万人が利用


戻る
iTextを使った場合のテストです。 以下のようにCLASSPATHをセットする必要がありますのでご注意!
set classpath=.;iText.jar;iTextAsian.jar
javac RagSample1.java
java RagSample1

import java.awt.Color;
import java.io.FileOutputStream;
import com.lowagie.text.*;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfWriter;

public class RagSample1 {

	/* $Id: RagSample1.java,v 1.2 2004/04/28 04:19:34 kishi Exp kishi $ */
	/* 実は某サイト方から拾ってきたソースを適当にモディファイしています */
	/* かなりベタ名コードです(借用しているくせに恐縮ですが) -- 正直このままでは再利用性に乏しい */


	// 明細用データ
	private static String[][] data =
		{ { "XYZ-01", "プサイズドライヤー", "2", "個", "300", "600" }, {
			"XYZ-02", "プサイズシェイバー", "1", "個", "300", "300" }, {
			"ABC-01", "プサイズフォン(ミッションメモリー付)", "2", "個", "200", "400" }, {
			"ABC-02", "プサイズハンカチ", "1", "枚", "200", "200" }, {
			"ABC-03", "プサイズ歯ブラシ", "1", "本", "200", "200" }, {
			"ABC-04", "スマッシュパッド", "1", "個", "200", "200" }
	};

	public static void main(String[] args) {
		try {
			// 明朝体,ゴシック体フォントを設定
			BaseFont mincho =
				BaseFont.createFont("HeiseiMin-W3", "UniJIS-UCS2-HW-H", false);
			BaseFont gothic =
				BaseFont.createFont("HeiseiKakuGo-W5", "UniJIS-UCS2-H", false);
			Font min10 = new Font(mincho, 10);
			Font goth10 = new Font(gothic, 10);

			// Documentオブジェクトを生成
			Document document = new Document(PageSize.A4);
			// PdfWriterオブジェクトを生成
			PdfWriter writer =
				PdfWriter.getInstance(
					document,
					new FileOutputStream("MySamplepOutput.pdf"));

			// ヘッダー/フッターを設定
			String YMD = "2004/04/30";
			HeaderFooter header =
				new HeaderFooter(
					new Phrase(
						new Chunk(
							YMD,
							new Font(mincho, 10, Font.UNDERLINE))),
					false);
			header.setAlignment(Element.ALIGN_RIGHT);
			header.setBorderColor(Color.white);
			document.setHeader(header);

			HeaderFooter footer =
				new HeaderFooter(
					new Paragraph("株式会社かとちゃん", new Font(mincho, 12)),
					false);
			footer.setAlignment(Element.ALIGN_CENTER);
			document.setFooter(footer);

			// ドキュメントをオープン
			document.open();

			// 文を挿入
			Paragraph para1 =
				new Paragraph("請 求 書", new Font(gothic, 20, Font.BOLD));
			para1.setAlignment(Element.ALIGN_CENTER);
			document.add(para1);
			Paragraph para2 =
				new Paragraph(50, "中曽根 信介 様", new Font(mincho, 15, Font.UNDERLINE));
			para2.setAlignment(Element.ALIGN_LEFT);
			document.add(para2);
			Paragraph para3 =
				new Paragraph(40, "下記の通り請求いたします。", new Font(mincho, 12));
			para3.setAlignment(Element.ALIGN_CENTER);
			document.add(para3);

			// 表を出力
			Table tbl_hd = new Table(2);
			tbl_hd.setDefaultHorizontalAlignment(Element.ALIGN_CENTER);
			tbl_hd.setDefaultVerticalAlignment(Element.ALIGN_MIDDLE);
			tbl_hd.setPadding(4);

			int widthA[] = { 35, 65 };
			tbl_hd.setWidths(widthA); // 各セル幅の比率を設定(パーセント)
			tbl_hd.setWidth(50); // テーブル全体の大きさを設定(パーセント)

			Cell cellA1 = new Cell(new Phrase("件名", new Font(gothic, 15)));
			cellA1.setGrayFill(0.9f);
			Cell cellA2 = new Cell(new Phrase("合計金額", new Font(gothic, 15)));
			cellA2.setGrayFill(0.9f);
			Cell cellA3 = new Cell(new Phrase("1,995円", new Font(mincho, 15)));
			cellA3.setHorizontalAlignment(Element.ALIGN_RIGHT);

			tbl_hd.addCell(cellA1);
			tbl_hd.addCell(new Phrase("プサイズグッズ代", new Font(mincho, 15)));
			tbl_hd.addCell(cellA2);
			tbl_hd.addCell(cellA3);

			document.add(tbl_hd);

			Paragraph para4 = new Paragraph("■明細書■", new Font(gothic, 13));
			para4.setAlignment(Element.ALIGN_CENTER);
			document.add(para4);

			Table tbl_dt = new Table(6);
			tbl_dt.setDefaultHorizontalAlignment(Element.ALIGN_CENTER);
			tbl_dt.setDefaultVerticalAlignment(Element.ALIGN_MIDDLE);
			tbl_dt.setPadding(4);
			tbl_dt.setOffset(0);

			int widthC[] = { 10, 40, 10, 10, 15, 15 };
			tbl_dt.setWidths(widthC);
			tbl_dt.setWidth(100);

			Cell cellC1 = new Cell(new Phrase("コード", goth10));
			cellC1.setGrayFill(0.9f);
			Cell cellC2 = new Cell(new Phrase("品目・摘要", goth10));
			cellC2.setGrayFill(0.9f);
			Cell cellC3 = new Cell(new Phrase("数量", goth10));
			cellC3.setGrayFill(0.9f);
			Cell cellC4 = new Cell(new Phrase("単位", goth10));
			cellC4.setGrayFill(0.9f);
			Cell cellC5 = new Cell(new Phrase("単価", goth10));
			cellC5.setGrayFill(0.9f);
			Cell cellC6 = new Cell(new Phrase("金額", goth10));
			cellC6.setGrayFill(0.9f);

			tbl_dt.addCell(cellC1);
			tbl_dt.addCell(cellC2);
			tbl_dt.addCell(cellC3);
			tbl_dt.addCell(cellC4);
			tbl_dt.addCell(cellC5);
			tbl_dt.addCell(cellC6);

			// 明細行を埋める
			for (int i = 0; i < data.length; i++) {
				Cell cell = new Cell(new Phrase(data[i][0], min10));
				cell.setHorizontalAlignment(Element.ALIGN_CENTER);
				tbl_dt.addCell(cell);
				cell = new Cell(new Phrase(data[i][1], min10));
				cell.setHorizontalAlignment(Element.ALIGN_LEFT);
				tbl_dt.addCell(cell);
				cell = new Cell(new Phrase(data[i][2], min10));
				cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
				tbl_dt.addCell(cell);
				cell = new Cell(new Phrase(data[i][3], min10));
				cell.setHorizontalAlignment(Element.ALIGN_CENTER);
				tbl_dt.addCell(cell);
				cell = new Cell(new Phrase(data[i][4], min10));
				cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
				tbl_dt.addCell(cell);
				cell = new Cell(new Phrase(data[i][5], min10));
				cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
				tbl_dt.addCell(cell);
			}

			//空白行を作成
			for (int i = data.length; i < 10; i++) {
				for (int j = 0; j < 6; j++) {
					tbl_dt.addCell(Cell.EMPTY_CELL);
				}
			}

			Cell cellC7 = new Cell(new Phrase("小計", goth10));
			cellC7.setGrayFill(0.9f);
			cellC7.setColspan(5);
			Cell cellC8 = new Cell(new Phrase("1,900", min10));
			cellC8.setHorizontalAlignment(Element.ALIGN_RIGHT);
			Cell cellC9 = new Cell(new Phrase("消費税等", goth10));
			cellC9.setGrayFill(0.9f);
			cellC9.setColspan(5);
			Cell cellC10 = new Cell(new Phrase("95", min10));
			cellC10.setHorizontalAlignment(Element.ALIGN_RIGHT);
			Cell cellC11 = new Cell(new Phrase("合計", goth10));
			cellC11.setGrayFill(0.9f);
			cellC11.setColspan(5);
			Cell cellC12 = new Cell(new Phrase("1,995", min10));
			cellC12.setHorizontalAlignment(Element.ALIGN_RIGHT);

			// 備考
			Cell cellC13 = new Cell(new Phrase("備考", goth10));
			cellC13.setGrayFill(0.9f);
			cellC13.setRowspan(3);
			cellC13.setVerticalAlignment(Element.ALIGN_TOP);
			Cell cellC14 = new Cell(new Phrase("/*あいうえおかきくけこさしすせそたちつてと*/", goth10));
			cellC14.setRowspan(3);
			cellC14.setColspan(5);
			cellC14.setHorizontalAlignment(Element.ALIGN_LEFT);

			tbl_dt.addCell(cellC7);
			tbl_dt.addCell(cellC8);
			tbl_dt.addCell(cellC9);
			tbl_dt.addCell(cellC10);
			tbl_dt.addCell(cellC11);
			tbl_dt.addCell(cellC12);
			tbl_dt.addCell(cellC13);
			tbl_dt.addCell(cellC14);

			document.add(tbl_dt);

			// ドキュメントをクローズ
			document.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

世の中にXML+XSL/XSLT(XSL-FOP)なんかを使ってPDFソリューションなんてものがありますが、 実際のことを考えた場合にエンドユーザでXSLを使いこなす人がいるかといえば疑問です。

#もちろん僕らシステム技術者であればなんてことないですが・・・

そうであれば、データソースとしてXMLあるいはDBのクエリ結果を使い、あとは、 テンプレートを含んだ形での出力機能はこのようなJAVAプログラムによって実現するというのが 現実的な解でしょう。 少なくとも定型的な印刷物であればそちらのほうがベターでしょう。

戻る







[PR]当たる!無料占いで仕事鑑定:大人気!無料占い『スピリチュアルの館』