Html2canvas: рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╛ рдореБрдЦреНрдп рднрд╛рдЧ 30,000px рд╕реЗ рдЕрдзрд┐рдХ рд▓рдВрдмрд╛ рд╣реЛрдиреЗ рдкрд░ рдХрд┐рд╕реА рднреА рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд┐рдХреНрдд рдЫрд╡рд┐ рджреЗрддрд╛ рд╣реИред

рдХреЛ рдирд┐рд░реНрдорд┐рдд 31 рдордИ 2016  ┬╖  16рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: niklasvh/html2canvas

рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╛ рдореБрдЦреНрдп рднрд╛рдЧ 30,000px рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдиреЗ рдкрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдПрдХ рдЦрд╛рд▓реА рдЫрд╡рд┐ рджреЗрддрд╛ рд╣реИред рдЖрдк резрежреж x резрежреж рдХреЗ рдПрдХ рддрддреНрд╡ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗред рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдПрдХ рд▓рдВрдмреЗ рд╢рд░реАрд░ рдкрд░ рддрддреНрд╡ рдХреА рдПрдХ рдЦрд╛рд▓реА рдЫрд╡рд┐ рдорд┐рд▓рддреА рд╣реИред

рдпрд╣рд╛рдВ рдПрдХ рдкрд╣реЗрд▓реА рд╣реИ рдЬреЛ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреА рд╣реИред

https://jsfiddle.net/fvo1xh8b/2/

рдЖрдк рд╢рд░реАрд░ рдХрд╛ рдЖрдХрд╛рд░ 30,000 рд╕реЗ рдХрдо рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

Needs More Information

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

@niklasvh рдпрд╣ рдПрдХ рдХрдард┐рди рд╣реИ рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдХреИрдирд╡рд╛рд╕ рдЖрдХрд╛рд░ рдХреА рд╕реАрдорд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рд╕рдлреЗрдж рдзреБрд▓реА рд╣реБрдИ рдЫрд╡рд┐ рд╕рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рд╣реИред

  • рдХреИрдирд╡рд╛рд╕ рдХреЗ рд▓рд┐рдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЕрдзрд┐рдХрддрдо рдЪреМрдбрд╝рд╛рдИ/рдКрдВрдЪрд╛рдИ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд░реЗрдВ
  • рдХрдИ рдХреИрдирд╡рд╛рд╕ рддрддреНрд╡реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдФрд░ рдЬреАрддреЗрдВ рдФрд░ рдПрдХ рд╕рд░рдгреА рд▓реМрдЯрд╛рдПрдВред
  • рдХреИрдирд╡рд╛рд╕ рд╕реАрдорд╛рдУрдВ рдкрд░ рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реБрдП рдХрдВрд╕реЛрд▓ рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХреЗрдВ рдФрд░ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╕реБрдЭрд╛рдПрдВред

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдореИрдВ рдкреВрд░реЗ рд╢рд░реАрд░ рдХреЛ рдХреНрд▓реЛрди рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЕрдзрд┐рдХрддрдо рдЪреМрдбрд╝рд╛рдИ/рдКрдВрдЪрд╛рдИ рд╕реЗрдЯ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ: html2canvas(el, {height: 3000, width: 3000}) ред

рд╕рднреА 16 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореЗрд░реЗ рдкрд╛рд╕ рдЖрдкрдХреЗ рдЬреИрд╕рд╛ рд╣реА рдореБрджреНрджрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЗрд╕рдХрд╛ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛ рд╣реИ?

рдПрдореНрдо, рдореБрдЭреЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдорд┐рд▓реА, рд▓реЗрдХрд┐рди рдЕрдВрдд рдореЗрдВ, рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛!
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди рдпрд╣рд╛рдВ рд╣реИ:
рдЕрдкрдиреЗ рд╢рд░реАрд░ рдХреЗ рддрддреНрд╡ рдореЗрдВ рдПрдХ рдЖрдИрдлреНрд░реЗрдо рд▓рдЧрд╛рдПрдВ, рдЬреИрд╕реЗ

<html>
  <head>
  #canvas_handler {
   position:absolute;
   left: -10000px;
  }
  </head>
  <body>
  <iframe id="canvas_handler" />
  </body>
</html>

рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рдХреИрдирд╡рд╛рд╕ рдореЗрдВ рдЫреБрдкрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЖрдк рдХреЙрдкреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рдЖрдИрдлреНрд░реЗрдо рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ 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 рдкрд░ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЕрдкрдиреЗ рдЖрдк рдмрдВрдж рдХрд░ рджреА рдЧрдИ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореВрд▓ рд▓реЗрдЦрдХ рдХреА рдУрд░ рд╕реЗ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдЕрдиреБрд░реЛрдз рдХрд╛ рдХреЛрдИ рдЬрд╡рд╛рдм рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИред рдХреЗрд╡рд▓ рдЙрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╣реИ рддреЛ рдХреГрдкрдпрд╛ рд╕рдВрдкрд░реНрдХ рдХрд░реЗрдВ рдпрд╛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЙрддреНрддрд░ рдЦреЛрдЬреЗрдВ рддрд╛рдХрд┐ рд╣рдо рдЖрдЧреЗ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХреЗрдВред

рд╣рд╛рдп рдЬрдм рдореИрдВ рдЖрдВрддрд░рд┐рдХ рдЖрдИрдкреА рдХреИрдорд░реЗ рдХреЗ рд╕рд╛рде рдПрдХ рдЖрдИрдлреНрд░реЗрдо рд╕реНрдХреНрд░реАрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рдПрдХ рд╢реВрдиреНрдп рдЫрд╡рд┐ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдХреГрдкрдпрд╛ рдХреНрдпрд╛ рдЖрдк рдореЗрд░реА рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

@niklasvh рдпрд╣ рдПрдХ рдХрдард┐рди рд╣реИ рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдХреИрдирд╡рд╛рд╕ рдЖрдХрд╛рд░ рдХреА рд╕реАрдорд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рд╕рдлреЗрдж рдзреБрд▓реА рд╣реБрдИ рдЫрд╡рд┐ рд╕рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рд╣реИред

  • рдХреИрдирд╡рд╛рд╕ рдХреЗ рд▓рд┐рдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЕрдзрд┐рдХрддрдо рдЪреМрдбрд╝рд╛рдИ/рдКрдВрдЪрд╛рдИ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд░реЗрдВ
  • рдХрдИ рдХреИрдирд╡рд╛рд╕ рддрддреНрд╡реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдФрд░ рдЬреАрддреЗрдВ рдФрд░ рдПрдХ рд╕рд░рдгреА рд▓реМрдЯрд╛рдПрдВред
  • рдХреИрдирд╡рд╛рд╕ рд╕реАрдорд╛рдУрдВ рдкрд░ рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реБрдП рдХрдВрд╕реЛрд▓ рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХреЗрдВ рдФрд░ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╕реБрдЭрд╛рдПрдВред

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдореИрдВ рдкреВрд░реЗ рд╢рд░реАрд░ рдХреЛ рдХреНрд▓реЛрди рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЕрдзрд┐рдХрддрдо рдЪреМрдбрд╝рд╛рдИ/рдКрдВрдЪрд╛рдИ рд╕реЗрдЯ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ: html2canvas(el, {height: 3000, width: 3000}) ред

@toadkicker рднрд╛рдИ, рд▓реА рд╣реИ , рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж

@toadkicker рдзрдиреНрдпрд╡рд╛рдж!

рдПрдореНрдо, рдореБрдЭреЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдорд┐рд▓реА, рд▓реЗрдХрд┐рди рдЕрдВрдд рдореЗрдВ, рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛!
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди рдпрд╣рд╛рдВ рд╣реИ:
рдЕрдкрдиреЗ рд╢рд░реАрд░ рдХреЗ рддрддреНрд╡ рдореЗрдВ рдПрдХ рдЖрдИрдлреНрд░реЗрдо рд▓рдЧрд╛рдПрдВ, рдЬреИрд╕реЗ

<html>
  <head>
  #canvas_handler {
   position:absolute;
   left: -10000px;
  }
  </head>
  <body>
  <iframe id="canvas_handler" />
  </body>
</html>

рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рдХреИрдирд╡рд╛рд╕ рдореЗрдВ рдЫреБрдкрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЖрдк рдХреЙрдкреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рдЖрдИрдлреНрд░реЗрдо рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ 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);
});

рдФрд░ рдпрджрд┐ рдЖрдк рдЕрдкрдиреА рд╕реАрдПрд╕рдПрд╕ рд╢реИрд▓реА рдХреЛ рд╡рд░реНрддрдорд╛рди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╢реИрд▓реА рдХреЛ рдЖрдИрдлреНрд░реЗрдо рдореЗрдВ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

// 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);
});

рдлрд┐рд░ рд╕реЗ рдпрд╣ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╣реА рдПрдХ рд╕реАрдорд╛ рд╣реИ рдФрд░ рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рддреНрд░реБрдЯрд┐ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд╣реАрдВ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред рдХреИрдкреНрдЪрд░ рдХрд┐рдП рдЧрдП рдкрд┐рдХреНрд╕реЗрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рдХреЛрдбрд┐рдВрдЧ рд╕рдорд╛рдзрд╛рди рдЗрд╕реЗ рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛ред

рдПрдореНрдо, рдореБрдЭреЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдорд┐рд▓реА, рд▓реЗрдХрд┐рди рдЕрдВрдд рдореЗрдВ, рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛!
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди рдпрд╣рд╛рдВ рд╣реИ:
рдЕрдкрдиреЗ рд╢рд░реАрд░ рдХреЗ рддрддреНрд╡ рдореЗрдВ рдПрдХ рдЖрдИрдлреНрд░реЗрдо рд▓рдЧрд╛рдПрдВ, рдЬреИрд╕реЗ

<html>
  <head>
  #canvas_handler {
   position:absolute;
   left: -10000px;
  }
  </head>
  <body>
  <iframe id="canvas_handler" />
  </body>
</html>

рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рдХреИрдирд╡рд╛рд╕ рдореЗрдВ рдЫреБрдкрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЖрдк рдХреЙрдкреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рдЖрдИрдлреНрд░реЗрдо рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ 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);
});

рдФрд░ рдпрджрд┐ рдЖрдк рдЕрдкрдиреА рд╕реАрдПрд╕рдПрд╕ рд╢реИрд▓реА рдХреЛ рд╡рд░реНрддрдорд╛рди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╢реИрд▓реА рдХреЛ рдЖрдИрдлреНрд░реЗрдо рдореЗрдВ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

// 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
}

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

celik75 picture celik75  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Josh10101010 picture Josh10101010  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

tjchambers32 picture tjchambers32  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

arzyu picture arzyu  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

deepender87 picture deepender87  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ