λΌμ΄λΈλ¬λ¦¬λ λ¬Έμ λ³Έλ¬Έμ΄ 30,000ν½μ μ μ΄κ³Όνλ©΄ λΉ μ΄λ―Έμ§λ₯Ό λ°νν©λλ€. 100 x 100μ μμλ₯Ό μΊ‘μ²νλ €κ³ ν κ²μ λλ€. κ·Έλ¬λ μμμ λΉ μ΄λ―Έμ§κ° ν€κ° ν° λͺΈμ²΄μ μμ΅λλ€.
λ€μμ μ΄ μ€λ₯λ₯Ό 보μ¬μ£Όλ λ°μ΄μ¬λ¦°μ λλ€.
https://jsfiddle.net/fvo1xh8b/2/
λ°λ μ¬μ΄μ¦λ 30,000 μ΄νλ‘ λ³κ²½νμλ©΄ μ λ©λλ€.
λλ λΉμ κ³Ό λκ°μ λ¬Έμ κ° μμ΅λλ€. μ΄μ λν ν΄κ²°μ± μ μ°Ύμμ΅λκΉ?
μ, κ°μ λ¬Έμ κ° λ°μνμ§λ§ λ§μΉ¨λ΄ μμλμ΅λλ€!
μ κ²½μ°μλ λ€μκ³Ό κ°μ ν΄κ²°μ±
μ΄ μμ΅λλ€.
λ€μκ³Ό κ°μ΄ body μμμ iframeμ λ£μΌμμμ€.
<html>
<head>
#canvas_handler {
position:absolute;
left: -10000px;
}
</head>
<body>
<iframe id="canvas_handler" />
</body>
</html>
μΊλ²μ€λ‘ λ³ννλ λ° νμν λͺ¨λ μμλ₯Ό ββ볡μ¬νμ¬ μ΄ iframeμ λ£κ³ html2canvasλ₯Ό μ¬μ©νμ¬ λ€μκ³Ό κ°μ΄ μ κ±°ν μ μμ΅λλ€.
const copy_ele = origin_ele.cloneNode(true);
canvas_handler.appendChild(copy_ele);
canvas_handler.style.height = origin_ele.scrollHeight;
canvas_handler.style.width = origin_ele.scrollWidth;
html2canvas(copy_ele, {
useCORS: true,
}).then((canvas) => {
// do your things
});
canvas_handler.removeChild(table_ele);
μ΄κ²μ μ¬μ ν v1.0.0 μ λ¬Έμ μ λκΉ? κ·Έλ λ€λ©΄ jsfiddleμ λν μλ₯Ό
μ΄ νΈλ μμ μμ μΆκ° μ 보 μμ²μ λν μλ΅μ΄ μμκΈ° λλ¬Έμ μλμΌλ‘ μ’ λ£λμμ΅λλ€. νμ¬ λ¬Έμ μ μλ μ 보λ§μΌλ‘λ μ‘°μΉλ₯Ό μ·¨νκΈ°μ μΆ©λΆν μ λ³΄κ° μμ΅λλ€. λ μ‘°μ¬ν μ μλλ‘ νμν λ΅λ³μ΄ μκ±°λ μ°ΎμΌλ©΄ μ°λ½ν΄ μ£Όμμμ€.
μλ νμΈμ, λ΄λΆ IP μΉ΄λ©λΌλ‘ iframeμ μ€ν¬λ¦¬λνλ €κ³ νλ©΄ λ¬΄ν¨ μ΄λ―Έμ§κ° λ°νλ©λλ€. λμμ£Όμκ² μ΅λκΉ?
@niklasvh μ΄λ €μ΄ μμ μ΄μ§λ§ μ¬μ€ μΊλ²μ€ ν¬κΈ°μ νκ³ λλ¬Έμ λλ€. μ¬λ°λ₯Έ νλμ ꡬννλ λ°©λ²μ λ ΌμνκΈ° μν΄ μ΄κ²μ΄ λ€μ μ΄λ¦΄ νμκ° μλ€κ³ μκ°ν©λλ€. νμ€ν ν°μμΌλ‘ μ»μ μ΄λ―Έμ§λ μ¬λ°λ₯Έ λμμ΄ μλλλ€.
μ κ²½μ°μλ μ 체 λ³Έλ¬Έμ 볡μ νκ³ μ΅λ λλΉ/λμ΄λ₯Ό μ€μ ν©λλ€: html2canvas(el, {height: 3000, width: 3000})
.
@toadkicker νμ , μ€λ λ΄ μ½λ/μμ μ μ μ₯ν©λλ€ ννννννν κ°μ¬ν©λλ€
@toadkicker κ°μ¬ν©λλ€!
μ, κ°μ λ¬Έμ κ° λ°μνμ§λ§ λ§μΉ¨λ΄ μμλμ΅λλ€!
μ κ²½μ°μλ λ€μκ³Ό κ°μ ν΄κ²°μ± μ΄ μμ΅λλ€.
λ€μκ³Ό κ°μ΄ body μμμ iframeμ λ£μΌμμμ€.<html> <head> #canvas_handler { position:absolute; left: -10000px; } </head> <body> <iframe id="canvas_handler" /> </body> </html>
μΊλ²μ€λ‘ λ³ννλ λ° νμν λͺ¨λ μμλ₯Ό ββ볡μ¬νμ¬ μ΄ iframeμ λ£κ³ html2canvasλ₯Ό μ¬μ©νμ¬ λ€μκ³Ό κ°μ΄ μ κ±°ν μ μμ΅λλ€.
const copy_ele = origin_ele.cloneNode(true); canvas_handler.appendChild(copy_ele); canvas_handler.style.height = origin_ele.scrollHeight; canvas_handler.style.width = origin_ele.scrollWidth; html2canvas(copy_ele, { useCORS: true, }).then((canvas) => { // do your things }); canvas_handler.removeChild(table_ele);
μ΄ λ°©λ²μ μλνμ§λ§ μ νν μλνμ§ μμ΅λλ€. λ΄ λ°©μμΌλ‘ μλ μ½λμ ν¨κ» μλν©λλ€.
const copy_ele = origin_ele.cloneNode(true);
canvas_handler.contentDocument.body.appendChild(copy_ele);
canvas_handler.height = origin_ele.scrollHeight;
canvas_handler.width = origin_ele.scrollWidth;
html2canvas(canvas_handler.contentDocument.body, {
useCORS: true,
}).then((canvas) => {
// do your things
canvas_handler.removeChild(copy_ele);
});
κ·Έλ¦¬κ³ CSS μ€νμΌμ νμ¬ λ¬Έμμ λμΌνκ² μ μ©νλ €λ©΄ μ€νμΌμ iframeμ 볡μ¬ν΄μΌ ν©λλ€.
// add style
const link = document.createElement('link');
link.rel = 'stylesheet';
link.href = 'your_style_file_url.css';
canvas_handler.contentDocument.head.appendChild(link);
const copy_ele = origin_ele.cloneNode(true);
canvas_handler.contentDocument.body.appendChild(copy_ele);
canvas_handler.height = origin_ele.scrollHeight;
canvas_handler.width = origin_ele.scrollWidth;
html2canvas(canvas_handler.contentDocument.body, {
useCORS: true,
}).then((canvas) => {
// do your things
canvas_handler.removeChild(copy_ele);
});
λ€μ λ§νμ§λ§ μ΄κ²μ λΈλΌμ°μ μ체μ νκ³μ΄λ©° μ΄ λΌμ΄λΈλ¬λ¦¬λ μ€λ₯λ₯Ό μ¬λ°λ₯΄κ² μ²λ¦¬νμ§ μμ΅λλ€. μΊ‘μ²λ ν½μ μλ₯Ό μ ννλ κ² μΈμλ μ½λ© μ루μ μ΄ λ³κ²½λμ§ μμ΅λλ€.
μ, κ°μ λ¬Έμ κ° λ°μνμ§λ§ λ§μΉ¨λ΄ μμλμ΅λλ€!
μ κ²½μ°μλ λ€μκ³Ό κ°μ ν΄κ²°μ± μ΄ μμ΅λλ€.
λ€μκ³Ό κ°μ΄ body μμμ iframeμ λ£μΌμμμ€.<html> <head> #canvas_handler { position:absolute; left: -10000px; } </head> <body> <iframe id="canvas_handler" /> </body> </html>
μΊλ²μ€λ‘ λ³ννλ λ° νμν λͺ¨λ μμλ₯Ό ββ볡μ¬νμ¬ μ΄ iframeμ λ£κ³ html2canvasλ₯Ό μ¬μ©νμ¬ λ€μκ³Ό κ°μ΄ μ κ±°ν μ μμ΅λλ€.
const copy_ele = origin_ele.cloneNode(true); canvas_handler.appendChild(copy_ele); canvas_handler.style.height = origin_ele.scrollHeight; canvas_handler.style.width = origin_ele.scrollWidth; html2canvas(copy_ele, { useCORS: true, }).then((canvas) => { // do your things }); canvas_handler.removeChild(table_ele);
μ΄ λ°©λ²μ μλνμ§λ§ μ νν μλνμ§ μμ΅λλ€. λ΄ λ°©μμΌλ‘ μλ μ½λμ ν¨κ» μλν©λλ€.
const copy_ele = origin_ele.cloneNode(true); canvas_handler.contentDocument.body.appendChild(copy_ele); canvas_handler.height = origin_ele.scrollHeight; canvas_handler.width = origin_ele.scrollWidth; html2canvas(canvas_handler.contentDocument.body, { useCORS: true, }).then((canvas) => { // do your things canvas_handler.removeChild(copy_ele); });
κ·Έλ¦¬κ³ CSS μ€νμΌμ νμ¬ λ¬Έμμ λμΌνκ² μ μ©νλ €λ©΄ μ€νμΌμ iframeμ 볡μ¬ν΄μΌ ν©λλ€.
// add style const link = document.createElement('link'); link.rel = 'stylesheet'; link.href = 'your_style_file_url.css'; canvas_handler.contentDocument.head.appendChild(link); const copy_ele = origin_ele.cloneNode(true); canvas_handler.contentDocument.body.appendChild(copy_ele); canvas_handler.height = origin_ele.scrollHeight; canvas_handler.width = origin_ele.scrollWidth; html2canvas(canvas_handler.contentDocument.body, { useCORS: true, }).then((canvas) => { // do your things canvas_handler.removeChild(copy_ele); });
μ κ²½μ°μλ λͺ¨λ μμκ° svg λλ μΈλΌμΈ μ€νμΌμ΄λ―λ‘ μ€νμΌμνΈλ₯Ό μΆκ°ν νμκ° μμ΅λλ€. νμ§λ§ μ, νμν κ²½μ° μ€νμΌμνΈλ₯Ό μΆκ°ν΄μΌ ν©λλ€.
λλ κ°μ λ¬Έμ μ μ§λ©΄νλ€. λͺ¨λ¬ μ°½(κ³ μ μμΉ)μμ μ΄λ―Έμ§λ₯Ό λ§λ€μ΄μΌ νμ΅λλ€. λλ νμ ν°μ μ΄λ―Έμ§λ₯Ό λ°μμ΅λλ€. λ¬Έμ λ μ€ν¬λ‘€ μμΉμ μμμ΅λλ€. μ΄ μ½λλ μ μκ² ν¨κ³Όμ μ λλ€.
const el = document.getElementById('html-to-canvas-area')
const area = el.getBoundingClientRect()
html2canvas(el, {
scrollX: 0,
scrollY: 0,
width: area.width,
height: area.height
})
맀λ ₯μ²λΌ λλ₯Ό μν΄ μΌνμ΅λλ€! μ리ν μ루μ μ κ°μ¬λ립λλ€!
@invisor μλͺ μ μμΈ! κ·Έκ²μ΄ λλ₯Ό μν΄ μΌν μ μΌν κ²μ λλ€.
μ΄ μ΅μ μ κ΄λ ¨ μ¬λ‘λ₯Ό μ€ν¬λ‘€νκΈ° μν μ루μ μΌ μλ μμ΅λλ€.
{
scrollX: 0,
scrollY: -window.scrollY
}
κ°μ₯ μ μ©ν λκΈ
@niklasvh μ΄λ €μ΄ μμ μ΄μ§λ§ μ¬μ€ μΊλ²μ€ ν¬κΈ°μ νκ³ λλ¬Έμ λλ€. μ¬λ°λ₯Έ νλμ ꡬννλ λ°©λ²μ λ ΌμνκΈ° μν΄ μ΄κ²μ΄ λ€μ μ΄λ¦΄ νμκ° μλ€κ³ μκ°ν©λλ€. νμ€ν ν°μμΌλ‘ μ»μ μ΄λ―Έμ§λ μ¬λ°λ₯Έ λμμ΄ μλλλ€.
μ κ²½μ°μλ μ 체 λ³Έλ¬Έμ 볡μ νκ³ μ΅λ λλΉ/λμ΄λ₯Ό μ€μ ν©λλ€:
html2canvas(el, {height: 3000, width: 3000})
.