import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Calendar;

import wkc.pdf.PdfException;
import wkc.pdf.tool.Report;
import wkc.pdf.tool.ReportException;
import wkc.pdf.tool.StandardReportConfig;
import wkc.pdf.tool.Quadding;
import wkc.pdf.tool.Field;
import wkc.pdf.PdfGrayColor;
import wkc.pdf.PdfImage;
import wkc.pdf.Info;
import wkc.pdf.UserAccessPermission;

public class InputPassword {
	private static File FORM_DIRECTORY_ROOT = new File("../resources/form");
	private static File OUTPUT_DIRECTORY_ROOT = new File(".");

	public static void main(String[] args) throws IOException, ReportException, PdfException {
		File outPdfFile = new File(OUTPUT_DIRECTORY_ROOT, "InputPassword.pdf");
		File formFile = new File(FORM_DIRECTORY_ROOT, "template2.pdf");
		File datFile = new File(FORM_DIRECTORY_ROOT, "template2.dat");
		FileOutputStream fout = new FileOutputStream(outPdfFile);
		StandardReportConfig conf = StandardReportConfig.getDefault();
		conf.setDefaultFontSize(10);
		//***** セキュリティ設定 *****//
		UserAccessPermission permission = new UserAccessPermission();
		//***** 権限パスワードの設定 *****//
		permission.setOwnerPassword("testPassword");
		//***** ユーザパスワードの設定(ファイルオープン時のパスワード) *****//
		permission.setUserPassword("openPassword");
		try {
			//***** セキュリティ設定(印刷許可) *****//
			permission.enable(UserAccessPermission.HIGHEST_QUARITY_LEVEL_PRINTING);
			Report report = new Report(formFile, datFile, fout, permission);

			//お客様情報
			String customerAdrs = "〒111-0051\n東京都台東区蔵前2-17-3\nJFE江戸川ビル";
			String customerCName ="JFEエンターテイメント株式会社";
			String customerBusyo1 = "企画部";
			String customerName = "部長 渡\ue000 健二様";
			//KSI情報
			String ksiAdrs = "〒136-8582\n東京都江東区南砂2丁目36-11";
			String ksiName = "川鉄情報システム株式会社";
			String ksiBusyo1 = "システムインテグレーション事業部";
			String ksiBusyo2 = "Web・オブジェクト指向事業推進部 営業Gr";
			String ksiPhone = "TEL03 (5665) 6318 FAX 03 (5665) 6389";
			//請求年月日
			String xYMD = "2004年 6月 5日";
			//お客様企業名
			String ccName = "JFEエンターテイメント株式会社";
			//内訳1
			Object[][] uchiwake = new Object[5][5];
			uchiwake[0][0] = "2003年度ネットワーク保守(第1四半期分)";
			uchiwake[0][1] = new Integer(1260000);
			//振込先
			String furikomi = "お支払い期限 2004年07月01日\nお振込先 みずは銀行 本店 当座貯金No.00010**\n     口座名義 カワテツジョウホウシステム(カブ)";			
			report.createPage(1);

			//会社ロゴ
			//かならずページを作成してから画像オブジェクトを作る。
			PdfImage rogo = report.createImage(new File("../chapter2/resources/rogo.png"));

			report.putFieldData("xInfoAdrs", customerAdrs);
			report.putFieldData("xInfoCName", customerCName);
			report.putFieldData("xInfoBusyo.1", customerBusyo1);
			Field xInfoName_phone = report.getField("xInfoName_phone");
			xInfoName_phone.setIsEmbeddedFont(true);
			report.putFieldData(xInfoName_phone, customerName);

			report.putFieldData("xOnchu", (String)null);
			report.putFieldData("xYMD", xYMD);
			report.putFieldData("xNo.0", (String)null);
			report.putFieldData("xNo.1", "03J90005");
			report.putFieldData("xTitle", "請求書");
			report.putFieldData("xCComName", ccName);
			report.putFieldData("xCode.0", (String)null);
			report.putFieldData("xCode.1", "5129");
			report.putFieldData("xRogo", rogo);
			
			report.putFieldData("xInfoRightAdrs", ksiAdrs);
			report.putFieldData("xInfoRightBusyo.1", ksiBusyo1);
			report.putFieldData("xInfoRightBusyo.2", ksiBusyo2);
			report.putFieldData("xInfoRightName_phone", ksiPhone);
			
			report.putFieldData("xAmountMes", (String)null);
			report.putFieldData("xBox.0", " ");
			report.putFieldData("xBox.1", " ");
			report.putFieldData("xBox.2", " ");
			report.putFieldData("xBox.3", " ");
			report.putFieldData("xNonyusaki", ccName + "殿");
			report.putFieldData("xGochumonNo", "*");
			report.putFieldData("xToshaJyuchuNo", "J90C010");
			report.putFieldData("xHanbaijissekiNo", "001");
			report.putFieldData("xUchiwake.0", (String) uchiwake[0][0]);
			report.putFieldData("xYen.0", (Integer) uchiwake[0][1]);
			int xTax = (int) (((Integer) uchiwake[0][1]).intValue() * 0.05);
			int xAmount0 = ((Integer) uchiwake[0][1]).intValue() + xTax;
			report.putFieldData("xTax", new Integer(xTax));
			report.putFieldData("xAmount.0", new Integer(xAmount0));
			report.putFieldData("xAmount1", new Integer(xAmount0));

			report.putFieldData("xFree", "特記事項なし");
			report.putFieldData("xFurikomisaki", furikomi);
			
			
			//二ページ目(検収通知書兼作業完了確認書)
			report.createPage(1);
			report.putFieldData("xInfoAdrs", ksiAdrs);
			report.putFieldData("xInfoCName", ksiName);
			report.putFieldData("xInfoBusyo.1", ksiBusyo1);
			report.putFieldData("xInfoBusyo.2", ksiBusyo2);
			report.putFieldData("xInfoName_phone", ksiPhone);
			
			report.putFieldData("xYMD", xYMD);
			report.putFieldData("xTitle", "検収通知書兼作業完了確認書");
			report.putFieldData("xKensyuYMDMes", (String)null);
			report.putFieldData("xKensyuYMD.0", (String)null);
			report.putFieldData("xKensyuinMes",(String)null );
			report.putFieldData("xKensyuin", (String)null);
			
			report.putFieldData("xInfoRightAdrs", customerAdrs);
			report.putFieldData("xInfoRightCName", customerCName);
			report.putFieldData("xInfoRightBusyo.1", customerBusyo1);
			Field xInfoRightName_phone = report.getField("xInfoRightName_phone");
			xInfoRightName_phone.setIsEmbeddedFont(true);
			report.putFieldData(xInfoRightName_phone, customerName);

			report.putFieldData("xNonyusaki", ccName + "殿");
			report.putFieldData("xGochumonNo", "*");
			report.putFieldData("xToshaJyuchuNo", "J90C010");
			report.putFieldData("xHanbaijissekiNo", "001");
			report.putFieldData("xUchiwake.0", (String) uchiwake[0][0]);
			report.putFieldData("xYen.0", (Integer) uchiwake[0][1]);
			report.putFieldData("xTax", new Integer(xTax));
			report.putFieldData("xAmount1", new Integer(xAmount0));

			report.putFieldData("xFree", "特記事項なし");
			
			//三ページ目(納品書兼作業完了報告書)
			report.createPage(1);
			report.putFieldData("xInfoAdrs", customerAdrs);
			report.putFieldData("xInfoCName", customerCName);
			report.putFieldData("xInfoBusyo.1", customerBusyo1);
			report.putFieldData(xInfoName_phone, customerName);

			report.putFieldData("xOnchu", (String)null);
			report.putFieldData("xYMD", xYMD);
			report.putFieldData("xNo.0", (String)null);
			report.putFieldData("xNo.1", "03J90005");
			report.putFieldData("xTitle", "納品書兼作業完了報告書");	
			report.putFieldData("xCComName", ccName);
			report.putFieldData("xCode.0", (String)null);
			report.putFieldData("xCode.1", "5129");
			report.putFieldData("xRogo", rogo);
			
			report.putFieldData("xInfoRightAdrs", ksiAdrs);
			report.putFieldData("xInfoRightBusyo.1", ksiBusyo1);
			report.putFieldData("xInfoRightBusyo.2", ksiBusyo2);
			report.putFieldData("xInfoRightName_phone", ksiPhone);
			Field xMessage = report.getField("xMessage");
			xMessage.setQuadding(Quadding.LEFT_BOTTOM);
			report.putFieldData(xMessage, "下記のとおり納品・作業完了報告いたします。\n御査収の上検収通知書兼作業完了確認書を\nご返送くださいますようお願い申し上げます。");
			report.putFieldData("xBox.0", " ");
			report.putFieldData("xBox.1", " ");
			report.putFieldData("xBox.2", " ");
			report.putFieldData("xBox.3", " ");
			report.putFieldData("xNonyusaki", ccName + "殿");
			report.putFieldData("xGochumonNo", "*");
			report.putFieldData("xToshaJyuchuNo", "J90C010");
			report.putFieldData("xHanbaijissekiNo", "001");
			report.putFieldData("xUchiwake.0", (String) uchiwake[0][0]);
			report.putFieldData("xYen.0", (Integer) uchiwake[0][1]);
			report.putFieldData("xTax", new Integer(xTax));
			report.putFieldData("xAmount1", new Integer(xAmount0));
			report.putFieldData("xFree", "特記事項なし");
			//***********文書情報の設定*************************
			Info info = report.getDocument().getInfo();
			info.setAuthor("川鉄情報システム Web/OO部 川鉄太郎");
			info.setTitle("請求書");
			info.setCreator("請求書生成システム");
			info.setkeywords("請求書No.03J90005");
			info.setSubject("検収通知書兼作業完了確認書/納品書兼作業完了報告書");
			info.setCreationDate(Calendar.getInstance());
			info.setModDate(Calendar.getInstance());
			report.close();
		} finally {
			fout.close();
		}
	}
}