๋ด html ๋งํฌ์ ์ ์์๊ฐ ์ง์ ๋์ง ์์๊ฑฐ๋ ์์๊ฐ ์ง์ ๋ ๋ชฉ๋ก์ด ์๋ ๊ฒฝ์ฐ ๊ธ๋จธ๋ฆฌ ๊ธฐํธ๋ html2canvas์์ ๋ ๋๋ง๋์ง ์์ต๋๋ค. ์ด๊ฒ์ ์ค๋์ ๋ถํฐ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ์ง์๋๋ html์ ํ์ค ๊ธฐ๋ฅ์ด๊ธฐ ๋๋ฌธ์ ์๋นํ ์ค์ํ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์๋ฃจ์ ์ ์ด๋ก ์ ์ผ๋ก ์๋นํ ๋จ์ํด์ผ ํฉ๋๋ค(๋จ์ง ์). ๊ทธ๋ฌ๋ ์๋ฃจ์ ์ด ๋ฌด์์ด๋ ๊ฐ์ ์ด์์ ๋ชจ์์ ์ฌ์ฉ์ ์ ์ํ๊ธฐ ์ํด CSS๋ฅผ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. ๋งํ ๊ฒ๋ ์์ด ๋ชฉ๋ก ํญ๋ชฉ์ ๋ชฉ๋ก์ฒ๋ผ ๋ณด์ด์ง ์๋ ๊ฒ๋ค์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค(์๋ฅผ ๋ค์ด "Code", "Network" ๋ฑ์ด ์๋ github ํค๋๋ ul์ด๋ฏ๋ก ๋ชฉ๋ก ๋๋ฌธ์ ๋ถ๋ช ํ ๊ธ๋จธ๋ฆฌ ๊ธฐํธ๊ฐ ํ์ํ์ง ์์ต๋๋ค. ์คํ์ผ ์ ํ: ์์
์ด๊ฒ์ ๋ํ ์์์ด ์์ต๋๊น? ๋ด ์ฑ์ ์ด ๊ธฐ๋ฅ์ด ์ ๋ง ํ์ํฉ๋๋ค. ๋๊ตฌ๋ ์ง ์ด๊ฒ์ ๋ํ ์์ด๋์ด/ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ต๋๊น? ์๋๋ฉด ๋๊ตฐ๊ฐ ๊ทธ๊ฒ์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ ๋ณด๋ฅผ ์ค ์ ์์ต๋๊น?
์๋ํ์ง ์๋๋ค๋ ๊ฒ์ ์ฆ๋ช ํ๋ ๋ฐ์ด์ฌ๋ฆฐ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. http://jsfiddle.net/fYZ5h/
ํนํ ์ ๋ ฌ๋ ๋ชฉ๋ก์ ๊ฒฝ์ฐ ์ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ผ๋ฉด ํฉ๋๋ค.
ํธ์ง: ์ ๋ ฌ๋ ๋ชฉ๋ก์ ๋ํด ์ซ์๋ฅผ ๋ณด๋ ๋ฐ ๊ด์ฌ์ด ์๋ ์ฌ๋๋ค์ ์ํ ๊ฐ๋จํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์ด๊ฒ์ 'ol' ์์์์ 'list-style-position' CSS ์์ฑ์ 'inside'๋ก ์ค์ ํ๋ ํ ์๋ํฉ๋๋ค. ๋ํ 'list-style-type'์ ๋ค์ ์ ๊ท์๊ณผ ์ผ์นํด์ผ ํฉ๋๋ค.
/^(์ญ์ง์|์ญ์ง์ ์ ํ 0|์ ์ํ|์ ๋ผํด|์ ๋ก๋ง์|๋ฎ์ ์ํ|๋ฎ์ ๊ทธ๋ฆฌ์ค์ด|๋ฎ์ ๋ผํด|๋ฎ์ ๋ก๋ง์)$/i
...๋ ์ ์ฝ ์กฐ๊ฑด์ด ๋ชจ๋ ์ถฉ์กฑ๋๋ ํ ์ซ์๋ ์ ๋ ฌ๋ ๋ชฉ๋ก์ ๋ํด ์ฌ๋ฐ๋ฅด๊ฒ ๋ ๋๋ง๋ฉ๋๋ค. CSS๋ฅผ ์ฌ์ฉํ์ฌ ๋ชฉ๋ก์ ์์น๋ฅผ โโ์กฐ์ ํ์ฌ 'list-style-position: inside;'์ ์ํฅ์ ๋ณด์ํ ์ ์์ต๋๋ค. ๋ ์ด์์์ ์์ต๋๋ค.
list-style-type square์ ๋ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ง๋ค์์ต๋๋ค.
์๋ง๋ ๋ด ์๋ฃจ์ ์ด ๋์์ด ๋ ๊ฒ์ ๋๋ค.
ํ ๋ฆฌํ์คํธ: https://github.com/niklasvh/html2canvas/pull/417
์ ๋ ฌ๋์ง ์์ ๋ชฉ๋ก์์ ๊ธ๋จธ๋ฆฌ ๊ธฐํธ๋ฅผ ๋ ๋๋งํ๋ ๊ธฐ๋ฅ์ +1...
์ด๊ฒ์ ๋ํ ๋ด๊ฐ ์์ ํ๊ณ ์๋ ํ๋ก์ ํธ์ ๋งค์ฐ ๋์์ด ๋ ๊ฒ์ ๋๋ค. ๋ด ๋ชฉ๋ก์ ๋จ๋ฝ์ผ๋ก ๋ณํํ๊ณ ์ด์์ ๊ฐ์ง๋ก ๋ง๋ค์ด์ผ ํฉ๋๋ค.
๋ ๋ณต์กํ ๋ชฉ๋ก ์คํ์ผ์ ๋ฌด์ํ๊ณ ์์๊ฐ ์ง์ ๋์ง ์์ ๋ชฉ๋ก์ ๋ํด ๋์คํฌ/์ฌ๊ฐํ๋ง ๊ตฌํํ๋ ์์ ํด๊ฒฐ์ฑ ๋ ์ ์ฉํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. @adam-roth์ ์ ๊ทผ ๋ฐฉ์์ ์๋ํ์ง๋ง ๊ณง) . ๊ทธ๋ฐ ๋ค์ ๋ ๋ฉ์ง ๋ชฉ๋ก ์คํ์ผ์ ์ป์ ์ ์์ต๋๋ค ...
์ด๊ฒ์ ๋ชจ๋ ์ฌ๋์๊ฒ ํจ๊ณผ๊ฐ ์๋ ์๋ฃจ์ ์ ์๋์ง๋ง ์ฌ๊ธฐ์ ์ ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ฌ์ฉํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. Html2Canvas๋ ์์ฌ ํด๋์ค ์ ํ๊ธฐ๋ฅผ ์ ์ง์ํ๋ฏ๋ก :before ํํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ธ๋จธ๋ฆฌ ๊ธฐํธ์ ์ซ์๋ฅผ ๋ค์ ์ถ๊ฐํ์ต๋๋ค.
//์ด ์ฝ๋๋ SASS์ด์ง๋ง ์ผ๋ฐ CSS๋ก ์ ์์ฑํ ์ ์์ต๋๋ค.
//์ค์ฒฉ ๋ชฉ๋ก์ ํ์ฉํ๊ธฐ ์ํด ol, ul์ ์ค์ฒฉํ ์๋ ์์ต๋๋ค. ๋ค์ฌ์ฐ๊ธฐํ ์ ์ผ์ชฝ ์์น๋ฅผ ์ง์ ํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ์ด ๊ฒฝ์ฐ ๋ค์ฌ์ฐ๊ธฐ๋น 30px๋ง ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค.
#whatever-element-html2canvas-is-run-on {
ol, ul {
li {
&:before {
position: absolute; //This way is doesn't effect sizing
left: 30px; //Whatever indent level you need to match the bullet placement
z-index: 1000; //This may not be necessary for you
}
}
}
ol {
li {
&:before {
content: attr(data-number); //This along with the javascrip below will make ordered lists work.
}
}
}
}
๊ทธ๋ฐ ๋ค์ ํํฐ๋ฅผ ํตํด ๋ ๋๋งํ๋ ค๋ html์ ์คํํฉ๋๋ค(์ ๊ฒฝ์ฐ์๋ ๊ฐ๋ ํํฐ์ด์ง๋ง ๋ชจ๋ Javascript๊ฐ ์๋ํจ).
var filtered = $("<div>" + data + "</div");
//Add Numbers To Each of The OL Li's
filtered.find('ol')
//Loop through each ol
.each(function(i, el){
console.log('i', i);
$(el).children('li')
//Loop through each of it's children and give it a data attribute for what number it should have
.each(function(ci, cel){
console.log('ci', ci);
$(cel).attr('data-number', ci + 1);
});
});
์ด์ ์ ๊ฒ์ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ ์ด์ ํ์ฌ ๋ฒ์ ์ html2canvas์์ ์๋ํ์ง ์์ต๋๋ค. ์ด ๋ฌธ์ ์ ๋ํ ์๋ก์ด ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
http://jsfiddle.net/e70o3mj0/2/
...๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ 'ol'๊ณผ 'ul'์ div ์ปฌ๋ ์ ์ผ๋ก ๋ณํํฉ๋๋ค. html2canvas๊ฐ ์คํ๋ ํ์ ์์ ์ ์ทจ์ํ ์ ์์ต๋๋ค.
์ด๊ฒ์ด ๊ณ ๋ ค๋๊ณ ์๋์ง ๋๋ ์ด ๊ธฐ๋ฅ์ ์งํํ๋ ๋ฐ ๋์์ด ๋ ์ ์๋ ์ผ์ด ์๋์ง ๊ถ๊ธํฉ๋๋ค.
์ด๋ ์์ ์์ ๊ณ ๋ ค๋๊ณ ๊ตฌํ๋ ๊ฒ์ ๋๋ค. PR #486์ ๊ทธ๊ฒ์ ์ํด ๋ง๋ค์ด์ก๊ณ , ๋๋ ๊ทธ๊ฒ์ ๋ํด ์ฝ๊ฐ์ ํผ๋๋ฐฑ์ ์ฃผ์์ต๋๋ค. ์ผ๋จ ํด๊ฒฐ๋๋ฉด ๋ณํฉ๋ ์ ์์ต๋๋ค.
์ด๊ฒ์ด ๊ฐ๊น์ด ์ฅ๋์ html2canvas์์ ํด๊ฒฐ๋ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๊น?
์ฝ๋์์ "ul", "ol", "li"๋ฅผ ์ฐพ์์ง๋ง ์๋ฌด ๊ฒ๋ ์ฐพ์ง ๋ชปํ์ง๋ง li๋ ๋ค์ฌ์ฐ๊ธฐ๋์ด ์์ผ๋ฏ๋ก ์ด์ ๋ํ ๋ ผ๋ฆฌ๊ฐ ์์ด์ผ ํฉ๋๋ค. ์ฝ๋์์ ์ด๊ฒ์ด ์์นํ ์์น๋ฅผ ๊ฐ๋ฆฌํฌ ์ ์๋ ์ฌ๋์ด ์์ต๋๊น?
ํ์คํ ํดํน์ด์ง๋ง ์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ์ฌ PDF์์ ๊ธ๋จธ๋ฆฌ ๊ธฐํธ <ul>
๋ฅผ ์ง์ํ ์ ์์์ต๋๋ค.
HTML
~~~
~~~
์ ๊ฒ/CSS
~~~
list-style: none;
padding: 0;
}
margin: 0 0 0 35px;
list-style: none;
.bullet {
display: inline-block;
opacity: 0.85;
font-size: 1.1em;
text-indent: -22px;
}
}
~~~
์ฌ๊ธฐ์ #pdf-canvas
๋ PDF ํ
ํ๋ฆฟ์ด ํฌํจ๋ ์จ๊ฒจ์ง DIV์ ์ด๋ฆ์
๋๋ค. ์ด๊ฒ์ด ์ด๊ฒ์ ์๋ํ๋ ๋ค๋ฅธ ์ฌ๋์๊ฒ ๋์์ด๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๋๋ ํธ์ง์ ์ํด TinyMCE๋ฅผ ์ฌ์ฉํ๊ณ ์ฌ์ฉ์๋ "๋ด๋ถ ์๋"์ ๋ณผ ์ ์์ด์ผํ์ง๋ง ๋ฒ์ ๋ฐ โข๊ฐ ์ฝ์ ๋๋๋ก ํ์ฅํ๋ ๋ฐฉ๋ฒ์ด์์ ์ ์์ง๋ง ์ ์ ํ 1-1 ์๋ฃจ์ ์ด ํจ์ฌ ๋ซ์ต๋๋ค. ๋ฌผ๋ก .
๊ฐ์ฌ ํด์,
์ค๋์ค
๊ฐ๋จํ ํธ๋ฆญ:
HTML
<ul><li>Item 1</li><li>Item 2</li></ul>
SCSS
ul li {
list-style-type: none;
&:before {
content: 'โข ';
margin-left: -1em;
}
}
๊ทธ๋ฐ๋ฐ ์ ์ด๊ฒ์ด html2canvas์์ ํด๊ฒฐ๋์ง ์๋์ง ๊ถ๊ธํฉ๋๋ค.
์ด๊ฒ์ ์ฐํํ๋ ๋์ ์ ๊ทผ ๋ฐฉ์์ 2๊ฐ์ ์ด์ด ์๋ ํ ์ด๋ธ์ ๋ง๋ค๊ณ ์ฒซ ๋ฒ์งธ ์ด์ โข ํ ์คํธ๋ฅผ ๋ ๋ฒ์งธ ์ด์ ๋ฃ๋ ๊ฒ์ ๋๋ค. ๊ทธ๊ฒ์ด ์ฌ๋ฐ๋ฅด๊ฒ ๋ ๋๋ง๋๋ ์ ์ผํ ๋ฐฉ๋ฒ์ด์์ต๋๋ค.
์ง๊ธ ํ ์คํธํ์ผ๋ฉฐ HTML ๋ชฉ๋ก์ 1.0.0 ์ํ 10์์ ์ ๋๋ก ์๋ํฉ๋๋ค.
https://jsfiddle.net/boLxkgj8/264/ Bullet์ ๋ ๋๋งํ ์ ์์ต๋๋ค :(์ด๋ป๊ฒ ํ ์ ์์ต๋๊น?
https://jsfiddle.net/boLxkgj8/264/ Bullet์ ๋ ๋๋งํ ์ ์์ต๋๋ค :(์ด๋ป๊ฒ ํ ์ ์์ต๋๊น?
์๊ฒ ์ต๋๋ค. ์ต์ ๋ฒ์ ์ ์ฌ์ฉํ์ง ์์๋๋ฐ ์ด์ ์ ๋๋ก ์๋ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
https://jsfiddle.net/jeavhg05/4/
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๊ฐ๋จํ ํธ๋ฆญ:
HTML
<ul><li>Item 1</li><li>Item 2</li></ul>
SCSS
ul li { list-style-type: none; &:before { content: 'โข '; margin-left: -1em; } }