Category :
ColdFusion
,
Open Bluedragon
Comments :
댓글쓰기
Posted by
장창학 at 2:03 AM
국내의 홈페이지에서 가장 많이 쓰이는 오픈소스 게시판 시스템중 하나는 그누보드(http://www.sir.co.kr/)가 아닐까 싶습니다. 가벼우면서도 필요한 기능이 다 들어 있어 인기가 높습니다. 더욱이 라이센스가 GPL를 따르고 있어 제로보드와 다르게 카피라이트를 표기할 의무가 없어 다양한 프로젝트의 일부로 사용할 수 있습니다. 국내의 오픈소스들은 저작자가 대부분 그 자체로만 이용해 주길 바라는 마음이 강해서 인지 뭐든 자기가 배포한 오픈소스에 다 넣으려는 경향이 있고, 공개를 했다고 하더라도 소스의 수정, 다른 상용 프로젝트의 일부로서의 사용은 거의 대부분 금하고 있습니다.
그래서 저는 제로보드(익스프레스엔진 포함), 킴스보드와 같은 프로젝트들은 오픈소스라고 부르지 않습니다. 그냥 제작자가 써보라고 공개한 어정쩡한 라이센스라고 말하고 있습니다. 해외의 경우 대부분 공개한 소스자체로도 사용하기도 하지만 대부분 자신이 진행하는 프로젝트의 일부를 다른 오픈소스 프로젝트를 포함하여 개발하는 경우가 많습니다. 가령, 제로보드의 기본골격은 제로보드에서 배포하지만, 어떤 프로젝트 예를 들어 웹컨퍼런싱 툴의 일부분으로서 제로보드를 사용하는 개념입니다. 물론 제로보드도 모듈을 다른 개발자가 개발하여 공개하기도 하지만 제로보드라는 테두리안에서 배포되기 때문에 사실상 완전한 공개라 볼 수 없습니다. 반드시 저작권을 표기해야 하고, 또 그 모듈을 다른 프로젝트에 쓸 경우 원작자의 동의를 또 구해야 하는 절차가 있기 때문입니다.
암튼 각설하고, 오늘은 그누보드를 쓰고 있는 환경에서 본문 내용은 인쇄, 파일로 저장하기 위해 PDF를 생성하는 것에 대해 이야기 해 볼려고 합니다. 우선 웹호스팅 환경에서 그누보드를 사용한다면 오늘의 팁은 무의미할 수 있겠네요. 일단 PHP+MySQL만 구동되는 환경에서는 작동이 안되니까요? 왜냐하면, PDF를 생성하는 기본 프로그램이 ColdFusion이기 때문입니다. 사실 ColdFusion이 구동되는 환경이라면 그누보드와 같은 게시판을 아예 ColdFusion으로 개발해 버리면 되지만, 그렇지 못한 경우 PHP+MySQL이 구동되는 웹서버에 ColdFusion엔진만 설치해서 충분히 간단하게 ColdFusion을 사용할 수 있는 환경을 구축할 수 있기 때문입니다. 또, Cafe24의 JSP호스팅처럼 PHP와 Servlet엔진이 동시에 지원되는 환경에서도 가능합니다. Servlet위에서 구동되는 ColdFusion엔진을 쓰면 되니까요.
물론 PHP에서도 PDF를 생성할 수 있지만, 한글 폰트 문제, 성능문제, 복잡한 표나, HTML문서의 레이아웃을 그대로 PDF로 만들기는 매우 힘듭니다.하지만 ColdFusion은 iText, PD4ML, PDFBox 등의 Java PDF Library를 그대로 쓰기 때문에 몇줄의 ColdFusion코드로 쉽게 PDF를 만들 수 있습니다.
예제의 소스 코드는 다음과 같습니다. 그누보드의 글읽기 화면에서 게시판아이디인 bo_table과 게시물아이디인 wr_id를 Get으로 pdf.cfm파일로 전송하면 pdf.cfm파일 내부의 소스에서 이 두 데이터를 기초로 실제 그누보드의 게시판 테이블에 Query하여 해당 게시물의 작성자, 작성일, 이메일주소, 내용을 가져와 PDF로 생성하고 있습니다.
gnu_cfpdf.cfm - Download
<!--- Open BD의 DSN명을 입력합니다.--->
<cfset DSN = "">
<cfparam name="URL.bo_table" default = "">
<cfparam name="URL.wr_id" default = "">
<cfset BO_TABLE = PreserveSingleQuotes(#REReplace(#URL.bo_table#, "[[:punct:]]", "", "All")#)>
<cfset WR_ID = PreserveSingleQuotes(#REReplace(#URL.wr_id#, "[[:punct:]]", "", "All")#)>
<cfif #BO_TABLE# EQ "">
< script>alert('게시판이 선택되지 않았습니다.');</ script>
<cfabort>
</cfif>
<cfif #WR_ID# EQ "">
< script>alert('게시글 번호가 선택되지 않았습니다.');</ script>
<cfabort>
</cfif>
<cfcontent type="text/html; charset=utf-8">
<cfset setEncoding("URL", "utf-8")>
<cfquery datasource="#DSN#" name="getContents" debug="no">
SELECT wr_subject, wr_content, wr_name, wr_email, wr_datetime
FROM g4_write_#BO_TABLE#
WHERE wr_id=#WR_ID#
</cfquery>
<cfif getContents.RecordCount EQ 0>
< script>alert('게시물이 없습니다.');</ script>
<cfabort>
</cfif>
<cfdocument format="PDF" pageType="A4">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
< style type="text/css">
< !--
body {
width:100%;
font-family:Gulim, Dotum, Arial, Apple Gothic;
color:#333;
padding:0;
margin:0;
overflow:auto;
}
table, div, span {
font-family:Gulim, Dotum, Arial, Apple Gothic;
color:#333;
padding:0;
margin:0;
overflow:auto;
}
-- >
</ style>
</head>
<body>
<table width="100%" border="0" cellspacing="0" cellpadding="3">
<tr>
<td colspan="2" style="border-bottom: 1px solid #333;" mce_style="border-bottom: 1px solid #333;">
<cfoutput><h1><strong>#getContents.wr_subject#</strong></h1></cfoutput>
</td>
</tr>
<tr>
<td width="80"><strong>작성자</strong></td>
<td>
<cfoutput>#getContents.wr_name#</cfoutput> (<cfoutput>#getContents.wr_email#</cfoutput>)
</td>
</tr>
<tr>
<td><strong>작성일</strong></td>
<td>
<cfoutput>#DateFormat(getContents.wr_datetime, "yyyy년 mm월 dd일")#</cfoutput>
<cfoutput>#TimeFormat(getContents.wr_datetime, "HH시 MM분 SS초")#</cfoutput>
</td>
</tr>
</table>
<br />
<cfoutput>#getContents.wr_content#</cfoutput>
</body>
</html>
</cfdocument>

|
previous entries




ColdFusion (61)