Создать 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.