html2canvas์ ์ ๋ฌํ๊ธฐ ์ ์ HTMLElement์์ element.cloneNode(true) ๋๋ angular.copy(element)๋ฅผ ์ฌ์ฉํ๋ฉด ์ด ์ค๋ฅ๊ฐ ๋ฐํ๋ฉ๋๋ค.
html2canvas: ๋ณต์ ๋ ๋ฌธ์์์ DIV๋ฅผ ์ฐพ๋ ๋์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.
์กํ์ง ์์(์ฝ์) ๋ณต์ ๋ ๋ฌธ์์์ DIV๋ฅผ ์ฐพ๋ ๋์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.
์บ๋ฒ์ค๋ฅผ ๋ก์ปฌ ์ ์ฅ์์ ์ ์ฅํ๊ณ React.js๋ฅผ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ํ์ด์ง์ ์ฐ๊ฒฐํ๋ ค๊ณ ํ ๋๋ ๋์ผํ ๋ฌธ์
<Link to="/system">
<button className="submitButton" onClick={this.captureMap} >SUBMIT </button>
</Link>
captureMap(){
html2canvas(document.querySelector(".mapboxgl-canvas")).then(canvas => {
// document.body.appendChild(canvas);
var image = canvas;
if(typeof localStorage !== "undefined"){
localStorage.setItem('mapImg',image.toDataURL());
}
});
}
๊ฐ์ ๋ฌธ์ ์ ์ง๋ฉด
const mainDom = document.createElement('div');
mainDom.appendChild(domElem[0].cloneNode(true)); // domElem์ ์ผ๋ถ dom ๊ฐ์ฒด์
๋๋ค.
mainDom์ html2canvas์ ์ ๋ฌํ๋ฉด ์๋ ์ค๋ฅ๊ฐ ํ์๋ฉ๋๋ค.
html2canvas: ๋ณต์ ๋ ๋ฌธ์์์ DIV๋ฅผ ์ฐพ๋ ๋์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.
demo.html#/Demo/ Widget:1 ์กํ์ง ์์(์ฝ์) ๋ณต์ ๋ ๋ฌธ์์์ DIV๋ฅผ ์ฐพ๋ ๋์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.
@HarishSonar jsfiddle ์์ ๋ฌธ์ ๋ฅผ ๋ณต์ ํ ์ ์์ต๋๊น?
์ด์ ํด๊ฒฐ๋์์ต๋๋ค.
dom์ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ฒด๋ก ์ฌ์ฉํ ์ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ ๋๋ง์ด ํ์ํฉ๋๋ค.
์ถ๊ฐ document.getElementsByTagName('BODY')[0].append(mainDom); ๋ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
html2canvas๊ฐ ์ฒ๋ฆฌ๋๋ฉด mainDom ์ ๊ฑฐ๋ฅผ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
๋ฏธ๋์ ๋ฐฉ๋ฌธ์๋ฅผ ์ํด ์ ๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
๋๋ DOM ๋
ธ๋๋ฅผ ๋ณต์ ํ์ฌ document.body
์ ์ฒซ ๋ฒ์งธ ์์์ผ๋ก ์ฝ์
ํ๊ณ CSS ์คํ์ผ position: absolute; top: -16384px; width: ${originalElementWidth}
์ฌ์ฉํ์ฌ ๋๋ด์์ต๋๋ค. ์ด๊ฒ์ ์คํฌ๋ฆฐ์ท์ผ๋ก ์บก์ฒํ๊ธฐ ์ ์ DOM ๋
ธ๋๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ ๊ฒฝ์ฐ์ ์ ์ฉํฉ๋๋ค.
๋ํ @niklasvh , ์ฌ์ ํ ์ดํด๋ณด๊ณ ์ถ๋ค๋ฉด jsfiddle์ด ์์ต๋๋ค. https://jsfiddle.net/bLwya8sf/1/
์๋
ํ์ธ์, ์ ๋์ด ๋ฌธ์ ๋ฅผ ๋ง๋ฌ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ html2canvas ํจ์๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ฉด ๋ด ํ๋ก์ ํธ์ ๋ชจ๋ ์์ฒญ์ด ์ ์ก๋ฉ๋๋ค. ํด๊ฒฐ์ฑ
์ ์๋ ค์ฃผ์๊ฒ ์ต๋๊น? ์ ๋ง ๊ฐ์ฌํฉ๋๋ค. ์ด๊ฒ์ ๋ด ์ฝ๋์
๋๋ค.
๊ณต๊ฐ ๋ค์ดBtn(){
var targetDom = document.querySelector('#Box');
var copyDom = targetDom.cloneNode(true);
document.body.appendChild(copyDom);
html2canvas(copyDom).then(์บ๋ฒ์ค => {
var imgData = ์บ๋ฒ์ค.toDataURL('์ด๋ฏธ์ง/jpeg');
var img = ์๋ก์ด ์ด๋ฏธ์ง();
img.src = imgData;
img.onload = ํจ์() {
pdf.addImage(imgData, 'jpeg', 0, 0, this.width * 0.225, this.height * 0.225);
pdf.save('pdf_2.pdf');
};
copyDom.remove();
});
๋์ผํ ๋ฌธ์ : ์ด ๋ฌธ์ ๋ฅผ ํผํ๊ธฐ ์ํด SVG๋ฅผ div๋ก ๋ํํด์ผ ํ์ต๋๋ค...
๋์ผํ ๋ฌธ์ : ์ด ๋ฌธ์ ๋ฅผ ํผํ๊ธฐ ์ํด SVG๋ฅผ div๋ก ๋ํํด์ผ ํ์ต๋๋ค...
์ด๋ป๊ฒ ํ๋ฉด ์ข์๊น?
์ด์ ํด๊ฒฐ๋์์ต๋๋ค.
dom์ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ฒด๋ก ์ฌ์ฉํ ์ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ ๋๋ง์ด ํ์ํฉ๋๋ค.
์ถ๊ฐ document.getElementsByTagName('BODY')[0].append(mainDom); ๋ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.html2canvas๊ฐ ์ฒ๋ฆฌ๋๋ฉด mainDom ์ ๊ฑฐ๋ฅผ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
์, ๋ ๋๋ง๋ ์์๋ก ์์ ํด์ผ ํ๋ฉฐ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ฒด๋ก dom์ ์ฌ์ฉํด์๋ ์ ๋ฉ๋๋ค.
๋์ผํ ๋ฌธ์ : ์ด ๋ฌธ์ ๋ฅผ ํผํ๊ธฐ ์ํด SVG๋ฅผ div๋ก ๋ํํด์ผ ํ์ต๋๋ค...
์ด๋ป๊ฒ ํ๋ฉด ์ข์๊น?
ํ์ ํ๋!
์ฌ๊ธฐ์์ ์๋ฅผ ๋ง๋ค์์ต๋๋ค.
๊ทธ๊ฒ์ ์ธํฐ๋ท ์ต์คํ๋ก๋ฌ 11์ ์ ์ธํ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ์ ์๋ ๋ค์ html2canvas ์ ๊ทผ ๋ฐฉ์์ ๋ชจ๋ฅด๋ ... ์ต์ข
PDF์์ ์๋ฌด๊ฒ๋ ๋ ๋๋งํ์ง ์๋ ๊ฒฝ์ฐ html2canvas ๋ฌธ์ ๋๋ ๊ทธ jsPDF์ ํ๋ ... ์ด๋ค ํํธ?
๊ฐ์ฌํฉ๋๋ค
์ด์ ํด๊ฒฐ๋์์ต๋๋ค.
dom์ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ฒด๋ก ์ฌ์ฉํ ์ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ ๋๋ง์ด ํ์ํฉ๋๋ค.
์ถ๊ฐ document.getElementsByTagName('BODY')[0].append(mainDom); ๋ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
html2canvas๊ฐ ์ฒ๋ฆฌ๋๋ฉด mainDom ์ ๊ฑฐ๋ฅผ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.์, ๋ ๋๋ง๋ ์์๋ก ์์ ํด์ผ ํ๋ฉฐ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ฒด๋ก dom์ ์ฌ์ฉํด์๋ ์ ๋ฉ๋๋ค.
์ onclone ์ฝ๋ฐฑ์ ์ฌ์ฉํ์ง ์์ต๋๊น? ์ด๋ ๊ฒ ํ๋ฉด ๋ ๋๋ง ์ ์ documentClone์ผ๋ก ์์
ํ๊ณ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ์คํฌ๋กค ๊ฐ๋ฅํ ํ
์ด๋ธ์ธ Gantt ์ฐจํธ๊ฐ ์๊ณ PDF์์ ์จ๊ฒจ์ง ํ์ ๋ณผ ์ ์๋ ์ ์ฒด ํ
์ด๋ธ์ ์ธ์ํ๋ ค๊ณ ํฉ๋๋ค.
html2canvas(document.body, {
onclone: function(documentClone) {
// target elements you want to change on the "documentClone" object
})
.then(function(canvas) {
// print canvas with e.g: jsPDF
});
};
๋๋ ์ฌ๊ธฐ ์์ IE11์ ํด๊ฒฐํ์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด์ ํด๊ฒฐ๋์์ต๋๋ค.
dom์ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ฒด๋ก ์ฌ์ฉํ ์ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ ๋๋ง์ด ํ์ํฉ๋๋ค.
์ถ๊ฐ document.getElementsByTagName('BODY')[0].append(mainDom); ๋ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
html2canvas๊ฐ ์ฒ๋ฆฌ๋๋ฉด mainDom ์ ๊ฑฐ๋ฅผ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.