使用PHP创建PDF文件

13

我想从一个PHP页面中用jsPDF创建一个PDF文件,但它无法正常工作,我不知道哪里出了问题。

有人可以帮帮我吗?

首先,我有一个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>
?>
当我点击按钮时,以下脚本应将页面转换为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>

但是当我点击按钮时,什么也没有发生。有人知道出了什么问题吗?


您没有任何ID为“cmd”的按钮,也没有名为“cmd”的函数。 - Arg0n
@Arg0n。它正在创建一个PDF页面。但是该页面为空。 - John
3个回答

6

您需要获取iframe的html,因此使用contents()函数,然后获取iframe的documentElement

<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 内容。

它没有做任何事情。 - John
当我写下 doc.fromHTML($('iframe') 时,它会创建一个空的 PDF 文件。iframe 的 ID 和名称为 frame。当我将 doc.fromHTML($('iframe') 更改为 doc.fromHTML($('frame') 时,它不再创建文件了。 - John
它仍然没有创建文件。也许需要答案。这是 iframe 内容的样子:https://jsfiddle.net/ss6780qn/ - John
等一下。现在有内容了。当我第一次点击时,脚本会创建一个空的PDF文件。当我再次点击时,我会得到一个带有数据的PDF文件。 - John
同时,PDF 文件看起来与不同。样式与 iframe 的内容不同。 - John
显示剩余9条评论

1
<button onclick="cmd()">Button</button>

把这个改成 < /p>。
<button id="cmd">Button</button>

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

仍然没有任何事情发生。 - John
什么都没有发生,你能看到按钮吗?我看到你把HTML放在PHP标签里了。你应该把GET放在PHP里面。如果你能看到按钮,那就在点击事件中加入一些日志记录,看看它是否触发。 - rbaskam
我忘了删除 ()。现在它正在创建一个PDF页面。但是这个PDF是空的。 - John
不确定,但可能需要将 $('frame') 更改为 $('#frame')。 - rbaskam
不,它仍然是空的。 - John
显示剩余2条评论

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接