Создать PDF файл из текста HTML.

Я новичок в реакт-редуксе.

Я пытаюсь создать такую функцию, как экспорт HTML-текста в PDF с помощью Javascript, и он работает с HTML, но когда я применяю его для реагирования на компонент, он не работает.

Это мой код:

import React from 'react';

class App extends React.Component {
  constructor(props){
    super(props);
    this.pdfToHTML=this.pdfToHTML.bind(this);
  }

  pdfToHTML(){
    var pdf = new jsPDF('p', 'pt', 'letter');
    var source = $('#HTMLtoPDF')[0];
    var specialElementHandlers = {
      '#bypassme': function(element, renderer) {
        return true
      }
    };

    var margins = {
      top: 50,
      left: 60,
      width: 545
    };

    pdf.fromHTML (
      source // HTML string or DOM elem ref.
      , margins.left // x coord
      , margins.top // y coord
      , {
          'width': margins.width // max width of content on PDF
          , 'elementHandlers': specialElementHandlers
        },
      function (dispose) {
        // dispose: object with X, Y of the last line add to the PDF
        // this allow the insertion of new lines after html
        pdf.save('html2pdf.pdf');
      }
    )
  }

  render() {
    return (
      <div>
        <div classID="HTMLtoPDF">
          <center>
            <h2>HTML to PDF</h2>
           <p>Lorem ipsum dolor sit amet, consectetur adipisicing </p>
          </center>
        </div>
        <button onClick={this.pdfToHTML}>Download PDF</button>
      </div>
    );
  } 
}

export default App;

Javascript с HTML: https://www.youtube.com/watch?v=HVuHr-Q7HEs

Ответ 1

React не имеет свойства classID в тегах html, он передается div как реквизит, который никогда не будет разрешен. className было реализовано только потому, что зарезервированное слово в JS, perhabs, вам нужно заменить свой "classID" только свойством "id", и он будет работать

P.s. JQuery - это плохая практика, когда все, что вам нужно, это манипуляция DOM. javascript имеют document.getElementById(), и зависимость не требуется

P.p.s. Небольшой совет для вас - "pdfToHTML() {}" можно заменить на лямбда как "pdfToHTML =() = > {}", и ваша функция будет иметь "this" из экземпляра класса, привязка будет удалена, а конструктор станет бесполезным.

Ответ 2

Это мой путь

- You can use that package in pure javascript file or server 
side(Backend)
- When you use it with the ReactJS(Frontend), it doesn't work.
- So I didn't use that.
- With html2canvas and jsPDF, I could build pdf.
- First build component, then save(download) it.