Создать PDF файл с PHP
Я пытаюсь создать PDF файл с PHP-страницы с помощью jsPDF
, но он не работает, и я не знаю, что не так.
Может кто-нибудь мне помочь?
Сначала у меня есть Iframe
. Страница, которую я хочу преобразовать, отображается в Iframe:
Iframe:
<?php
<iframe id="frame" name="frame" width="100%" height="1160px" frameborder="0" src="./page.php?id=' . $_GET['id'] . '"></iframe>
<button id="cmd">Button</button>
?>
Когда я нажал Button
, следующий script должен преобразовать страницу в PDF
Script
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.2/jspdf.min.js"></script>
<script type="text/javascript">
var doc = new jsPDF();
var specialElementHandlers = {
'#editor': function(element, renderer){
return true;
}
};
$('#cmd').click(function () {
doc.fromHTML($('frame').get(0), 15, 15, {
'width': 170,
'elementHandlers': specialElementHandlers
});
doc.save('sample-file.pdf');
});
</script>
Но когда я нажал Button
. Ничего не происходит. Кто-нибудь знает, что не так?
Ответы
Ответ 1
Вы должны получить html iframe, поэтому используйте contents()
, а затем получите documentElement
iframe:
<iframe id="frame" name="frame" width="100%" height="1160px" frameborder="0" src="http://localhost/"></iframe>
<button id="cmd">Button</button>
<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.2/jspdf.min.js"></script>
<script type="text/javascript">
var doc = new jsPDF();
var specialElementHandlers = {
'#editor': function(element, renderer){
return true;
}
};
$('#cmd').click(function () {
doc.fromHTML($('#frame').contents().find('html').html(), 15, 15, {
'width': 170,
'elementHandlers': specialElementHandlers
});
doc.save('sample-file.pdf');
});
</script>
Примечание. Если ваша исходная страница iframe или ее часть защищены заголовком x-frame-options
, вы не можете получить доступ к html этого файла.
Ответ 2
<button onclick="cmd()">Button</button>
Измените это на
<button id="cmd">Button</button>
Вы вызываете событие click в JS на id. Или измените событие onclick на функцию с именем cmd.
Ответ 3
По-видимому, jsPDF имеет ограничения и/или ошибки. У этого есть проблемы с сложными таблицами (особенно с colspans). Он выдает ошибки JavaScript, которые останавливают средство визуализации, поэтому вы получаете пустые pdf файлы.
https://github.com/MrRio/jsPDF/issues/516
https://github.com/MrRio/jsPDF/issues/595
Здесь указана вилка https://github.com/jutunen/jsPDF-table_2, но я не уверен, что она касается других ограничений jsPDF.