Programming/Web

[Web] window.print() 로 원하는 영역 인쇄하기.

Fimtrus 2014. 6. 19. 10:47

window.print 함수를 사용하여 인쇄할 때의 영역은 

document.body 의 innerHTML이 잡히게 된다.

흔히 많이 사용하는 것중에 하나로,

원하는 영역의 html을 body에 넣어서 인쇄하는 방법이다.

하지만 single page 기반이나, jsp를 사용하지 않는 순수한 html의 경우

이방법을 사용하였을 때, 페이지가 거침없이 깨지는 경우가 대부분이다.

그래서 새창을 통해 인쇄하는 방법을 사용한다.


먼저 팝업 윈도우하나를 선언한다.

이때 새창이 생기게 되고, 정상적으로 열렸다면 popupWindow에는

새창에 대한 window 객체가 들어오게 된다. 팝업 차단으로 인해 열리지 않았을 경우

popupWindow 에는 undefined가 리턴되게 된다.



var popupWindow = window.open("", "_blank" );


대부분 개발자들은 jquery를 사용한다.(아마도??)

그 중에 jquery ui를 쓰는 사람도 적지 않다.

그러면 당연히 새창에서도 화면 구성에 필요한 js, css 등

plugin 들을 importing 해줘야 정상적으로 화면이 뜰 것이다.

그래서 아래의 코드로 헤더를 추가해준다.

- write 함수의 경우 document 객체에 직접 html을 추가해주는 역할을 한다.

- $('head')를 통해 헤더 객체를 얻고, html 함수를 사용하여 모든 헤더정보를 불러온다.



popupWindow.document.write( "<헤드태그>"); //head 제대로 쓰니까..티스토리 에러가...
popupWindow.document.write( $('head').html() );
popupWindow.document.write( '<헤드태그 닫기>' ); 


헤더를 추가한 후, 실제 표시될 컨텐츠를 추가해주면

새창에 원하는 컨텐츠가 추가되게 된다.


var $table = $("화면에 표시할 컨텐츠");

popupWindow.document.write( '<바디태그>' );
popupWindow.document.write( '
' ); popupWindow.document.write( $table.html() ); popupWindow.document.write( '
<바디태그 닫기>' );


컨텐츠 추가 완료 후 document를 close 시킨 후(반드시 close 함수를 호출해야한다)

새 창에서 print 함수를 호출해주면 인쇄창이 뜬다.


popupWindow.document.close();

//popupWindow 의 print 이다. 가끔 document.print 를 치시는 분들이..
popupWindow.print();


위의 코드들은 크롬 기반에서 테스트 하였으며, 익스플로러의 경우 정상적으로 동작하지 않을 수 있다.