목차

그리드 인쇄 가이드

예시

템플릿 위치: /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('');
}