从PHP创建PDF文件

Joh*_*ohn 12 javascript php iframe jspdf

我试图从PHP页面创建一个PDF文件,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>
?>
Run Code Online (Sandbox Code Playgroud)

当我点击Button以下脚本时应将页面转换为PDF

脚本

<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>
Run Code Online (Sandbox Code Playgroud)

但是当我击中时Button.什么都没发生.有人知道什么是错的吗?

Moh*_*ani 5

你必须获得iframe的html,所以使用contents()function然后得到documentElementiframe:

<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>
Run Code Online (Sandbox Code Playgroud)

注意:如果您的iframe源页面或其一部分受x-frame-options标题保护,则无法访问它的html.


rba*_*kam 1

<button onclick="cmd()">Button</button>
Run Code Online (Sandbox Code Playgroud)

将此更改为

<button id="cmd">Button</button>
Run Code Online (Sandbox Code Playgroud)

您正在 JS 中对 id 调用点击事件。或者将 onclick 事件更改为名为 cmd 的函数。