1

我有一个表单,一旦提交,PHP 会生成一个 PDF 文件并将其发送给客户端。到目前为止一切正常。我遇到的问题是我需要在包含收到的 pdf 的窗口上触发 window.print() 。有没有办法让接收到的 pdf 文件出现打印向导?

这是我的代码

//The #options is a form that once submitted is sends the requested PDF to the browser
$('#options').on('submit', function(e){

    if($(this).find('[name="action"]').val() == 'print')
    {
        var url = $(this).attr('action') || document.URL;
        e.preventDefault();
        $.post(url, $(this).serializeArray(),function(pdf){
            // Open the printing wizard for the requested document
        });
    }
    else
    {
        // The PDF is displayed normally
        return true;
    }

});

我什至不确定我想做的事情是否可行。例如,是否可以在新选项卡中打开 PDF 并在window.print()那里调用?

4

2 回答 2

3

一种简单的方法是将 PDF 文件放入新的 iFrame 中。window.print();然后您可以使用函数打印 iframe 内的完整内容。

<html>
<head>
<title>Print Test Page</title>
<script>
function printPDF() {
    window.frames["print_frame"].window.focus();
    window.frames["print_frame"].window.print();
}
</script>
</head>
<body>
Some content here
<iframe name=print_frame width=0 height=0 frameborder=0 src=about:blank>
  Your PDF is loaded here
</iframe>
Some more content here
</body>
</html>

现在window.print();当你想打印你的 pdf 时调用函数。

于 2013-01-18T11:01:27.397 回答
1

要在新窗口中打开 PDF,您实际上需要生成一个 GET 请求(以便可以通过 URL 打开该窗口) - 一种简单的方法是编写服务器端代码以通过查询字符串接受输入参数。更好的方法是使用 POST 请求(正如您当前所做的那样)在服务器端生成 PDF 并将其缓存在临时位置,然后将一些令牌/票证(例如,它可以像临时文件名一样简单)返回给浏览器. 此令牌将在 GET 请求中用于获取 PDF 文件 - GET 请求将发送到服务器,该服务器将简单地从临时位置读取文件并将其作为内联((即 header content-disposition: inline;)返回。然后您可以尝试window.print()打印它。类似方式可以与 iframe 一起使用(with contentWindow.print())。

但是,您可能会发现这些解决方案可能不起作用 - 例如,没有 PDF 插件来显示 PDF 内联(或用户选择始终在外部打开文件)。或者它可能无法跨浏览器工作。因此,另一种(和 IMO 更好的)方法是将 java-script 嵌入 PDF 中,它会在文件打开后立即指示打印。
例如,请参阅此 PHP 代码示例,该示例将在 PDF 生成中嵌入 java 脚本以进行自动打印 - 该示例使用 FPDF 生成 PDF。

于 2013-01-18T11:34:06.233 回答