์๋ ํ์ธ์ -
๋ฆฌํด์ด ์๋ ํ ์คํธ๋ฅผ ์ ๋ ฅํ๋ฉด ์คํฌ๋ฆฐ์ท์ ๋ฆฌํด์ด ํฌํจ๋์ง ์์ต๋๋ค[๋จ์ง ์บ๋ฆฌ์ง ๋ฆฌํด์ด ์๋ ๋ฌธ์์ด์์ ์ถ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค]. ๋๋ ๋ช ๋ฌ ์ ์ ์ด ์ฝ๋๋ฅผ ๊ฐ์ ธ์์ต๋๋ค. ํด๊ฒฐ๋์๋์ ์๋๋ฉด ์ฌ์ ํ ๋ฌธ์ ์ธ๊ฐ์?
๊ทธ๊ฒ์ ์ฌ์ ํ โโ๋ฌธ์ ์
๋๋ค. input
๋๋ textarea
๋ ์ ํํ๊ฒ ํ
์คํธ๋ฅผ ๋ฐฐ์นํ๋ ํจ์น๋ ์์ต๋๋ค. Range
ํ
์คํธ๋ฅผ ์์ฑํ๊ณ ์์น๋ฅผ ์ฐพ์์ผ ํ๊ฑฐ๋(๋ ์ ํํ ์๋ฃจ์
) ์ ์ค์ ์ค์ ์ ์ค๋ก ๋ณํํ๋ ๊ฒ์ผ๋ฅธ ์๋ฃจ์
์ด ํ์ํฉ๋๋ค.
์ด ๋ฌธ์ ๋ https://github.com/niklasvh/html2canvas/blob/master/src/Parse.js#L717์์ ๋ถ๋ช ํฉ๋๋ค.
๊ฐ์ฌํฉ๋๋ค. ๊ฒ์ผ๋ฅธ ์๋ฃจ์ ์๋ ์ด๋ค ๊ฒ์ด ์๋ฐ๋ฉ๋๊น? ์ฝ๋ ์์ ์ ๋ํด ์์ธํ ์ดํด๋ณด์ง ์์์ผ๋ฏ๋ก ์ด๊ฒ์ด ์ด๋ฆฌ์์ ์ง๋ฌธ์ด๋ผ๋ฉด ์ฉ์ํด ์ฃผ์ญ์์ค. ๋์ค ๋ฌธ์ /n/r์ createTextNode()์ ์ ๋ฌํ ์ ์๋ ์ ๋์ฝ๋ ์ค ๋ฐ๊ฟ ๋ฌธ์๋ก ๋ณํํ๋ ค๊ณ ์๋ํ์ง๋ง ์ฐจ์ด๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์๋ง๋ ๊ฐ ๋ผ์ธ์ ์์น๋ฅผ โโ์ธก์ ํ๊ณ ๊ทธ์ ๋ฐ๋ผ ๋ ๋๋งํด์ผ ํ ๊ฒ์ ๋๋ค.
์ฌ๊ธฐ์์ ํด๊ฒฐ์ฑ
์ ์ฐพ์์ต๋๋ค. http://stackoverflow.com/questions/22317823/html2canvas-remove-multiple-spaces-and-line-break
<div contenteditable="true"></div>
๋ฅผ ์ฌ์ฉํ์ฌ textarea
๋ฅผ ๋์ฒดํฉ๋๋ค.
๊ทธ๋ฌ๋ ๋๋ angular๋ฅผ ์ฌ์ฉํ๊ณ ng-model
๋ฌธ์ ๋ฅผ ์ฐพ์์ผ ํฉ๋๋ค.
UPD
`div'์์ ng-model
์ฌ์ฉ์ ๋ํ ํด๊ฒฐ์ฑ
์ ์ฐพ์์ต๋๋ค. http://mehrantm.blogspot.com/2013/10/how-make-two-way-binding-to-your.html
๋๊ตฐ๊ฐ๋ฅผ ๋์ธ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค~
์๋ง๋ ์ฐ๋ฆฌ๋ html2canvas๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ textarea๋ฅผ div๋ก ๋ฐ๊ฟ ์ ์์๊น์? ๊ทธ ํ์ div๋ฅผ ๋ค์ ๋ณ๊ฒฝํ์ญ์์ค.
์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
$('textarea').each(function() {
if(!$(this).hasClass('d-none')){
$(this).replaceWith("<div contenteditable=\"true\">"+$(this).html()+"</div>")
}
});
html2canvas๋ฅผ ํธ์ถํ๊ธฐ ์ ์ ํจ์๋ฅผ ๋ถ์ฌ๋ฃ์ผ๋ฉด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ฉ๋๋ค. :)
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์๋ง๋ ์ฐ๋ฆฌ๋ html2canvas๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ textarea๋ฅผ div๋ก ๋ฐ๊ฟ ์ ์์๊น์? ๊ทธ ํ์ div๋ฅผ ๋ค์ ๋ณ๊ฒฝํ์ญ์์ค.