본문 바로가기
front-end/script

[Javascript] html 화면 PDF다운로드 (jspdf.js, html2canvas.js)

by moonsiri 2021. 1. 18.
728x90
반응형

필요한 js파일 다운로드합니다.

  • jspdf : html, 이미지, canvas 객체를 pdf로 변환해주는 라이브러리
  • html2canvas : html 객체를 canvas로 변환해주는 라이브러리

 

jspdf.min.js
0.29MB
html2canvas.js
0.36MB

 

 

<html>
<head>
    <script src="./js/jquery.min.js"></script>
    <script src="./js/jspdf.min.js"></script>
    <script src="./js/html2canvas.js"></script>
</head>

<div id="pdfDiv">
    <!-- pdf 생성 영역 부분 -->
</div>

<button id="savePdfBtn">pdf다운로드</button>


<script>

$('#savePdfBtn').click(function() {
    html2canvas($('#pdfDiv')[0]).then(function(canvas) {
        // 캔버스를 이미지로 변환
        let imgData = canvas.toDataURL('image/png');

        let margin = 10; // 출력 페이지 여백설정
        let imgWidth = 210 - (10 * 2); // 이미지 가로 길이(mm) A4 기준
        let pageHeight = imgWidth * 1.414;  // 출력 페이지 세로 길이 계산 A4 기준
        let imgHeight = canvas.height * imgWidth / canvas.width;
        let heightLeft = imgHeight;

        let doc = new jsPDF('p', 'mm');
        let position = margin;

        // 첫 페이지 출력
        doc.addImage(imgData, 'PNG', margin, position, imgWidth, imgHeight);
        heightLeft -= pageHeight;

        // 한 페이지 이상일 경우 루프 돌면서 출력
        while (heightLeft >= 20) {
            position = heightLeft - imgHeight;
            doc.addImage(imgData, 'PNG', 0, position, imgWidth, imgHeight);
            doc.addPage();
            heightLeft -= pageHeight;
        }

        // 파일 저장
        doc.save('sample.pdf');
    });
});
</script>
</html>

 

 

 

[Reference]

blog.naver.com/myh814/221553091221

https://devheedoo.github.io/posts/save-html-to-pdf/

728x90
반응형

댓글