그리드 인쇄 가이드
예시
템플릿 위치: /HTML5/COMPONENT/GRID/grid_print_basic
템플릿 파일
화면 스크립트
// 화면 로드 이벤트
function screen_on_load()
{
// 그리드 컬럼 정보 설정
this.setcolumninfo(this.grd_data_1, this.grd_column_1);
this.setcolumninfo(this.grd_data_2, this.grd_column_2);
// 결제선/출력 대상 그리드 모두 체크
this.grd_sign.setcheckedallrow(true);
this.grd_grid.setcheckedallrow(true);
}
// 페이지 로드 완료 이벤트
function web_on_pageload(objInst)
{
chk_pageload.setcheck(true);
}
// 리포트 초기화 버튼 이벤트
function btn_clear_on_mouseup(objInst)
{
chk_pageload.setcheck(false);
web.clear();
}
// 리포트 인쇄 버튼 이벤트
function btn_print_on_mouseup(objInst)
{
if (chk_pageload.getcheck(true)) {
web.callscriptfunc("onprintclick()");
}
else {
screen.alert("not loaded");
}
}
function btn_report_basic_on_mouseup(objInst)
{
var html_info, report_option, arr_line;
// 인쇄용 출력 옵션
report_option = {
page_break: true, // 여러개 그리드 출력시, 그리드별 페이지 분할 여부
line_number: true // 순번 컬럼 포함 여부
};
arr_line = [];
/////////////////////////////////////////////////////////////////////////////////
// 인쇄용 HTML 기본 상단부 시작
/////////////////////////////////////////////////////////////////////////////////
arr_line.push('<!doctype html>');
arr_line.push('<html lang="ko">');
arr_line.push('<head>');
arr_line.push('<meta charset="utf-8">');
arr_line.push('<meta name="viewport" content="width=device-width, initial-scale=1">');
arr_line.push('<meta http-equiv="cache-control" content="no-cache">');
arr_line.push('<meta http-equiv="pragma" content="no-cache">');
arr_line.push('<link rel="stylesheet" type="text/css" href="./xf5/html/report.css"/>');
arr_line.push('<link rel="shortcut icon" href="./xframe5.ico"/>');
arr_line.push('<style>');
// @page CSS 정보를 이용하여 스타일 지정
// arr_line.push('@page { size: landscape; }'); // 가로인쇄
// arr_line.push('@page { size: portrait; }'); // 세로인쇄
arr_line.push('</style>');
arr_line.push('<script type="text/javascript">');
arr_line.push('/* 인쇄 버튼 이벤트 */');
arr_line.push('function onprintclick() { window.print(); }');
arr_line.push('/* 닫기 버튼 이벤트 */');
arr_line.push('function opcloseclick() {');
arr_line.push(' if (window.confirm("닫으시겠습니까?")) { window.close(); }');
arr_line.push('}');
arr_line.push('/* BODY onload 이벤트 */');
arr_line.push('function onbodyload() {');
arr_line.push('}');
arr_line.push('</script>');
arr_line.push('<title>xFrame5 Report</title>');
arr_line.push('</head>');
arr_line.push('<body oncontextmenu="return false;" onload="onbodyload();">');
arr_line.push('<div class="xf_btnbox">');
arr_line.push(' <button class="xf_print no_print" onclick="onprintclick()">인쇄</button>');
arr_line.push(' <button class="xf_close no_print" onclick="opcloseclick()">닫기</button>');
arr_line.push('</div>');
arr_line.push('<div class="xf_report">');
/////////////////////////////////////////////////////////////////////////////////
// 인쇄용 HTML 기본 상단부 끝
/////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////
// 인쇄용 HTML 내용 생성 시작
/////////////////////////////////////////////////////////////////////////////////
html_info = grd_data_1.getprinthtml(report_option, null, null);
// 그리드 내용 HTML 표시 시작
arr_line.push(html_info.html_grid_start);
arr_line.push(html_info.html_colgroup_arr.join(''));
arr_line.push(html_info.html_thead_arr.join(''));
arr_line.push(html_info.html_tbody_arr.join(''));
arr_line.push(html_info.html_grid_end);
/////////////////////////////////////////////////////////////////////////////////
// 인쇄용 HTML 내용 생성 끝
/////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////
// 인쇄용 HTML 기본 하단부 시작
/////////////////////////////////////////////////////////////////////////////////
arr_line.push('</div>');
arr_line.push('</body>');
arr_line.push('</html>');
/////////////////////////////////////////////////////////////////////////////////
// 인쇄용 HTML 기본 하단부 끝
/////////////////////////////////////////////////////////////////////////////////
// 웹브라우저 컴포넌트 내부 HTML 내용 설정,
// 페이지 로드 완료시, on_pageload 이벤트 발생함
web.sethtml(arr_line.join(''));
}
// 리포트 생성 버튼 이벤트
function btn_report_on_mouseup(objInst)
{
var html_info, sign_name_arr, grid_info_arr, grid_info_count, grid_info_index, css_class_info, report_option;
chk_pageload.setcheck(false);
// 인쇄용 HTML 스타일 지정용 CSS 클래스 정의 오브젝트 설정
css_class_info = {};
css_class_info.table = 'xf_data';
css_class_info.thead = 'xf_data_head';
css_class_info.thead_tr = 'xf_data_head_tr';
css_class_info.th_linenumber = 'xf_th_linenumber';
css_class_info.th_column = 'xf_th_column';
css_class_info.tbody = 'xf_data_body';
css_class_info.tbody_tr = 'xf_data_body_tr';
css_class_info.td_linenumber = 'xf_td_linenumber';
css_class_info.td_column = 'xf_td_column';
// 인쇄용 출력 옵션
report_option = {
page_break: this.chk_pagebreak.getcheck(),
line_number: this.chk_linenumber.getcheck()
};
arr_line = [];
/////////////////////////////////////////////////////////////////////////////////
// 인쇄용 HTML 기본 상단부 시작
/////////////////////////////////////////////////////////////////////////////////
arr_line.push('<!doctype html>');
arr_line.push('<html lang="ko">');
arr_line.push('<head>');
arr_line.push('<meta charset="utf-8">');
arr_line.push('<meta name="viewport" content="width=device-width, initial-scale=1">');
arr_line.push('<meta http-equiv="cache-control" content="no-cache">');
arr_line.push('<meta http-equiv="pragma" content="no-cache">');
arr_line.push('<link rel="stylesheet" type="text/css" href="./xf5/html/report.css"/>');
arr_line.push('<link rel="shortcut icon" href="./xframe5.ico"/>');
arr_line.push('<style>');
arr_line.push('</style>');
arr_line.push('<script type="text/javascript">');
arr_line.push('/* 인쇄 버튼 이벤트 */');
arr_line.push('function onprintclick() { window.print(); }');
arr_line.push('/* 닫기 버튼 이벤트 */');
arr_line.push('function opcloseclick() {');
arr_line.push(' if (window.confirm("닫으시겠습니까?")) { window.close(); }');
arr_line.push('}');
arr_line.push('/* BODY onload 이벤트 */');
arr_line.push('function onbodyload() {');
arr_line.push('}');
arr_line.push('</script>');
arr_line.push('<title>xFrame5 Report</title>');
arr_line.push('</head>');
arr_line.push('<body oncontextmenu="return false;" onload="onbodyload();">');
arr_line.push('<div class="xf_btnbox">');
arr_line.push(' <button class="xf_print no_print" onclick="onprintclick()">인쇄</button>');
arr_line.push(' <button class="xf_close no_print" onclick="opcloseclick()">닫기</button>');
arr_line.push('</div>');
arr_line.push('<div class="xf_report">');
/////////////////////////////////////////////////////////////////////////////////
// 인쇄용 HTML 기본 상단부 끝
/////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////
// 인쇄용 HTML 내용 생성 시작
/////////////////////////////////////////////////////////////////////////////////
// 인쇄용 타이틀 표시용 HTML 생성 시작
arr_line.push('<div class="xf_title">' + fld_title.gettext() + '</div>');
// 인쇄용 타이틀 표시용 HTML 생성 끝
// 결재 대상 이름 배열을 구하고 HTML 생성 시작
sign_name_arr = this.getsignnamearr();
arr_line.push(this.reportsignhtml(sign_name_arr));
// 결재 대상 이름 배열을 구하고 HTML 생성 끝
// 인쇄용 대상 그리드 정보 배열 생성하고, HTML 생성 시작
grid_info_arr = this.getgridinfoarr();
grid_info_count = grid_info_arr.length;
for (grid_info_index = 0; grid_info_index < grid_info_count; grid_info_index++) {
// grid_info = { inst_grid: grd_data, column_index_arr: column_index_arr }
grid_info = grid_info_arr[grid_info_index];
// 그리드별 페이지 분할 옵션을 사용하는 경우, 두번째 그리드용 테이블에 인쇄 페이지 분할용 CSS 설정
if (grid_info_index > 0 && report_option && report_option.page_break) {
css_class_info.table = 'xf_data xf_data_newpage';
}
html_info = grid_info.inst_grid.getprinthtml(report_option, css_class_info, grid_info.column_index_arr);
// console.log(html_info);
// 그리드 내용 HTML 표시 시작
arr_line.push(html_info.html_grid_start);
arr_line.push(html_info.html_colgroup_arr.join(''));
arr_line.push(html_info.html_thead_arr.join(''));
arr_line.push(html_info.html_tbody_arr.join(''));
arr_line.push(html_info.html_grid_end);
// 그리드 내용 HTML 표시 끝
}
// 인쇄용 대상 그리드 정보 배열 생성하고, HTML 생성 끝
/////////////////////////////////////////////////////////////////////////////////
// 인쇄용 HTML 내용 생성 끝
/////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////
// 인쇄용 HTML 기본 하단부 시작
/////////////////////////////////////////////////////////////////////////////////
arr_line.push('</div>');
arr_line.push('</body>');
arr_line.push('</html>');
/////////////////////////////////////////////////////////////////////////////////
// 인쇄용 HTML 기본 하단부 끝
/////////////////////////////////////////////////////////////////////////////////
// 웹브라우저 컴포넌트 내부 HTML 내용 설정, 페이지 로드 완료시, on_pageload 이벤트 발생함
web.sethtml(arr_line.join(''));
}
// 출력 대상 그리드 정보 배열 리턴
function getgridinfoarr()
{
var row_count, row_index, grid_info_arr;
// 결재 대상 이름 배열 생성
grid_info_arr = [];
row_count = this.grd_grid.getrowcount();
for (row_index = 0; row_index < row_count; row_index++) {
if (this.grd_grid.ischeckedrow(row_index) == false) { continue; }
if (this.grd_grid.getitemtext(row_index, 1) == "grd_data_1") {
grid_info_arr.push(this.getgridinfo(this.grd_data_1, this.grd_column_1));
}
else {
grid_info_arr.push(this.getgridinfo(this.grd_data_2, this.grd_column_2));
}
}
return grid_info_arr;
}
// 출력 대상 그리드 정보 오브젝트 리턴
function getgridinfo(grd_data, grd_column)
{
var row_index, row_count, column_index_arr;
// 출력 대상 컬럼 인덱스 배열 생성
column_index_arr = [];
row_count = grd_column.getrowcount();
for(row_index = 0; row_index < row_count; row_index++) {
if (grd_column.ischeckedrow(row_index) == false) { continue; }
// column_index_arr.push(row_index);
column_index_arr.push(grd_column.getitemtext(row_index, 1));
}
return { inst_grid: grd_data, column_index_arr: column_index_arr }
}
// 그리드 컬럼 정보 설정
function setcolumninfo(grd_data, grd_column)
{
var row, column_count, column_index;
column_count = grd_data.getcolumncount();
for (column_index = 0; column_index < column_count; column_index++) {
row = grd_column.addrow();
grd_column.setitemtext(row, 0, grd_data.getheadertext(0, column_index));
grd_column.setitemtext(row, 1, column_index);
}
grd_column.setcheckedallrow(true);
}
// 결재 대상 이름 배열 리턴
function getsignnamearr(grd_data, grd_column)
{
var row_count, row_index, sign_name_arr;
// 결재 대상 이름 배열 생성
sign_name_arr = [];
row_count = this.grd_sign.getrowcount();
for (row_index = 0; row_index < row_count; row_index++) {
if (this.grd_sign.ischeckedrow(row_index) == false) { continue; }
sign_name_arr.push(this.grd_sign.getitemdisplaytext(row_index, 0));
}
return sign_name_arr;
}
function btnUpDown_grd_on_mouseup(objInst)
{
var inst_name, name_arr, is_up, grd_name;
inst_name = objInst.getname();
name_arr = inst_name.split("_");
if(name_arr[0] == "btnDn") { is_up = false; }
else { is_up = true;true }
name_arr.splice(0, 1);
grd_name = name_arr.join("_");
inst_grid = screen.getinstancebyname(grd_name);
this.gridrowupdown(inst_grid, is_up, true);
}
function gridrowupdown(inst_grd, is_up, is_select)
{
var src_row_index, dst_row_index;
src_row_index = inst_grd.getselectrow();
if (is_up) { dst_row_index = src_row_index - 1; }
else { dst_row_index = src_row_index + 1; }
if (inst_grd.moverow(src_row_index, dst_row_index, true)) {
if (is_select) { inst_grd.setselectrow(dst_row_index); }
}
}
// 인쇄용 결재선 생성
function reportsignhtml(sign_name_arr)
{
var html_sign_arr, html_head_arr, html_body_arr, i, sign_name_count;
html_sign_arr = [];
html_head_arr = [];
html_body_arr = [];
html_head_arr.push('<tr>');
html_body_arr.push('<tr>');
sign_name_count = sign_name_arr.length;
for (i = 0; i < sign_name_count; i++) {
html_head_arr.push('<th>');
html_head_arr.push(sign_name_arr[i]);
html_head_arr.push('</th>');
html_body_arr.push('<td></td>');
}
html_head_arr.push('</tr>');
html_body_arr.push('</tr>');
html_sign_arr.push('<table class="xf_sign">');
html_sign_arr.push('<thead class="xf_sign_head">');
html_sign_arr.push(html_head_arr.join(''));
html_sign_arr.push('</thead>');
html_sign_arr.push('<tbody class="xf_sign_body">');
html_sign_arr.push(html_body_arr.join(''));
html_sign_arr.push('</tbody>');
html_sign_arr.push('</table>');
return html_sign_arr.join('');
}