์ ํ ํ ๋ :
html2canvas(document.getElementsByClassName('console'), {
onrendered: function(canvas) {
var img = canvas.toDataURL()
var iframe = '<iframe src="' + img + '" frameborder="0" style="border:0; top:0px; left:0px; bottom:0px; right:0px; width:100%; height:100%;" allowfullscreen></iframe>'
var x = window.open();
x.document.open();
x.document.write(iframe);
x.document.close();
},
letterRendering: true,
});
letterRendering
์ ๋ฌด์ ๊ด๊ณ์์ด Chrome์ด ์ถ๋ ฅํ๋ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Firefox์ ์ถ๋ ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๊ทธ๋ ๊ฒ ๋ ๋๋งํ๋ ํน๋ณํ ์ด์ ๊ฐ ์์ต๋๊น?
๋ฌธ์ ๊ฐ๊ฒฉ (์ด ๊ฒฝ์ฐ ๋จ์ด ๊ฐ๊ฒฉ)์ ์ค์ ๋ก ์ ํ ํด ๋ณด์ด์ง๋ง ์ฌ๋ฐ๋ฅด์ง ์์ ๊ฒ์ ๊ธ๊ผด ๋ชจ์์ ๋๋ค. ์ด๋ค ๋ฒ์ ์ html2canvas๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๊น? jsfiddle์์ ๋ฌธ์ ๋ฅผ ๋ณต์ ํ ์ ์์ต๋๊น?
ํธ์ง : letterRendering์ ์ฌ์ฉํ๋ฉด ์ธ๊ธ ํ๋๋ก ๋ค๋ฅด๊ฒ ๋ ๋๋ง๋ฉ๋๋ค.
๋ต์ฅ์ ๋ณด๋ด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค,
0.5.0-beta4
๋ฒ์ ์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
์์ ๊ฐ๊ฒฉ์ด ์ ํ ํด ๋ณด์ธ๋ค๋ ์๋ฏธ๋ ๋ฌด์์ ๋๊น? ์ ๊ฐ ๊ณต์ ํ ์ฒซ ๋ฒ์งธ ์ฌ์ง์ ๋ง์ํ์๋ ๊ฑด๊ฐ์? ๊ธ๊ผด์ด ๋จ์ด ์ฌ์ด์ ๊ทธ๋ฌํ ๊ฐ๊ฒฉ์ ๋ง๋ค๊น์?
๋ด๊ฐ ์ฌ์ฉํ๊ณ ์์ต๋๋ค CodeMirror์ : ๋ ๋๋ง๋๋ ํ ์คํธ ํธ์ง๊ธฐ, ๊ตฌ์ฒด์ ์ผ๋ก ๊ฐ๋ ๋ํผ NG2 - codemirror .
๋๋ ์ฌ๊ธฐ์ ์๋ฌด ์์ฉ์ด์๋ ๋ฌธ์ ๋ฅผ ์ฌํ ํด ๋ณด์๋ค.
ํ์ด์ด ํญ์ค์ ํฌ๋กฌ์์๋ ๊ฐ์ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค. ํ ์คํธ์ ๋ฌธ์ ๊ฐ๊ฒฉ CSS ๊ท์น์ด์๋ ๊ฒฝ์ฐ ๊ฐ ๋จ์ด ์ฌ์ด์ ํฐ ๊ฐ๊ฒฉ์ด์๋ ํ ์คํธ๋ฅผ ๋ ๋๋งํฉ๋๋ค. ์ด๊ฒ์ ๋ฒ์ 0.4.1์์๋ ํ ์คํธ๋ฅผ ์๋ฒฝํ๊ฒ ๋ ๋๋งํ๋ ๋ฐ ์ฌ์ฉ๋์ง ์์์ง๋ง ์์ฌ ์์ (: before : after)๊ฐ ๋๋ฝ๋์์ต๋๋ค.
letter-spacing
๊ท์น์ ์ ๊ฑฐํ๋ฉด ๋ชจ๋ ๊ฒ์ด ์ ์์ผ๋ก ๋์ ๊ฐ๋๊น? ๋ด ๊ตฌ์ฑ ์์์ CSS ๋ ์ฌ์ฉ์ ์ ์ code-mirror
์ CSS ํ์ผ์์ ์ฌ์ฉํ์ง ์์ต๋๋ค.
์ CSS์์ ๋ฌธ์ ๊ฐ๊ฒฉ ๊ท์น์ ์ ๊ฑฐํ๋ฉด ๋ฌธ์ ๊ฐ ์ฌ๋ผ์ง๋๋ค. ๋จ์ด ์ฌ์ด์ ํฐ ๊ณต๋ฐฑ์ด ์์ต๋๋ค. ๊ทธ๊ฒ์ ๊ทธ๊ฒ์ ์๋ง์ผ๋ก ๋ง๋๋ ๊ธ์ ๊ฐ๊ฒฉ ๋ถ๋ถ์ ํ์ด์ง ๋ ๋๋ง์์ ๋ฌด์ธ๊ฐ์ ๋๋ค.
์ต์ ์ ๋ณด! ์ ๋ master์ ์ต์ ์์ค์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ตฌ์ถํ์ผ๋ฉฐ ์๋ฒฝํ๊ฒ ์๋ํฉ๋๋ค. ์ง๊ธ๊น์ง ๋ชจ๋ ๊ฒ์ด ์ ๋ง ์ข์ ๋ณด์ ๋๋ค. ์ด์ ์๋ v0.5.0-beta4 ๋ฆด๋ฆฌ์ค๋ฅผ ์ฌ์ฉํด ๋ณด์์ต๋๋ค.
ํธ์ง : firefox์์ 1 ๊ฐ์ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค. ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง๊ฐ ํ
์คํธ๋ก ์๋ฆฌ์ง ์์ต๋๋ค.
-webkit-background-clip : ํ
์คํธ;
-webkit-text-fill-color : ํฌ๋ช
;
์ฌ์ฉ๋ฉ๋๋ค.
๊ทธ๋๋ ํฌ๋กฌ์์๋ ์ ์๋ํฉ๋๋ค.
๋ด CSS์์ letter-spacing
์์ฑ์ ์ฌ์ฉํ์ง ์๊ณ ๋ฌธ์ ๊ฐ ์ฌ์ ํ ์กด์ฌํฉ๋๋ค. ๊ทธ๋๋ v0.5.0-beta4
ํ๊ณ ์์ต๋๋ค.
์ต์ ๋ง์คํฐ ์์ค์์ ๋น๋ ํด๋ณด์ญ์์ค.
์๋ฃ๋์์ง๋ง ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง ์๊ณ ๋์คํ๋ ์ด๋ ๋์ผํ๊ฒ ์ ์ง๋ฉ๋๋ค.
https://github.com/niklasvh/html2canvas/commit/77d258f1d8eeccf7e38235463a293b512c1ca3d0 ์ผ๋ก ์์ ํด์ผํฉ๋๋ค.
๋ฌธ์ ๊ฐ ๋ค์๊ณผ ๊ฐ์ด ์ง์๋๋ ๊ฒ ๊ฐ์ต๋๋ค.
์์๋ฅผ ๋ ๋๋ง ํ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
html2canvas(document.body).then(function(canvas) {
document.body.appendChild(canvas);
});
๊ทํ๊ฐ ์ธ๊ธ ํ ์ต์ ์ํํ ๋ฒ์ ์ ๋ค์ด๋ก๋ํ๊ณ ์ด์ ๋ฒ์ ์ ๊ต์ฒดํ์ต๋๋ค.
@christopherkade ๋ letterRendering: true
์ต์
์ ์ค์ ํ๋ฉด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๊น?
์ฌํ๊ฒ๋ ๊ทธ๋ ์ง ์์ต๋๋ค. ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
let element = document.getElementById('console');
const options = {
letterRendering: true
};
html2canvas(element, options).then(function(canvas) {
document.body.appendChild(canvas);
var url = canvas.toDataURL();
var img = '<img src="' + url + '" style="border:0;"></img>'
var x = window.open();
x.document.open();
x.document.write(img);
x.document.close();
});
์ ์ฅ์์ ์ ๊ณต๋ ์์ ๋ฅผ ์๋ํด๋ ๋์ผํ ๊ฒฐ๊ณผ๊ฐ ๋ํ๋ฉ๋๋ค.
๋ฌธ์ ์ ๋ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฐพ์์ต๋๋ค (๋งค์ฐ ๊นจ๋ํ์ง ์์ต๋๋ค).
// Package used to detect the browser used by the user
const browser = detect();
const element = document.getElementById('console');
// Set up my options
let options = {};
// For some reason foreignObjectRendering solves the spacing issue on Chrome but gives an error on Firefox, so I detect the browser and apply the adequate options.
if (browser && browser.name === 'chrome') {
options = {
useCORS: true,
foreignObjectRendering: true
};
}
// Open the canvas in a new window
html2canvas(element, options).then(function(canvas) {
const url = canvas.toDataURL();
const img = '<img src="' + url + '" style="border:0;"></img>'
const x = window.open();
x.document.open();
x.document.write(img);
x.document.close();
});
๋ ๋ฒ์งธ ์ต์ ์ ์ฌ์ฉํ ๋ Firefox์์ ๋ฐ์ํ๋ ์ค๋ฅ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
ํฌ์ฐฉ๋์ง ์์ (์ฝ์) : [์์ธ ... "์คํ๋์ง ์์ ๋ฐฉ๋ฒ"...
๊ฐ์ ๋ฌธ์ !!
HTML ๋ณธ๋ฌธ์์ CSS ์์ฑ font-variant-numeric : ratioal-nums ๋ฅผ ์ ๊ฑฐํ์ฌ ์ฌ๊ธฐ์ ํด๊ฒฐ๋์์ต๋๋ค.
font-variant: tabular-nums;
( in antd.css
) ์ ๊ฑฐ์ ์ ์ฌํ ๋ฌธ์ ๊ฐ ์์ ๋์์ต๋๋ค.
์๋์ด์ ๋์ผํ ๋ฌธ์ ๊ฐ ์์ต๋๊น?
@mohafouad +1
์ด๊ฒ์ ๋ํ ํด๊ฒฐ์ฑ ์ ์ฐพ์์ต๋๊น? ๊ฐ์ฌํฉ๋๋ค.
@ 2xSamurai no :(
์คํฌ๋ฆฐ ์ท์ ์ฐ์ผ๋ ค๋ div๋ก ์ด๋ํ์ฌ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐ ํ ๋ค์ " font-variant: normal;
"๋ฅผ ์ค์ ํ์ฌ ๋์์ด๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์ ์ฒด ์ฝํ
์ธ ์ ์ธ๋ถ div์ font-variant: normal !important
๋ฅผ ์ถ๊ฐํ๋ฉด ์์ ๋์์ต๋๋ค (antd ํ๋ก์ ํธ์์).
๊ฐ์ ๋ฌธ์ ๊ฐ ๋๋ฅผ ๋ฏธ์น๊ฒ ๋ง๋ค์๋ค
font-variant : normal! important ์๋ํ์ง ์์
@ Malarkey-Jhu์ @maaoui ์ ๋๋ต์ด ๋ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
๋ด๊ฐ ๊ฐ์ง ๋ฌธ์ : ๊ธ๊ผด ํจ๋ฐ๋ฆฌ๊ฐ ์๋ํ์ง ์์๊ณ ๊ฐ๊ฒฉ์ด ๋งค์ฐ ๋ถ์์ ํ์ต๋๋ค. ๋๋๋ก ๋๋ ๊ฒน์น๋ ๊ธ์๋ฅผ ๊ฐ์ง ๊ฒ์ ๋๋ค.
๋ด๊ฐํ๋ ์ผ : ๋ด๋ณด๋ด๊ธฐ ์ค์ ํ ์คํธ๊ฐ์๋ ์์์์ element.style.setProperty ( 'font-variant', 'normal')์ ํธ์ถํ๋ฉด ๊ธ๊ผด ๋ชจ์์ด ์ ๋๋ก ํ์๋๊ณ ๊ฐ๊ฒฉ์ด ๋ชจ๋ ๋ถ์์ ํ์ง ์์ต๋๋ค. . ๊ทธ๋ฐ ๋ค์ ๋ด๋ณด๋ด๊ธฐ๋ฅผ ๋ง์น ํ ํด๋น ์์ฑ์ ์ ๊ฑฐํฉ๋๋ค.
์์ ์๋ฃจ์
์ ๊ธฐ๋ฐ์ผ๋ก์ด ๋ฌธ์ ๋ codemirror css ํ์ผ์์ -webkit-font-variant-ligatures
๋ฐ font-variant-ligatures
๋ฅผ normal
๋ก ๋ณ๊ฒฝํ์ฌ ์ ๋ฅผ ์ํด ์์ ๋์์ต๋๋ค. CodeMirror ๋ฒ์ 5.42.2
์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์คํฌ๋ฆฐ ์ท์ ์ฐ์ผ๋ ค๋ div๋ก ์ด๋ํ์ฌ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐ ํ ๋ค์ "
font-variant: normal;
"๋ฅผ ์ค์ ํ์ฌ ๋์์ด๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.