123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387 |
- package kr.co.udapsoft.common.util;
- import java.awt.Dimension;
- import java.awt.Insets;
- import java.io.BufferedReader;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.FileReader;
- import java.io.IOException;
- import java.io.StringReader;
- import java.net.MalformedURLException;
- import java.security.InvalidParameterException;
- import kr.co.hsnc.common.base.WAFLogger;
- import kr.co.hsnc.common.config.WAFConfig;
- import kr.co.hsnc.common.util.ValueObject;
- import org.zefer.pd4ml.PD4Constants;
- import org.zefer.pd4ml.PD4ML;
- import org.zefer.pd4ml.PD4PageMark;
- import crosscert.Hash;
- public class PDFMaker {
-
- private int htmlWidth = 750;
- private String header = null;
- private String footer = null;
- private String footerDefault = "*본 계약서는 상기업체 간에 전자서명법 등 관련법령에 근거하여 전자서명으로 체결한 전자계약서입니다.<br> 전자계약 진위여부는 협력업체포털시스템(http://partner.sgcenc.co.kr)에서 확인하실 수 있습니다.";
- private String cont_no = "";
- private String cont_chasu = "";
- private String file_seq = "";
- private String random_no = "";
- private String cont_userno = ""; // 사용자 계약번호
- public static void main(String[] args) throws InvalidParameterException, MalformedURLException, IOException{
- PDFMaker ed = new PDFMaker();
- //ed.generatePDF("file:///d:/CJ-GLS 택배대리점 계약서.html", new File("d:/CJ-GLS 택배대리점 계약서.pdf"), PD4Constants.A4);
-
- try {
- File f = new File("D:/Project4/pd4ml/html/", "엔지니어링 표준하도급계약서(전문).html");
- FileReader reader = new FileReader(f);
- BufferedReader buffer = new BufferedReader(reader);
-
- String html = "";
- String str = buffer.readLine();
-
- while(str!=null) {
- html += str;
- str = buffer.readLine();
- }
- buffer.close();
-
-
- StringBuffer documentContents = new StringBuffer();
- //documentContents.append("<html><body>");
- documentContents.append("<html><head><style type=\"text/css\">");
- documentContents.append("<!--");
- documentContents.append(" td { font-family: \"나눔고딕\",\"Arial\"; font-size: 12px; font-style: normal; letter-spacing:0; color: black;line-height:150%}");
- documentContents.append(" .lineTable { border-collapse:collapse; border:1 solid black }");
- documentContents.append(" .lineTable td { border:1 solid black }");
- documentContents.append(" .lineTable .noborder { border:0 }");
- documentContents.append("-->");
- documentContents.append("</style>");
- documentContents.append("</head><body>");
- documentContents.append(html);
- documentContents.append("</body></html>");
-
- ed.generatePDF(documentContents.toString(), "D:/Project4/pd4ml/html/", "엔지니어링 표준하도급계약서(전문).pdf");
- }
- catch(IOException e) {
- e.printStackTrace();
- }
- }
-
- public String getContNo() {
- return cont_no+"-"+cont_chasu+"-"+random_no;
- }
- public void setContNo(String cont_no, String cont_chasu, String random_no, String file_seq) {
- this.cont_no = cont_no;
- this.cont_chasu = cont_chasu;
- this.random_no = random_no;
- this.file_seq = file_seq;
- }
- private String getUserContNo() {
- return this.cont_userno;
- }
- public void setUserNo(String cont_userno) {
- this.cont_userno = cont_userno;
- }
-
- public String getHeader() {
- return header;
- }
- public void setHeader(String header) {
- this.header = header;
- }
- public String getFooter() {
- return footer;
- }
- public void setFooter(String footer) {
- this.footer = footer;
- }
-
- public int getHtmlWidth() {
- return htmlWidth;
- }
- public void setHtmlWidth(int htmlWidth) {
- this.htmlWidth = htmlWidth;
- }
-
- /**
- * PDF 문서 생성
- * @param url
- * @param outputPDFFile
- * @param format
- * @return
- */
- public boolean generatePDF(String url, File outputPDFFile, Dimension format) {
- FileOutputStream fos = null;
-
- try{
- fos = new FileOutputStream(outputPDFFile);
- PD4ML pd4ml = new PD4ML();
-
- PD4PageMark headerMark = new PD4PageMark();
- headerMark.setAreaHeight( 30 ); //header 영역 설정
-
- //header 데이터 셋팅
- if(header == null){
- if(!this.getUserContNo().equals(""))
- headerMark.setHtmlTemplate("<table border=0 width=100%><tr><td align=\"right\" valign=\"top\" ><font size=1 color=\"#5B5B5B\">* 계약번호: "+this.getUserContNo()+"</font></td></tr></table>");
- else
- headerMark.setHtmlTemplate("");
- }else{
- headerMark.setHtmlTemplate(header);
- }
- pd4ml.setPageHeader(headerMark);
-
- //footer 영역설정
- PD4PageMark footerMark = new PD4PageMark();
- footerMark.setAreaHeight( 40 );
-
- //footer 데이터 셋팅
- if(footer == null){
- footerMark.setHtmlTemplate("<table width='100%' height='35' border='0'><tr><td valign='bottom'><font size=1 color=\"#5B5B5B\">"+footerDefault+ " (관리번호:"+this.getContNo()+")</font></td></tr></table>");
- }else{
- footerMark.setHtmlTemplate("<span><font size=1 color=\"#5B5B5B\">"+ getFooter() +"</font></span>");
- }
- pd4ml.setPageFooter(footerMark);
-
- pd4ml.setPageInsets(new Insets(10,20,5,20)); //여백설정
- pd4ml.setHtmlWidth(getHtmlWidth()); //변환할 html의 width 정보
- pd4ml.setPageSize(PD4Constants.A4); //용지모양 A4설정
- //pd4ml.setPageSize(pd4ml.changePageOrientation(PD4Constants.A4)); //가로로 설정
- pd4ml.useTTF("java:fonts", true); //지정한 폰트 사용
- //pd4ml.setDefaultTTFs("Nanum Gothic", "Times New Roman", "Arial"); //default 폰트 설정
- pd4ml.setDefaultTTFs("Nanum Gothic", "Times New Roman", "Arial"); //default 폰트 설정
- pd4ml.enableDebugInfo();
- pd4ml.render(new java.net.URL(url), fos);
- return true;
- }catch(Exception e){
- e.printStackTrace();
- return false;
- }finally{
- if(fos != null)
- try {
- fos.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
-
-
- public ValueObject makeContPdf(ValueObject vo){
- ValueObject pdf = null;
-
- try{
- String fontSize = "12px";
- if(!vo.get("font_size").equals("")){
- fontSize = vo.get("font_size");
- }
-
- String pdfDir = WAFConfig.get("waf.repository.path")+"/cont/";
- String fileDir = vo.get("folder") +"/"+ vo.get("cont_no")+"/";
- String fileName = vo.get("cont_no")+"_"+vo.get("cont_chasu")+"_"+vo.get("file_seq")+".pdf";
- String path = pdfDir + fileDir+fileName;
-
- StringBuffer documentContents = new StringBuffer();
- //documentContents.append("<html><body>");
-
- documentContents.append("<html><head><style type=\"text/css\">");
- documentContents.append("<!--");
- documentContents.append(" td { font-family: \"굴림체\",\"Arial\"; font-size: "+fontSize+"; font-style: normal; letter-spacing:0; color: black;line-height:150%}");
- documentContents.append(" .lineTable { border-collapse:collapse; border:1 solid black }");
- documentContents.append(" .lineTable td { border:1 solid black }");
- documentContents.append(" .lineTable .noborder { border:0 }");
- documentContents.append(" .nText td { text-align:justify; vertical-align:top;}");
- documentContents.append("-->");
- documentContents.append("</style>");
- documentContents.append(" <meta http-equiv='Content-Type' content='application/xhtml+xml; charset=utf-8' />");
- documentContents.append("</head><body>");
- documentContents.append(vo.get("html"));
- documentContents.append("</body></html>");
- WAFLogger.debug("시작~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
- WAFLogger.debug(documentContents.toString());
- WAFLogger.debug("끝~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
- //WAFLogger.debug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
- //WAFLogger.debug(documentContents);
- //WAFLogger.debug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
- this.setContNo(vo.get("cont_no"), vo.get("cont_chasu"), vo.get("true_random"),vo.get("file_seq"));
- this.setUserNo(vo.get("cont_userno"));
- this.setHtmlWidth(750);
-
- //하도급 대금 지급 서식 작성은 footer와 header를 셋팅한다.
- if (vo.get("true_random").isEmpty()){
- this.setFooter("본 문서는 상기업체 간에 전자서명법등 관련법령에 근거하여 전자서명으로 체결한 전자문서입니다.");
- this.setHeader(" ");
- }
- boolean result = this.generatePDF(documentContents.toString(), pdfDir+fileDir, fileName);
- if(!result){
- return null;
- }
- WAFLogger.debug("Exception PDFMAKER : ");
-
- pdf = new ValueObject();
- pdf.set("file_path", fileDir);
- pdf.set("file_name", fileName);
- pdf.set("file_size", new File(path).length());
- pdf.set("file_ext", "pdf");
- pdf.set("file_hash", getHash(pdfDir+fileDir+fileName));
- return pdf;
- }catch(Exception e){
- WAFLogger.error("Exception PDFMAKER : " + e.getMessage());
- return null;
- }
- }
-
- /**
- * PDF 문서 생성
- * @param html
- * @param outputDir
- * @param outputFileName
- * @return
- */
- public boolean generatePDF(String html, String outputDir, String outputFileName) {
- FileOutputStream fos = null;
-
- try{
- WAFLogger.debug(outputDir+outputFileName);
- File outputDirFile = new File(outputDir);
- if(outputDirFile.exists() == false) outputDirFile.mkdirs();
- fos = new FileOutputStream(new File(outputDir+outputFileName));
-
- PD4ML pd4ml = new PD4ML();
-
- PD4PageMark headerMark = new PD4PageMark();
- headerMark.setAreaHeight( 30 ); //header 영역 설정
-
- //header 데이터 셋팅
- if(header == null){
- if(!this.getUserContNo().equals(""))
- headerMark.setHtmlTemplate("<table border=0 width=100%><tr><td align=\"right\" valign=\"top\" ><font size=1 color=\"#5B5B5B\">* 계약번호: "+this.getUserContNo()+"</font></td></tr></table>");
- else
- headerMark.setHtmlTemplate("");
- }else{
- headerMark.setHtmlTemplate(header);
- }
- pd4ml.setPageHeader(headerMark);
-
- //footer 영역설정
- PD4PageMark footerMark = new PD4PageMark();
- footerMark.setAreaHeight( 40 );
-
- //footer 데이터 셋팅
- if(footer == null){
- footerMark.setHtmlTemplate("<table width='100%' height='35' border='0'><tr><td valign='bottom'><font size=1 color=\"#5B5B5B\">"+footerDefault+ " (관리번호:"+this.getContNo()+")</font></td></tr></table>");
- }else{
- footerMark.setHtmlTemplate("<span><font size=1 color=\"#5B5B5B\">"+ getFooter() +"</font></span>");
- }
- pd4ml.setPageFooter(footerMark);
-
- pd4ml.setPageInsets(new Insets(10,20,5,20)); //여백설정
- pd4ml.setHtmlWidth(getHtmlWidth()); //변환할 html의 width 정보
- pd4ml.setPageSize(PD4Constants.A4); //용지모양 A4설정
- //pd4ml.setPageSize(pd4ml.changePageOrientation(PD4Constants.A4)); //가로로 설정
- pd4ml.useTTF("java:fonts", true); //지정한 폰트 사용
- pd4ml.setDefaultTTFs("Nanum Gothic", "Times New Roman", "Arial"); //default 폰트 설정
- pd4ml.enableDebugInfo();
-
- pd4ml.render(new StringReader(html), fos);
- return true;
- }catch(Exception e){
- e.printStackTrace();
- WAFLogger.error("Exception PDF : " + e.getMessage());
- return false;
- }finally{
- if(fos != null)
- try {
- fos.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
-
-
- /**
- * Hash 정보 가져오기
- * @param sOtherFullDir
- * @return
- * @throws ConfigurationException
- * @throws ConfigurationException
- * @throws IOException
- */
- public String getHash(String sOtherFullDir)
- {
- FileInputStream fis = null;
- String sHash = "";
- try {
- /*
- String sBaseDir = WAFConfig.get("waf.repository.path")+"/cont";
-
- if(sBaseDir.lastIndexOf("/") == sBaseDir.length() - 1)
- {
- sBaseDir = sBaseDir.substring(0,sBaseDir.length()-1);
- }
-
- if(sOtherFullDir.indexOf("/") == 0)
- {
- sOtherFullDir = sOtherFullDir.substring(1);
- }
- String sFullFilePath = sBaseDir + "/" + sOtherFullDir;
- */
-
- String sFullFilePath = sOtherFullDir;
- //sFullFilePath = StrUtil.replace(sFullFilePath,"\\",File.separator);
- //sFullFilePath = StrUtil.replace(sFullFilePath,"/",File.separator);
-
- WAFLogger.debug("getHash : " + sFullFilePath);
-
- fis = new FileInputStream(new File(sFullFilePath));
- int iFileLen = fis.available();
- byte[] b = new byte[iFileLen];
- int iRet = fis.read(b);
- Hash hash = new Hash();
-
- iRet = hash.GetHash(b, b.length);
- if(iRet == 0)
- {
- sHash = new String(hash.contentbuf);
- }else
- {
- sHash = "";
- }
- } catch (FileNotFoundException e) {
- WAFLogger.error("[ERROR "+this.getClass().getName() + ".getHash()] :" + e.toString());
- //throw new FileNotFoundException("[ERROR "+this.getClass().getName()+".getHash()] " + e.toString());
- } catch (IOException e) {
- WAFLogger.error("[ERROR "+this.getClass().getName() + ".getHash()] :" + e.toString());
- //throw new IOException("[ERROR "+this.getClass().getName()+".getHash()] " + e.toString());
- } finally
- {
- try {
- if(fis != null) fis.close();
- } catch (IOException e) {
- WAFLogger.error("[ERROR "+this.getClass().getName() + ".getHash()] :" + e.toString());
- //throw new IOException("[ERROR "+this.getClass().getName()+".getHash()] " + e.toString());
- }
- }
- return sHash;
- }
- }
|