IT/development

[JavaScript] htmlToPdf convert(feat. html2pdf)

์•Œ ์ˆ˜ ์—†๋Š” ์‚ฌ์šฉ์ž 2023. 8. 26.

๋ชฉ์ฐจ

javascript/jQuery ๊ธฐ๋ฐ˜

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>htmlToPdf_ex1</title>
</head>
<body>
<!-- pdf๋กœ ๋ณ€ํ™˜ํ•  element id ์„ค์ • -->
<div id="pdf-content">
    <h1>Hello, PDF!</h1>
    <p>This is an example of converting HTML to PDF using html2pdf.js</p>
</div>

<!-- jQuery cdn -->
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<!-- html2pdf cdn -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2pdf.js/0.10.1/html2pdf.bundle.min.js" integrity="sha512-GsLlZN/3F2ErC5ifS5QtgpiJtWd43JWSuIgh7mbzZ8zBps+dvLusV+eNQATqgA/HdeKFVgA5v3S/cIrLF7QnIg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script>

	$(function() {
		const element = document.getElementById('pdf-content');
		html2pdf(element);			

	});
</script>


	
</body>
</html>

javascript/Vue.js ๊ธฐ๋ฐ˜

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>htmlToPdf_ex1</title>
</head>
<body>
<!-- pdf๋กœ ๋ณ€ํ™˜ํ•  element id ์„ค์ • -->
<div id="pdf-content">
    <h1>Hello, PDF!</h1>
    <p>This is an example of converting HTML to PDF using html2pdf.js</p>
    <!-- ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ pdfConvert()์—์„œ pdf ๋ณ€ํ™˜ ์ฒ˜๋ฆฌ -->
    <button type="button" @click.prevent="pdfConvert">convert</button>
</div>	
	
<!--vue.js ์ถ”๊ฐ€-->
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
<!-- html2pdf ์ถ”๊ฐ€ -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2pdf.js/0.10.1/html2pdf.bundle.min.js" integrity="sha512-GsLlZN/3F2ErC5ifS5QtgpiJtWd43JWSuIgh7mbzZ8zBps+dvLusV+eNQATqgA/HdeKFVgA5v3S/cIrLF7QnIg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

<script>
	new Vue({	
		el: '#pdf-content',
		data: {},
		methods: {	
			pdfConvert() {	
				const pdfContent = document.getElementById('pdf-content');
			    html2pdf(pdfContent);					
			},				
		},
	});

</script>
	
</body>
</html>

์ˆจ๊น€ ํ•ญ๋ชฉ PDF ๋ณ€ํ™˜ ์˜ˆ์‹œ

์ˆจ๊น€ ํ•ญ๋ชฉ์„ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ์ž ์‹œ ๋ณด์ด๊ฒŒ ํ•ด์„œ PDF ๋ณ€ํ™˜ ํ›„ ๋‹ค์šด๋กœ๋“œ ํ›„ ๋‹ค์‹œ ์ˆจ๊น€์ฒ˜๋ฆฌ ํ•˜๋Š” ์˜ˆ์ œ

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>htmlToPdf_ex1</title>
<style type="text/css">
  .hidden {
    display: none;
  }
</style>
</head>
<body>

<div id="app">
    <div id="pdf-content" class="hidden">
      <h1>Hello, PDF!</h1>
      <p>This is an example of converting HTML to PDF using html2pdf.js</p>
    </div>
    <button type="button" @click.prevent="pdfConvert">convert</button>
</div>  
  
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2pdf.js/0.10.1/html2pdf.bundle.min.js" integrity="sha512-GsLlZN/3F2ErC5ifS5QtgpiJtWd43JWSuIgh7mbzZ8zBps+dvLusV+eNQATqgA/HdeKFVgA5v3S/cIrLF7QnIg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
  
<script>
  new Vue({ 
    el: '#app', 
    data: {},
    methods: {  
      // async์„ ๋ถ™์—ฌ์„œ promise๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ํ•˜๊ณ 
      async pdfConvert() {  
        const pdfContent = document.getElementById('pdf-content');
        pdfContent.style.display = 'block';

        const options = {
          margin: 10,
          filename: 'example.pdf',
          image: { type: 'jpeg', quality: 0.98 },
          html2canvas: { scale: 2 },
          jsPDF: { unit: 'mm', format: 'a4', orientation: 'portrait' }
        };
	    //html2pdf() ์ž‘์—…์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ๋‹ค์Œ ์ฝ”๋“œ ์‹คํ–‰ ์ž ์‹œ ๋ฉˆ์ถค(pdf ๋ณ€ํ™˜ ์ด๋ฃจ์–ด์ง„ ๋‹ค์Œ์— ๋‹ค์Œ์ฝ”๋“œ ์‹คํ–‰) 		
        await html2pdf().from(pdfContent).set(options).save();
        pdfContent.style.display = 'none';
          
      },        
    },
  });

</script>
  
</body>
</html>

๊ฒฐ๊ณผ

pdf๋กœ ๋ณ€ํ™˜ํ•œ html

์œ„์ฝ”๋“œ ์—๋””ํ„ฐ์— ๋ถ™์—ฌ ๋„ฃ๊ณ  ์‹คํ–‰ํ•˜๋ฉด pdf ๋‹ค์šด๋กœ๋“œ ์ฐฝ ํ‘œ์‹œ๋จ

reference: https://github.com/eKoopmans/html2pdf.js

 

GitHub - eKoopmans/html2pdf.js: Client-side HTML-to-PDF rendering using pure JS.

Client-side HTML-to-PDF rendering using pure JS. Contribute to eKoopmans/html2pdf.js development by creating an account on GitHub.

github.com

์ด๊ฑด ํ™”๋ฉด ์บก์ฒ˜ ์šฉ๋„์ด๊ณ  ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌํ•  ๊ฒฝ์šฐ์—” ์„œ๋ฒ„๋‹จ์—์„œ PDF๋ฅผ ๋งŒ๋“œ๋Š” ๊ฑธ ๊ถŒ์žฅํ•จ

์•„๋ž˜ ๋งํฌ์˜ ์˜์กด์„ฑ(gradle), serviceImpl ๋ถ€๋ถ„์˜ convertHtmlToPdf() ๋ถ€๋ถ„ ์ฐธ์กฐ

 

[springBoot] ๊ธ‰์—ฌ๋ช…์„ธ์„œ ๋ฉ”์ผ๋ฐœ์†ก ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ 2.(feat. back-end)

๋ชฉ์ฐจ ๊ธ‰์—ฌ๋ช…์„ธ์„œ ๋ฉ”์ผ๋ฐœ์†ก ๊ธฐ๋Šฅ ํ”„๋ก ํŠธ๋‹จ [Vue.js] ๊ธ‰์—ฌ๋ช…์„ธ์„œ ๋ฉ”์ผ๋ฐœ์†ก ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ 1.(feat. frontend) ๋ชฉ์ฐจ ๊ธ‰์—ฌ๋ช…์„ธ์„œ ๋ฐœ์†ก ํ™”๋ฉด(html) ํ”„๋กœ์ ํŠธ ์†Œ์Šค์—์„œ ํŽธ์ง‘ํ•ด์„œ ๊ฐ€์ ธ์˜จ ๊ฒƒ์ด๋ฏ€๋กœ class, ๋””์ž์ธ ๋“ฑ์€

yaga.tistory.com

๊ฐœ์ธ ์Šคํ„ฐ๋”” ๊ธฐ๋ก์„ ๋ฉ”๋ชจํ•˜๋Š” ๊ณต๊ฐ„์ด๋ผ ํ‹€๋ฆฐ์ ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ‹€๋ฆฐ ์  ์žˆ์„ ๊ฒฝ์šฐ ๋Œ“๊ธ€ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๋Œ“๊ธ€