본문 바로가기
programming/javascript

자바스크립트 프린트 지정 영역 출력하기 window.print() 사용

by 개코 - 개발과 코딩 2021. 10. 2.

웹페이지를 하다보면 사용자로 하여금 출력물을 프린트할 수 있도록 하면 좋다. 자바스크립트에서는 프린터로 출력하는 함수인 window.print() 함수를 제공한다. 단 웹페이지 전체가 프린트 영역이기 때문에 꼭 프린터 출력을 위한 영역만을 지정할 필요가 있다.

자바스크립트 프린트 지정 영역 출력하기
window.print() 사용

프린트 출력을 하기 위해 자바스크립트는 window.print() 함수를 제공한다.

이것은 웹페이지를 프린터를 이용해 출력할 수 있는 기능이다.

전체 페이지를 출력하는 것은 상관없지만 특정 영역을 지정하여 프린트출력을 할 경우 프린트 제어 이벤트를 설정해 주어야 한다.

이 때 사용하는 이벤트 핸들러는 window.onbeforeprint , window.onafterprint 이다.

웹페이지 프린터 출력하기

웹페이지를 프린트 출력을 하기 위해 window.print() 함수를 사용한다.

이것을 사용하면 현재 웹페이지의 내용을 프린터를 이용해 프린트 출력할 수 있다.

아래는 window.print() 함수를 사용하여 프린트 출력을 하는 코드이다.

<!DOCTYPE html>
<html>
    <body>

        <h1>직접 출력하기</h1>

        <p id="print">출력되는 영역</p>
        <p id="InText">두번째 문단</p>

        <button onclick="return window.print();">프린터 출력</button>
        
    </body>
</html>

프린터로 출력을 하기 위한 미리보기 화면이 먼저 나타나는 것을 알 수 있다.

하지만, 이것만 가지고는 사용자 측면에서 뭔가 부족하다.

특정 영역만 지정하여 출력하고 싶을 경우에는 이벤트 핸들러를 지정한다.

영역을 지정하여 출력하기

영역을 지정하여 프린트 출력을 하고자 할 때는 이벤트 핸들러를 추가한다.

아래는 간단한 코드이다.

window.onbeforeprint 이벤트와 window.onafterprint 이벤트 핸들러에 콜백함수를 지정한다.

해당 콜백함수에 지정된 작업을 수행하면 된다.

  • window.onbeforeprint
    - 프린트 출력 이전 이벤트 발생
    - 미리보기시 콜백함수 실행
  • window.onafterprint
    - 프린트 출력 이후 이벤트 발생
    - 미리보기 취소 후 또는 프린트 완료 후 실행
<!DOCTYPE html>
<html>
    <body>

        <h1>직접 출력하기</h1>

        <p id="print">출력되는 영역</p>
        <p id="InText">두번째 문단</p>

        <button onclick="return printPage();">영역 지정 프린터 출력</button>
        
        <script>
            
            var initBodyHtml;

            function printPage() {
                window.print();
            }

            function beforePrint() {
                initBodyHtml = document.body.innerHTML;
                document.body.innerHTML = document.getElementById('print').innerHTML;
            }
            function afterPrint() {
                document.body.innerHTML = initBodyHtml;
            }

            window.onbeforeprint = beforePrint;
            window.onafterprint = afterPrint;
            
        </script>
        
    </body>
</html>

지정된 영역만 출력할 수 있는 것을 알 수 있다.

실행되는 것 중 초기화 변수인 initBodyHtml 변수를 눈여겨 보도록 하자.

미리보기 화면이 나오면서 웹페이지 또한 지정된 영역으로 변환되는 것을 확인할 수 있다.

그렇기에 미리보기 화면이 나오기 전에 원본 웹페이지 내용을 초기화 변수에 먼저 넣는다.

이후 지정된 영역을 미리보기 한 후 초기화 변수에 있던 내용을 다시 웹페이지에 적용한다.

이것이 좀 단점이다.

직접 위의 코드를 실행하면 이해할 수 있다.

반응형

댓글