화면에서 프린트 기능을 구현했는데 글자들은 잘 나오지만 CSS가 안먹는 경우가 간혹 발생했다. 마크업된 CSS를 불러오지 못해 발생하는 문제로 판단했고 약간의 트릭으로 해결할 수 있었다.
아래는 구현된 화면이다.
이 화면을 출력하고자 다음처럼 코드를 구현했다.
코드는 다음과 같다.
function makeHtml(){
const obj = {html : ''};
let html =document.getElementById('tbl1').innerHTML;
obj.html = html;
return obj;
}
function reportPrint(param){
const setting = "width=900, height=850";
const objWin = window.open('', 'print', setting);
objWin.document.open();
objWin.document.write('<!DOCTYPE html>');
objWin.document.write('<head>');
objWin.document.write('<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0">');
objWin.document.write('<title>iframe</title>');
objWin.document.write('<link rel="stylesheet" href="<spring:eval expression="@environment.getProperty('web.jsp.cssPath')"/>/test.css"/>');
objWin.document.write('</head>');
objWin.document.write('<body id="contents_body" class="print">');
objWin.document.write('<div id="test_wrap">');
objWin.document.write('<div id="cont" class="test_wrap">');
objWin.document.write('<div></div>');
objWin.document.write('<div class="test_print_tab" style="margin-left: 30px; margin-right: 30px;>');
objWin.document.write(param.html);
objWin.document.write('</div></div></div></div></body></html>');
objWin.focus();
objWin.document.close();
objWin.print();
objWin.close();
}
function printClick() {
const completeParam = makeHtml();
reportPrint(completeParam);
};
하지만 이렇게 구현된 출력 기능은 간혹 css가 먹지 않아 다음과 같은 문제가 발생했다.
출력 Window가 로딩될 때 css가 작동하지 않은 상태로 html이 그려진 것이므로 css의 문제임은 분명해보였다. reportPrint(Param) 내부에서 objWin.print(); objWin.close();에 약간의 트릭을 주는 것으로 문제를 해결할 수 있었다.
setTimeout(function() {
objWin.print();
objWin.close();
}, 100);
위와 같이 print()와 close()에 타이머를 걸어줌으로써 css가 동작할 수 있도록 찰나(?)의 시간을 기다려주었고 다음과 같이 출력 Window가 잘 그려지게 되었다.
크롬에서 빈번히 발생하는 문제같고 stackoverflow에도 해당 문제를 겪는 사람이 꽤나 있었다.
피드 구독하기:
댓글 (Atom)
2022년 회고
올해는 블로그 포스팅을 열심히 못했다. 개인적으로 지금까지 경험했던 내용들을 리마인드하자는 마인드로 한해를 보낸 것 같다. 대부분의 시간을 MLOps pipeline 구축하고 대부분을 최적화 하는데 시간을 많이 할애했다. 결국에는 MLops도 데이...
-
MSSQL에는 저장프로시저가 아주 강력하고 문법 자체도 편하기(?) 때문에 토이프로젝트를 진행할 때 DB를 MSSQL을 주로 사용한다. 본인 노트북, 혹은 데스크탑에 MSSQL을 설치하고 SSMS로 접속을 하려고 할 때 서버이름에 loc...
-
MyBatis에서 #과 $의 차이에 대해서 포스팅을 하려고 한다. XML파일에 작성된 쿼리가 DB에서 수행될 때 Bind 변수(#)와 Literal 변수($)에 따라 DB 조회 시 성능차이를 야기할 수 있다. 먼저 Literal 변수로 작성한...
-
웹사이트에 대한민국 지도(시도, 시군구, 법정동)를 표현하고 각각 권역에 데이터를 입혀야하는 사람들에게 도움이 되기를 바라며 포스팅한다. 필자도 필요해서 집에서 며칠동안 연구해본 결과 전처리 과정이 꽤나 난감했다. 사실 데이터를 엮어서 표현하기 위...
댓글 없음:
댓글 쓰기