从 PHP 创建 PDF 文件
Posted
技术标签:
【中文标题】从 PHP 创建 PDF 文件【英文标题】:Create PDF file from PHP 【发布时间】:2017-11-03 19:37:56 【问题描述】:我正在尝试使用 jsPDF
从 php 页面创建 PDF 文件,但它不起作用,我不知道出了什么问题。
有人可以帮我吗?
首先我有一个Iframe
。我要转换的页面显示在iframe中:
iframe:
<?php
<iframe id="frame" name="frame" frameborder="0" src="./page.php?id=' . $_GET['id'] . '"></iframe>
<button id="cmd">Button</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>
但是当我点击Button
。什么都没有发生。有人知道怎么回事吗?
【问题讨论】:
您没有任何 ID 为cmd
的按钮,也没有名称为 cmd
的函数。
@Arg0n。它现在正在创建一个 PDF 页面。但是页面是空的
【参考方案1】:
你必须是获取iframe的html,所以使用contents()
函数然后获取iframe的documentElement
:
<iframe id="frame" name="frame" 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。
【讨论】:
它什么也没做 当我写的时候它正在创建一个空的pdf文件:doc.fromHTML($('iframe')
。 iframe 的 ID 和 NAMe 是frame
。当我将 doc.fromHTML($('iframe')
更改为 doc.fromHTML($('frame')
时,它不再创建了
试试doc.fromHTML($('#iframe').contents()[0].documentElement
它仍然没有创建文件。也许这是答案所必需的。 iframe 的内容如下所示:jsfiddle.net/ss6780qn
我看到了你的编辑。它正在创建一个 pdf 文件,但 PDF 文件是空的【参考方案2】:
<button onclick="cmd()">Button</button>
把这个改成
<button id="cmd">Button</button>
您在 JS 中调用 id 上的点击事件。或者将onclick事件改成一个名为cmd的函数。
【讨论】:
还是什么都没有发生 什么也没发生,你能看到按钮吗?我看到您已将 HTML 放入 PHP 标记中。你应该把 GET 放在 PHP 中。如果您可以看到该按钮,则在 click 事件中添加一些日志记录并查看其是否触发。 我忘了删除()
。现在它正在创建一个 PDF 页面。但是 PDF 是空的
不确定但可能将 $('frame') 更改为 $('#frame')
不,它还是空的【参考方案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 的其他限制。
【讨论】:
以上是关于从 PHP 创建 PDF 文件的主要内容,如果未能解决你的问题,请参考以下文章