繁体   English   中英

如何打印通过ajax请求获取的PDF?

[英]How can I print a PDF fetched via an ajax request?

我有一个表单,一旦提交,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()吗?

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

<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时起作用。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM