jsPDF nie jest zdefiniowany w javascript
Zaimportowałem bibliotekę jsPDF i próbowałem wyeksportować do pliku PDF, ale otrzymuję błąd JavaScript. JsPDF nie jest zdefiniowany.
Wypróbowałem inne podobne posty i nie działało to dla mnie.
Mam tu skrzypce https://jsfiddle.net/aybhvf8e/1/
<script type="text/javascript" src="https://unpkg.com/jspdf@latest/dist/jspdf.umd.min.js"></script>
$( document ).ready(function() { var doc = new jsPDF(); var specialElementHandlers = { '#editor': function (element, renderer) { return true; } }; }) $('#cmd').click(function () {
doc.fromHTML($('#content').html(), 15, 15, {
'width': 170,
'elementHandlers': specialElementHandlers
});
doc.save('sample-file.pdf');
});
<div id="content">
<h3>Hello, this is a H3 tag</h3>
<p>A paragraph</p>
</div>
<div id="editor"></div>
<button id="cmd">generate PDF</button>
Odpowiedzi
Myślę, że twój kod wydaje się poprawny, ale problem z cdn. Użyłem tutaj debugowania.
Oto jeden działający przykład, który stworzyłem, do którego możesz się odnieść. Jeśli nie widzisz pobierania pliku PDF z powodu ograniczenia przepełnienia stosu, użyj tego skrzypiec do przetestowania.
Praca Pobierz demo PDF
Użyte przeze mnie łącze cdn to: JsPDF CDN LINK . Na pewno możesz poszukać innych dostępnych wersji.
function createPdf() {
var doc = new jsPDF();
source = $('#content')[0];
specialElementHandlers = {
'#editor': function (element, renderer) {
return true
}
};
doc.fromHTML(
source,
15,
15,
{
'width': 170,
'elementHandlers': specialElementHandlers
}
);
doc.save('sample-file.pdf')
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.2.61/jspdf.debug.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="content">
<h3>Hello, this is a H3 tag</h3>
<p>A paragraph</p>
</div>
<div id="editor"></div>
<button onclick="javascript:createPdf()" id="cmd">generate PDF</button>
Znalazłem dwa główne problemy, rozwiązane w tym rozwidleniu . Po pierwsze, nie utworzyłeś linku do jspdf. Możesz to zrobić w kodzie html:
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.5.3/jspdf.min.js"></script>
Po drugie, dodajesz clickdetektor zdarzeń poza ready()funkcją. To z kolei powoduje dwa problemy: zdarzenie może nie zostać dołączone (upewnij się, że sprawdziłeś przyczynę ready()funkcji), a zmienne zdefiniowane w ready()funkcji nie są dostępne (wyjdź poza zakres) w clickfunkcji. Możesz rozwiązać oba problemy, ustawiając clickodbiornik wewnątrz readynasłuchiwania:
$( document ).ready(function() { var doc = new jsPDF(); var specialElementHandlers = { '#editor': function (element, renderer) { return true; } }; $('#cmd').click(function () {
doc.fromHTML($('#content').html(), 15, 15, {
'width': 170,
'elementHandlers': specialElementHandlers
});
doc.save('sample-file.pdf');
});
})
VQR ..... jedno pytanie, moja aplikacja działa czasami w miejscach bez sieci, więc następna linia nie będzie działać bez sieci, prawda?
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.5.3/jspdf.min.js"></script>
Więc zainstalowałem to ...
npm install jspdf --save
Ale teraz, jakie pliki mam skopiować na dywan Js, aby działała linia?
var doc = new jsPDF();