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