성장과정(dev)/Frontend(feat. Vue, Next.js)
[html2pdf] pdf 출력 시 쏠림현상, 한쪽 라인이 흐릿한 현상 해결하기
lowellSunny
2021. 2. 26. 16:46
html2pdf 구현 중 많은 문제를 직면했다. 그 중 알고는 있지만 외면하고 있던 문제들을 결국 지적받았다 ㅎㅎ
※ 두가지 문제
1. pdf left에 margin이 생김 (사실 편법으로 right에도 margin을 주는 방법으로 처리를 해놨는데 이로 인해 2번 문제가 생김)
2. pdf 왼쪽 라인들이 흐릿하게 보임
※ 원인
canvas로 변경 시 html의 Xscroll (가로 scoll)까지 인식하여 생기는 문제
※ 해결
편법인지 모르겠지만 scroll을 hide 처리 한 다음 pdf 다운로드 후 다시 scroll을 보이게 처리
기존 html2pdf 옵션 - scroll로 인해 밀리는만큼 margin을 넣어줘 임의로 처리
let opt = {
pagebreak: 'css',
margin: [0,0,0,4],
margin: 1,
filename: 'aml_report',
image: { type: 'jpg', quality: 0.98 },
html2canvas: { scrollY:0, scrollX:0, scale:1, dpi: 300, letterRendering: true, allowTaint: true
/*
ignoreElements : function( element ) {
if( element.id == "pdf-button-area" ) {
return true;
}
}*/
},
jsPDF: {orientation: 'portrait', unit: 'mm', format: 'a4', compressPDF: true},
};
수정 후 html2pdf 옵션 - margin을 없애고 scrollbar hide, show처리 삽입
var html = document.getElementsByTagName("html")[0];
html.classList.add( "hide-scrollbar" )
var element = document.getElementById('pdf-area');
let opt = {
pagebreak: 'css',
//margin: [0,0,0,4],
margin: 1,
filename: 'aml_report',
image: { type: 'jpg', quality: 0.98 },
html2canvas: { scrollY:0, scrollX:0, scale:1, dpi: 300, letterRendering: true, allowTaint: true
/*
ignoreElements : function( element ) {
if( element.id == "pdf-button-area" ) {
return true;
}
}*/
},
jsPDF: {orientation: 'portrait', unit: 'mm', format: 'a4', compressPDF: true},
};
//html2pdf(element).set(opt);
//var source = window.document.getElementById("exportPdf").innerHTML;
//var worker = html2pdf().set(opt).from(element).save();
html2pdf().set(opt).from(element).save()
.then( function() {
html.classList.remove( "hide-scrollbar" )
});
#pdf left margin remove
#html2pdf scroll
#html2pdf border
#html2pdf right left
#html2pdf margin right left