화면에서 프린트 기능을 구현했는데 글자들은 잘 나오지만 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...
-
화면에서 프린트 기능을 구현했는데 글자들은 잘 나오지만 CSS가 안먹는 경우가 간혹 발생했다. 마크업된 CSS를 불러오지 못해 발생하는 문제로 판단했고 약간의 트릭으로 해결할 수 있었다. 아래는 구현된 화면이다. 이 화면을 출력하고자 다...
-
요즘같이 디스크 용량 걱정이 없는 세상에서는 MSSQL Shrink를 볼 일이 없을 것 같았는데 얼마 전 회사에서 SHRINK를 할 일이 생겨서 진행했었다. 디스크 용량이 약 4테라이고 해당 디스크는 db file만 존재하여 딱히 지울 파일이 없었...
댓글 없음:
댓글 쓰기