import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import wkc.pdf.PdfException;
import wkc.pdf.PdfGrayColor;
import wkc.pdf.PdfProperties;
import wkc.pdf.PdfRGBColor;
import wkc.pdf.Type1Font;
import wkc.pdf.tool.Field;
import wkc.pdf.tool.Quadding;
import wkc.pdf.tool.Report;
import wkc.pdf.tool.ReportException;
public class SampleServlet extends HttpServlet {
	private static final String SCRATCH_PATH = "out_pdf";
	private static final String FORM_PATH = "form";
	private static final String IMAGE_PATH = "image";
	private File scratchDirectory;
	private File wprlHomeDirectory;
	private File imageDirectory;
  private File formDirectory;
	public void init(ServletConfig config) throws ServletException{
	  super.init(config);
	  ServletContext context = config.getServletContext();
		scratchDirectory =new File(context.getRealPath(SCRATCH_PATH));
		context.log("scratchDirectory="+scratchDirectory); 
		String pdfname = config.getInitParameter("wprlib.template.pdf.filename");
		String datname = config.getInitParameter("wprlib.template.dat.filename");
		try {
      wprlHomeDirectory = new File(PdfProperties.getInstance().getProperty(PdfProperties.WKC_PDF_HOME));
      formDirectory = new File(wprlHomeDirectory,FORM_PATH);
      imageDirectory = new File(wprlHomeDirectory,IMAGE_PATH);
    } catch (IOException e) {
      context.log("",e);
    }
	}
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
	throws ServletException, IOException {
	  boolean done = false;
	  File tmpFile = null;  //出力先ファイル
	  FileOutputStream fout = null; //出力ファイルストリーム
	  Report report = null;
	  try{
	    // 出力先のファイルを作成します。
	    tmpFile = File.createTempFile("wprl",".pdf",scratchDirectory);
	    fout = new FileOutputStream(tmpFile);
	    File formFile = new File(formDirectory,"template.pdf");
	    File datFile = new File(formDirectory,"template.dat");
	    
	    /* ここから	
	     * CookBook / Chapter1-11 で紹介したサンプルプログラムと同等
	     * です。
	     */
	    report = new Report(formFile,datFile,fout);
      report.createPage(1);
      report.setDefaultFontSize(11);

      report.putFieldData("xFormType", "お客様控え");

      Field g0Field = report.getField("xGram.0");
      g0Field.setQuadding(Quadding.RIGHT);
      report.putFieldData(g0Field, "0");

      Field g1Field = report.getField("xGram.1");
      g1Field.setQuadding(Quadding.RIGHT);
      report.putFieldData(g1Field, "0");

      Field g2Field = report.getField("xGram.2");
      g2Field.setQuadding(Quadding.RIGHT);
      report.putFieldData(g2Field, "1");

      Field g3Field = report.getField("xGram.3");
      g3Field.setQuadding(Quadding.RIGHT);
      report.putFieldData(g3Field, "0");

      Field g4Field = report.getField("xGram.4");
      g4Field.setQuadding(Quadding.RIGHT);
      report.putFieldData(g4Field, "1");

      Field g5Field = report.getField("xGram.5");
      g5Field.setQuadding(Quadding.RIGHT);
      report.putFieldData(g5Field, "0");

      Field g6Field = report.getField("xGram.6");
      g6Field.setQuadding(Quadding.RIGHT);
      report.putFieldData(g6Field, "0");

      Field g7Field = report.getField("xGram.7");
      g7Field.setQuadding(Quadding.RIGHT);
      report.putFieldData(g7Field, "0");

      Field g8Field = report.getField("xGram.8");
      g8Field.setQuadding(Quadding.RIGHT);
      report.putFieldData(g8Field, "0");

      Field g9Field = report.getField("xGram.9");
      g9Field.setQuadding(Quadding.RIGHT);
      report.putFieldData(g9Field, "0");

      Field ac0Field = report.getField("xAmountC.0");
      ac0Field.setQuadding(Quadding.RIGHT);
      report.putFieldData(ac0Field, "0");

      Field ac1Field = report.getField("xAmountC.1");
      ac1Field.setQuadding(Quadding.RIGHT);
      report.putFieldData(ac1Field, "0");

      Field ac2Field = report.getField("xAmountC.2");
      ac2Field.setQuadding(Quadding.RIGHT);
      report.putFieldData(ac2Field, "490");

      Field ac3Field = report.getField("xAmountC.3");
      ac3Field.setQuadding(Quadding.RIGHT);
      report.putFieldData(ac3Field, "0");

      Field ac4Field = report.getField("xAmountC.4");
      ac4Field.setQuadding(Quadding.RIGHT);
      report.putFieldData(ac4Field, "1,350");

      Field ac5Field = report.getField("xAmountC.5");
      ac5Field.setQuadding(Quadding.RIGHT);
      report.putFieldData(ac5Field, "0");

      Field ac6Field = report.getField("xAmountC.6");
      ac6Field.setQuadding(Quadding.RIGHT);
      report.putFieldData(ac6Field, "0");

      Field ac7Field = report.getField("xAmountC.7");
      ac7Field.setQuadding(Quadding.RIGHT);
      report.putFieldData(ac7Field, "0");

      Field ac8Field = report.getField("xAmountC.8");
      ac8Field.setQuadding(Quadding.RIGHT);
      report.putFieldData(ac8Field, "0");

      Field ac9Field = report.getField("xAmountC.9");
      ac9Field.setQuadding(Quadding.RIGHT);
      report.putFieldData(ac9Field, "0");

      Field n0Field = report.getField("xNumber.0");
      n0Field.setQuadding(Quadding.RIGHT);
      report.putFieldData(n0Field, "0");

      Field n1Field = report.getField("xNumber.1");
      n1Field.setQuadding(Quadding.RIGHT);
      report.putFieldData(n1Field, "0");

      Field n2Field = report.getField("xNumber.2");
      n2Field.setQuadding(Quadding.RIGHT);
      report.putFieldData(n2Field, "0");

      Field n3Field = report.getField("xNumber.3");
      n3Field.setQuadding(Quadding.RIGHT);
      report.putFieldData(n3Field, "0");

      Field n4Field = report.getField("xNumber.4");
      n4Field.setQuadding(Quadding.RIGHT);
      report.putFieldData(n4Field, "0");

      Field n5Field = report.getField("xNumber.5");
      n5Field.setQuadding(Quadding.RIGHT);
      report.putFieldData(n5Field, "1");

      Field n6Field = report.getField("xNumber.6");
      n6Field.setQuadding(Quadding.RIGHT);
      report.putFieldData(n6Field, "0");

      Field n7Field = report.getField("xNumber.7");
      n7Field.setQuadding(Quadding.RIGHT);
      report.putFieldData(n7Field, "0");

      Field n8Field = report.getField("xNumber.8");
      n8Field.setQuadding(Quadding.RIGHT);
      report.putFieldData(n8Field, "0");

      Field aa0Field = report.getField("xAmountA.0");
      aa0Field.setQuadding(Quadding.RIGHT);
      report.putFieldData(aa0Field, "0");

      Field aa1Field = report.getField("xAmountA.1");
      aa1Field.setQuadding(Quadding.RIGHT);
      report.putFieldData(aa1Field, "0");

      Field aa2Field = report.getField("xAmountA.2");
      aa2Field.setQuadding(Quadding.RIGHT);
      report.putFieldData(aa2Field, "0");

      Field aa3Field = report.getField("xAmountA.3");
      aa3Field.setQuadding(Quadding.RIGHT);
      report.putFieldData(aa3Field, "0");

      Field aa4Field = report.getField("xAmountA.4");
      aa4Field.setQuadding(Quadding.RIGHT);
      report.putFieldData(aa4Field, "0");

      Field aa5Field = report.getField("xAmountA.5");
      aa5Field.setQuadding(Quadding.RIGHT);
      report.putFieldData(aa5Field, "1,700");

      Field aa6Field = report.getField("xAmountA.6");
      aa6Field.setQuadding(Quadding.RIGHT);
      report.putFieldData(aa6Field, "0");

      Field aa7Field = report.getField("xAmountA.7");
      aa7Field.setQuadding(Quadding.RIGHT);
      report.putFieldData(aa7Field, "0");

      Field aa8Field = report.getField("xAmountA.8");
      aa8Field.setQuadding(Quadding.RIGHT);
      report.putFieldData(aa8Field, "0");

      Field aamField = report.getField("xAllAmount");
      aamField.setQuadding(Quadding.RIGHT);
      aamField.setTextColor(PdfRGBColor.RED);
      report.putFieldData(aamField, "3,540");

      Field pm2Field = report.getField("xPayment.2");
      pm2Field.setFillColor(PdfGrayColor.BLACK);
      report.putFieldData(pm2Field, (String) null);

      Field cd0Field = report.getField("xCard.0");
      cd0Field.setFillColor(PdfGrayColor.BLACK);
      report.putFieldData(cd0Field, (String) null);

      Field cn0Field = report.getField("xCardNo.0");
      cn0Field.setQuadding(Quadding.RIGHT);
      report.putFieldData(cn0Field, "1234");

      Field cn1Field = report.getField("xCardNo.1");
      cn1Field.setQuadding(Quadding.RIGHT);
      report.putFieldData(cn1Field, "5678");

      Field cn2Field = report.getField("xCardNo.2");
      cn2Field.setQuadding(Quadding.RIGHT);
      report.putFieldData(cn2Field, "9123");

      Field cn3Field = report.getField("xCardNo.3");
      cn3Field.setQuadding(Quadding.RIGHT);
      report.putFieldData(cn3Field, "4567");

      Field ctyField = report.getField("xCardTermY");
      ctyField.setQuadding(Quadding.RIGHT);
      report.putFieldData(ctyField, "2008");

      Field ctmField = report.getField("xCardTermM");
      ctmField.setQuadding(Quadding.RIGHT);
      report.putFieldData(ctmField, "08");

      report.putFieldData("xCardName", "山田 太郎");

      Field sdField = report.getField("xSendDay.1");
      sdField.setFillColor(PdfGrayColor.BLACK);
      report.putFieldData(sdField, (String) null);

      Field stField = report.getField("xSendTime.2");
      stField.setFillColor(PdfGrayColor.BLACK);
      report.putFieldData(stField, (String) null);

      Field yearField = report.getField("xYear");
      yearField.setQuadding(Quadding.RIGHT);
      report.putFieldData(yearField, "2003");

      Field monthField = report.getField("xMonth");
      monthField.setQuadding(Quadding.RIGHT);
      report.putFieldData(monthField, "12");

      Field dayField = report.getField("xDay");
      dayField.setQuadding(Quadding.RIGHT);
      report.putFieldData(dayField, "29");

      Field ctnField = report.getField("xCustomerName");
      //ctnField.setFontName("MSGothic,Bold");
      report.putFieldData(ctnField, "山田 太郎");

      report.putFieldData("xCustomerNo", "1234567");

      Field postField = report.getField("xPostCode");
      postField.setFontSize(8);
      report.putFieldData(postField, "133-0061");

      report.putFieldData("xAddress", "東京都江東区南砂町5-7-21");

      Field phnField = report.getField("xPhoneNo");
      phnField.setFontName(Type1Font.COURIER);
      report.putFieldData(phnField, "03-1234-5678");

      Field freeField = report.getField("xFree");
      freeField.setOnMultiline(true);
      report.putFieldData(freeField, "上記電話番号でつながらない場合は下記番号におねがいします。\n 勤務先 \n  03-5555-5555");

      Field faxField = report.getField("xFax");
      faxField.setBorderStyle(Field.BORDER_STYLE_SOLID);
      faxField.setBorderColor(PdfGrayColor.BLACK);
      report.putFieldData(faxField, "FAX番号:03-4444-5555");

      report.close();
      report = null;	    
	    /* ここまで
	     * CookBook / Chapter1-11 で紹介したサンプルプログラムと同等
	     * です。
	     */
	    
	    done = true;
	  } catch (ReportException e) {
	    log("report error.",e);
    } catch (PdfException e) {
	    log("report error.",e);
    }finally{
	    if(report != null){
        try {
          report.close();
        } catch (ReportException e) {}
        report = null;
    	}
	    if(fout != null){
	      fout.close();
	    }
	  }
    /* レスポンスを組み立てます。
     * オーダフォーム(お客様控え)のリンクをクリック後、
     * ブラウザの別Windowを開き、PDFを表示します。
     */
	  response.setContentType("text/html;charset=UTF-8");
		PrintWriter writer = response.getWriter();
		writer.println("");
		writer.println("");
		
		writer.println("WebKCore PDFレポート デモ");
		writer.println("");
		writer.println("

オーダーフォーム出力結果

"); if(done){ String path = SCRATCH_PATH+"/"+tmpFile.getName(); writer.println("

"); writer.println("こちらのリンクをクリックし内容を確認してください >>"); //writer.println("オーダーフォーム(お客様控え)"); writer.println("オーダーフォーム(お客様控え)"); writer.println("

"); writer.println("
"); }else{ writer.println("

出力できませんでした。

"); } writer.println(" "); // 出力ストリームのクローズ writer.close(); } }