HTML2Canvas отображает только то, что видно на экране

#javascript #reactjs #html2canvas #pdfjs

#javascript #reactjs #html2canvas #pdf.js

Вопрос:

я использую HTML2Canvas для рендеринга двух компонентов react
проблема заключается в том, что на выходе документа отображается только то, что видно на экране,
поэтому, если содержимое компонента короткое, я могу видеть все содержимое в формате pdf,
но если содержимое длинное, мне нужно прокрутить до самого верхастраницы, чтобы заставить ее работать, или мне нужно увеличить навигацию до 50%, а затем нажать печать
, что-то не так в моем коде :

 import React, {Component, PropTypes} from 'react';
import html2canvas from 'html2canvas';
import domtoimage from 'dom-to-image';

import jsPDF from 'jspdf';
import Pie from './Pie.js';
import Post from './Post.js';

class Qu extends Component {
  constructor(props) {
    super(props);
  }

  printDocument() {
    const input = document.getElementById('divToPrint');
    html2canvas(input)
    
      .then((canvas) => {
        
        let imgWidth = 208;
        let imgHeight = canvas.height * imgWidth / canvas.width;
        const imgData = canvas.toDataURL('img/png');
        const pdf = new jsPDF('p', 'mm', 'a4');
        pdf.addImage(imgData, 'PNG', 0, 0, imgWidth, imgHeight);
        pdf.save("download.pdf");
      })
    ;
  }

  render() {
    return (<div>
    
      <div id="divToPrint" className="mt4" style={{
                width: '100%',
                minHeight: '29.7cm',
                border: '1px #D3D3D3 solid',
                borderRadius: '5px',
                background: 'white',
                boxShadow: '0 0 5px rgba(0, 0, 0, 0.1)',
                size: 'A4',
                margin: 'auto'
            }}>
      
        <div><Pie /></div>
        <div><Pie /></div>
        <div className="mb5">
        <button onClick={this.printDocument}>Print</button>
      </div>
      </div>
    </div>);
  }
}
export default Qu;
  

Ответ №1:

решение было: добавление window.scrollTo(0,0); непосредственно перед html2canvas(input)